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