进化参考资料算法程序Word格式文档下载.docx
- 文档编号:16850134
- 上传时间:2022-11-26
- 格式:DOCX
- 页数:28
- 大小:204.66KB
进化参考资料算法程序Word格式文档下载.docx
《进化参考资料算法程序Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《进化参考资料算法程序Word格式文档下载.docx(28页珍藏版)》请在冰豆网上搜索。
x11=decodechrom(bestindividual,1,14);
%将二进制数转换为十进制数
x22=decodechrom(bestindividual,15,14);
x1(t)=-5+10*x11/(pow2(14)-1);
%将二值域中的数转换为变量域的数
x2(t)=-5+10*x22/(pow2(14)-1);
y(t)=4*x1(t)^2-2.1*x1(t)^4+1/3*x1(t)^6+x1(t)*x2(t)-4*x2(t)^2+4*x2(t)^4;
%计算最佳个体的目标函数值
[newpop1]=selection(pop,fitvalue);
%选择算子
[newpop2]=crossover(newpop1,pc);
%交叉算子
[newpop3]=mutation(newpop2,pm);
%变异算子
objvalue1=calobjvalue(newpop3(1,:
));
ifobjvalue1>
y(t)
newpop3(1,:
)=bestindividual;
%保留最佳个体
end
pop=newpop3;
%产生新种群
end
y;
%每代的最佳目标函数值
x1;
%每代的最佳目标函数值对应的自变量
x2;
[gy,k]=min(y)%gy为全局最优值,k为最优值对应的进化代数
gx1=x1(k)%全局最优值对应的自变量
gx2=x2(k)
plot(y)%最优值收敛曲线
title('
收敛性曲线'
);
xlabel('
进化代数'
ylabel('
函数值'
axis([0,500,-1.5,1.5]);
(2)初始种群:
initpop.m
functionpop=initpop(popsize,chromlength)
pop=round(rand(popsize,chromlength));
%rand随机产生[0,1]区间的一个小数,rand四舍五入取整
(3)计算目标函数值:
:
calobjvalue.m
function[objvalue]=calobjvalue(pop)
temp1=decodechrom(pop,1,14);
temp2=decodechrom(pop,15,14);
x1=-5+(10*temp1)/(pow2(14)-1);
%将二值域中的数转化为变量域中的数
x2=-5+(10*temp2)/(pow2(14)-1);
objvalue=4*x1.^2-2.1*x1.^4+1/3*x1.^6+x1.*x2-4*x2.^2+4*x2.^4;
%计算目标函数
a.二进制转换为十进制:
decodechrom.m
functiontemp=decodechrom(pop,spoint,length)
pop1=pop(:
spoint:
spoint+length-1);
%按变量个数分组转换,spoint为起始点,length为一个变量的长度
temp=decodebinary(pop1);
b.求二进制串对应的十进制数:
decodebinary.m
functiontemp=decodebinary(pop)
[px,py]=size(pop);
%求pop行数和列数
fori=1:
py
pop1(:
i)=2.^(py-i).*pop(:
i);
temp=sum(pop1,2);
%每一行求和
(4)计算个体适应度:
calfitvalue.m
functionfitvalue=calfitvalue(objvalue)
fitvalue=1./(1+exp(objvalue));
(5)种群中最大适应度个体及其值:
best.m
function[bestindividual,bestfit]=best(pop,fitvalue)
bestindividual=pop(1,:
bestfit=fitvalue
(1);
fori=2:
px;
iffitvalue>
bestfit
bestindividual=pop(i,:
best=fitvalue(i);
(6)选择算子:
selection.m
function[newpop1]=selection(pop,fitvalue)
totalfit=sum(fitvalue);
%适应度和
ps=fitvalue./totalfit;
%单个个体被选择的概率
pss=cumsum(ps);
%前几项累积和
ms=sort(rand(px,1));
%随机产生px个0,1之间的数,并按升序排列
fitin=1;
newin=1;
whilenewin<
=px
if(ms(newin)<
pss(fitin))
newpop1(newin,:
)=pop(fitin,:
newin=newin+1;
else
fitin=fitin+1;
(7)交叉算子:
crossover.m
function[newpop2]=crossover(pop,pc)
newpop2=ones(size(pop));
2:
px-1
ifrand<
pc
cpoint=round(rand*py);
%随机产生一个交叉位
newpop2(i,:
)=[pop(i,1:
cpoint),pop(i+1,cpoint+1:
py)];
%交换相邻两个个体交叉位之后的基因
newpop2(i+1,:
)=[pop(i+1,1:
cpoint),pop(i,cpoint+1:
nwepop2(i,:
)=pop(i,:
)=pop(i+1,:
(8)变异算子:
mutation.m
function[newpop3]=mutation(pop,pm)
newpop3=pop;
px
if(rand<
pm)
mpoint=round(rand*py);
%随机产生一个变异位
ifmpoint<
=0
mpoint=1;
if(newpop3(i,mpoint)==0)%变为等为基因
newpop3(i,mpoint)=1;
newpop3(i,mpoint)=0;
end
二.独立运行程序30次的结果
x1
0.1590
-0.0900
-0.0888
-0.0894
-0.0809
0.0772
0.0876
0.1175
-0.1578
-0.0778
x2
-0.7016
0.7126
0.7102
0.6421
0.7120
-0.6247
-0.7023
-0.7138
0.7029
0.7090
y
-1.0115
-1.0316
-0.9751
-1.0313
-0.9763
-1.0308
-1.0287
-1.0125
-1.0310
0.0900
-0.0015
-0.1566
-0.0882
-0.0089
0.1004
0.0766
-0.0876
-0.7126
-0.7065
0.7169
-0.6931
-0.7029
-0.7132
0.7151
-0.9989
-0.10147
-1.0309
-0.9922
-1.0303
-0.919
0.0778
0.0906
0.0931
-0.0925
-0.0705
-0.0919
-0.7114
-0.7816
-0.7096
0.7163
0.6986
-1.0331
-0.9891
-1.0315
-1.0288
最好目标函数值:
-1.0316最差目标函数值:
平均目标函数值:
-0.9914标准方差:
0.0286
三.最好的一次结果
最好解:
x1=0.0919x2=-0.7126
最好值:
运行结果及收敛性曲线如下图:
运行结果收敛性曲线
(2)
clc
popsize=40;
chromlength=28;
%二进制编码,编码精度为0.001,所以串长l为14
pc=0.8;
pm=0.2;
%变异概率
%将二值域中的数转换为变量域的数
y(t)=(x2(t)-5.1/(4*pi*pi).*x1(t).^2+5/pi.*x1(t)-6).^2+10.*(1-1/(8*pi)).*cos(x1(t))+10;
%杂交算子
[gy,k]=min(y);
%全局最优值
gy=vpa(gy,3)%设置输出精度
gx1=x1(k);
%全局最优值对应的自变量
x1=vpa(gx1,4)
gx2=x2(k);
x2=vpa(gx2,4)
axis([0,500,0.2,1.5]);
%将二值域中的数转化为变量域中的数
objvalue=(x2-5.1/(4*pi*pi).*x1.^2+5/pi.*x1-6).^2+10.*(1-1/(8*pi)).*cos(x1)+10;
3.125
3.145
3.128
3.141
3.124
2.285
2.265
2.500
2.276
2.290
2.305
2.273
2.287
0.399
0.398
0.445
0.400
3.140
3.108
3.146
3.111
3.165
2.187
2.270
0.443
0.405
3.122
3.142
3.134
3.143
2.284
2.286
2.274
2.344
2.275
2.288
0.402
0.398最差目标函数值:
0.403标准方差:
1.886e-004
x1=3.145x2=2.265
(3)
此问题的全局最优值
本题采用十进制编码方式,与二进制编码方式相比较,效率不如二进制,但程序相比简单一些。
多次运行,自变量去平均值可得到最好结果。
chromlength=10;
%变量个数,十进制编码
%进化代数
%初始种群
5000
x(t,:
y(t)=sum(x(t,:
).*x(t,:
%每代最优解的值
%选择算法
%交叉算法
%变异算法
x;
x=x(k,:
)%全局最优值对应的自变量
plot(y)%最优值收敛曲线
axis([0,5000,0,1]);
pop=-100+200.*rand(popsize,chromlength);
%随机产生[-100,100]之间的数
x(:
i)=pop(:
objvalue=sum(x.*x,2);
(4)计算个体适应度:
fitvalue=1./objvalue;
function[bestindividual,best
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 进化 参考资料 算法 程序