进化算法程序.doc_第1页
进化算法程序.doc_第2页
进化算法程序.doc_第3页
进化算法程序.doc_第4页
进化算法程序.doc_第5页
已阅读5页,还剩15页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

进化算法作业 1 全局优化问题(1) , 此问题的全局最优值。一程序(1)主函数: main.mclear all;clc;popsize=60; %种群规模chromlength=34; %二进制编码,编码精度为0.0001,所以串长l为17pc=0.7; %杂交概率pm=0.1; %变异概率t=0; %进化代数初始为0pop=initpop(popsize,chromlength); %随机产生初始种群while ty(t) newpop3(1,:)=bestindividual; %保留最佳个体 end pop=newpop3; %产生新种群endy; %每代的最佳目标函数值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.mfunction pop=initpop(popsize,chromlength)pop=round(rand(popsize,chromlength); %rand随机产生0,1区间的一个小数,rand四舍五入取整end(3)计算目标函数值::calobjvalue.mfunction 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; %计算目标函数enda二进制转换为十进制:decodechrom.m function temp=decodechrom(pop,spoint,length )pop1=pop(:,spoint:spoint+length-1); %按变量个数分组转换,spoint为起始点,length为一个变量的长度temp=decodebinary(pop1);endb求二进制串对应的十进制数:decodebinary.mfunction temp =decodebinary( pop)px,py=size(pop); %求pop行数和列数for i=1:py pop1(:,i)=2.(py-i).*pop(:,i);endtemp=sum(pop1,2); %每一行求和end(4)计算个体适应度:calfitvalue.mfunction fitvalue= calfitvalue( objvalue ) fitvalue=1./(1+exp(objvalue);end(5)种群中最大适应度个体及其值:best.mfunction bestindividual,bestfit = best(pop,fitvalue )px,py=size(pop);bestindividual=pop(1,:);bestfit=fitvalue(1);for i=2:px; if fitvaluebestfit bestindividual=pop(i,:); best=fitvalue(i); endendend(6)选择算子:selection.mfunction 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;while newin=px if(ms(newin)pss(fitin) newpop1(newin,:)=pop(fitin,:); newin=newin+1; else fitin=fitin+1; endendend(7)交叉算子:crossover.mfunction newpop2 = crossover( pop,pc )px,py=size(pop);newpop2=ones(size(pop);for i=1:2:px-1 if randpc 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,:); endendend(8)变异算子:mutation.mfunction newpop3 = mutation( pop,pm )px,py=size(pop);newpop3=pop;for i=1:px if(randpm) mpoint=round(rand*py); %随机产生一个变异位 if mpoint=0 mpoint=1; end if (newpop3(i,mpoint)=0) %变为等为基因 newpop3(i,mpoint)=1; else newpop3(i,mpoint)=0; end endend end二独立运行程序30次的结果x10.1590-0.0900-0.0888-0.0894-0.08090.07720.08760.1175-0.1578-0.0778x2-0.70160.71260.71020.64210.7120-0.6247-0.7023-0.71380.70290.7090y-1.0115-1.0316-1.0316-0.9751-1.0313-0.9763-1.0308-1.0287-1.0125-1.0310x10.0900-0.0015-0.1566-0.0888-0.0882-0.00890.10040.0766-0.0900-0.0876x2-0.7126-0.70650.71690.71260.7029-0.6931-0.7029-0.71320.71510.7102y-1.0316-0.9989-0.10147-1.0316-1.0309-0.9922-1.0303-1.0309-1.0316-1.0316x1-0.9190.07780.09060.09060.09310.09060.0906-0.0925-0.0705-0.0919x20.7126-0.7114-0.7138-0.7126-0.7816-0.7132-0.70960.71630.69860.7126y-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.0919 x2=-0.7126 最好值:-1.0316运行结果及收敛性曲线如下图: 运行结果 收敛性曲线(2) , 此问题的全局最优值。一程序(1)主函数: main.mclear all;clcpopsize=40; %种群规模chromlength=28; %二进制编码,编码精度为0.001,所以串长l为14pc=0.8; %杂交概率pm=0.2; %变异概率 t=0;pop=initpop(popsize,chromlength); %随机产生初始种群while ty(t) newpop3(1,:)=bestindividual; %保留最佳个体 end pop=newpop3; %产生新种群endy; %每代的最佳目标函数值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.mfunction pop=initpop(popsize,chromlength)pop=round(rand(popsize,chromlength); %rand随机产生0,1区间的一个小数,rand四舍五入取整end(3)计算目标函数值::calobjvalue.mfunction 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; enda二进制转换为十进制:decodechrom.m function temp=decodechrom(pop,spoint,length )pop1=pop(:,spoint:spoint+length-1); %按变量个数分组转换,spoint为起始点,length为一个变量的长度temp=decodebinary(pop1);endb求二进制串对应的十进制数:decodebinary.mfunction temp =decodebinary( pop)px,py=size(pop); %求pop行数和列数for i=1:py pop1(:,i)=2.(py-i).*pop(:,i);endtemp=sum(pop1,2); %每一行求和end(4)计算个体适应度:calfitvalue.mfunction fitvalue= calfitvalue( objvalue ) fitvalue=1./(1+exp(objvalue);end(5)种群中最大适应度个体及其值:best.mfunction bestindividual,bestfit = best(pop,fitvalue )px,py=size(pop);bestindividual=pop(1,:);bestfit=fitvalue(1);for i=2:px; if fitvaluebestfit bestindividual=pop(i,:); best=fitvalue(i); endendend(6)选择算子:selection.mfunction 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;while newin=px if(ms(newin)pss(fitin) newpop1(newin,:)=pop(fitin,:); newin=newin+1; else fitin=fitin+1; endendend(7)交叉算子:crossover.mfunction newpop2 = crossover( pop,pc )px,py=size(pop);newpop2=ones(size(pop);for i=1:2:px-1 if randpc 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,:); endendend(8)变异算子:mutation.mfunction newpop3 = mutation( pop,pm )px,py=size(pop);newpop3=pop;for i=1:px if(randpm) mpoint=round(rand*py); %随机产生一个变异位 if mpoint=0 mpoint=1; end if (newpop3(i,mpoint)=0) %变为等为基因 newpop3(i,mpoint)=1; else newpop3(i,mpoint)=0; end endend end二独立运行程序30次的结果x13.1253.1453.1283.1453.1413.1243.1253.1453.1453.125x22.2852.2652.5002.2652.2762.2902.3052.2652.2732.287y0.3990.3980.4450.3980.3980.3990.4000.3980.3980.399x13.1253.1253.1453.1403.1083.1463.1113.1653.1453.145x22.2652.2872.2652.2652.5002.2762.5002.1872.2702.265y0.4000.3990.3980.3980.4430.3980.4430.4050.3980.398x13.1223.1253.1253.1423.1343.1253.1253.1433.1413.125x22.2842.2862.2852.2742.2862.3442.2852.2752.2762.288y0.4000.3990.3990.3980.3980.4020.3990.3980.3980.399最好目标函数值:0.398 最差目标函数值:0.445平均目标函数值:0.403 标准方差:1.886e-004三最好的一次结果最好解:x1=3.145 x2=2.265最好值:0.398运行结果及收敛性曲线如下图: 运行结果 收敛性曲线(3) ,此问题的全局最优值。本题采用十进制编码方式,与二进制编码方式相比较,效率不如二进制,但程序相比简单一些。多次运行,自变量去平均值可得到最好结果。一程序(1)主函数: main.mclear all;clcpopsize=40; %种群规模chromlength=10; %变量个数,十进制编码pc=0.8; %杂交概率pm=0.1; %变异概率t=0; %进化代数 pop=initpop(popsize,chromlength); %初始种群while ty(t) newpop3(1,:)=bestindividual; %保留最佳个体 end pop=newpop3; %产生新种群endy; %每代的最佳目标函数值x; %每代的最佳目标函数值对应的自变量gy,k=min(y) %gy为全局最优值,k为最优值对应的进化代数x=x(k,:) %全局最优值对应的自变量plot(y) %最优值收敛曲线 title(收敛性曲线);xlabel(进化代数);ylabel(函数值);axis(0,5000,0,1);(2)初始种群:initpop.mfunction pop=initpop(popsize,chromlength)pop=-100+200.*rand(popsize,chromlength); %随机产生-100,100之间的数end(3)计算目标函数值::calobjvalue.mfunction objvalue =calobjvalue( pop )px,py=size(pop);for i=1:py x(:,i)=pop(:,i);endobjvalue=sum(x.*x,2);end (4)计算个体适应度:calfitvalue.mfunction fitvalue= calfitvalue( objvalue )fitvalue=1./objvalue;end (5)种群中最大适应度个体及其值:best.mfunction bestindividual,bestfit = best(pop,fitvalue )px,py=size(pop);bestindividual=pop(1,:);bestfit=fitvalue(1);for i=2:px; if fitvaluebestfit bestindividual=pop(i,:); best=fitvalue(i); endendend(6)选择算子:selection.mfunction newpop1=selection(pop,fitvalue)totalfit=sum(fitvalue); %适应度和if(fitvalue=0)newpop1=pop;elseps=fitvalue./totalfit; %单个个体被选择的概率pss=cumsum(ps); %前几项累积和px,py=size(pop);ms=sort(rand(px,1); %随机产生px个0,1之间的数,并按升序排列fitin=1;newin=1;while newin=px if(ms(newin)pss(fitin) newpop1(newin,:)=pop(fitin,:); newin=newin+1; else fitin=fitin+1; endendend end (7)交叉算子:crossover.mfunction newpop2 = crossover( pop,pc )px,py=size(pop);newpop2=ones(size(pop);for i=1:2:px-1 for j=1:py if randpc a=rand(); newpop2(i,j)=a*pop(i,j)+(1-a)*pop(i+1,j); %算数交叉 newpop2(i+1,j)=a*pop(i+1,j)+(1-a)*pop(i,j); else newpop2(i,j)=pop(i,j); newpop2(i+1,j)=pop(i+1,j); end endendend(8)变异算子:mutation.mfunction newpop3 = mutation( pop,pm )px,py=size(pop);newpop3=pop;for i=1:px %每一个点以概率pm变为等为基因 for j=1:py if(randpm) r=-100+200*rand; while(r=pop(i,j) r=-100+200*rand; end newpop3(i,j)=r; else newpop3(i,j)=pop(i,j); endend end二独立运行程序30次的结果y0.00420.00740.00800.00790.00680.00630.00200.00750.00990.0120x10.0460-0.02490.0108-0.0224-0.00670.02150.00340.00350.01190.0266x2-0.02640.02500.0188-0.04310.02220.0071-0.0184-0.02620.03020.0388x30.00780.00800.0316-0.00300.0058-0.0311-0.0080-0.0134-0.0382-0.0416x4-0.0184-0.0097-0.0386-0.0285-0.0167-0.02960.01560.03570.01050.0216x5-0.0160-0.0454-0.03320.00060.0169-0.0556-0.0127-0.00300.0545-0.0067x6-0.0024-0.04910.0108-0.0498-0.0467-0.00140.0000-0.03030.02760.0243x7-0.0131-0.0180-0.0048-0.0332-0.03280.0144-0.02340.0512-0.0366-0.0260x8-0.0051-0.01350.0227-0.01100.0069-0.00570.0131-0.00670.0440-0.0310x9-0.01930.0275-0.03690.03040.04390.02200.0079-0.0392-0.0153-0.0710x10-0.01120.01510.0405-0.0111-0.0204-0.01030.02080.02530.0053-0.0162y0.00940.01110.01090.00480.00660.00480.00710.00550.01120.0072x1-0.0343-0.02180.0301-0.0309-0.0319-0.00370.01860.01660.0626-0.0349x20.0310-0.0030-0.0368-0.0271-0.03120.03380.0354-0.03020.0089-0.0115x30.04240.0329-0.01880.00490.0214-0.0293-0.00980.0069-0.0098-0.0193x4-0.04150.0392-0.05440.00740.01290.00370.05140.03100.0039-0.0151x50.03240.0198-0.0236-0.0042-0.0133-0.01610.0116-0.0228-0.02070.0090x60.04790.0330-0.0581-0.01110.0103-0.0379-0.00300.0224-0.03440.0076x7-0.0012-0.04270.0313-0.04180.02490.0027-0.04360.0204-0.05040.0340x80.0065-0.0231-0.00070.01580.0049-0.02050.0243-0.02320.0350-0.0466x9-0.0063-0.0452-0.01120.02960.03800.0092-0.00960.00500.0408-0.0173x10-0.01880.0454-0.0168-0.0058-0.0406-0.0226-0.0055-0.0363-0.0030-0.0384y0.00420.00740.00800.00790.00680.00630.00200.00750.00990.0094x10.0460-0.02490.0108-0.0224-0.00670.02150.00340.00350.0119-0.0343x2-0.02640.0250-0.0188-0.04310.02220.0071-0.0184-0.02620.03020.0310x30.00780.00800.0316-0.00300.0058-0.031-0.0080-0.0134-0.03820.0424x4-0.0184-0.0097-0.0386-0.0285-0.0167-0.02960.01560.03570.0105-0.0415x5-0.0160-0.0454-0.03320.00060.0169-0.0556-0.0127-0.00300.05450.0324x6-0.0024-0.04910.0108-0.0498-0.0467-0.00140.0000-0.03030.02760.0479x7-0.0131-0.0180-0.0048-0.0332-0.03280.0144-0.02340.0512-0.0366-0.0012x8-0.0051-0.01350.0277-0.01100.0069-0.00570.0131-0.00670.04400.0065x9-0.01930.0275-0.03690.03040.04390.02200.0079-0.0329-0.0153-0.0063x10-0.01120.01510.0405-0.0111-0.0204-0.01030.02080.0253-0.0053-0.0188最好目标函数值:0.0020 最差目标函数值:0.0120平均目标函数值:0.0073 标准方差:6.3099e-006三最好的一次结果最好解:x1=0.0034 x2=-0.0184 x3=-0.0080 x4=0.0156 x5=-0.0127 x6=0.0000 x7=-0.0234 x8=0.0131 x9=0.0079 x10=0.0208最好值:0.0020运行结果及收敛性曲线如下图: 运行结果 收敛性曲线2 组合优化问题多背包问题 ,测试算例: 100, 220, 90, 400, 300, 400, 205, 120, 160, 580, 400, 140, 100, 1300, 650;.最优值为: 4015一程序(1)主函数: main.mclear all;clcc=100 220 90 400 300 400 205 120 160 580 400 140 100 1300 650;A=8 24 13 80 70 80 45 15 28 90 130 32 20 120 40 8 44 13 100 100 90 75 25 28 120 130 32 40 160 40 3 6 4 20 20 30 8 3 12 14 40 6 3 20 5 5 9 6 40 30 40 16 5 18 24 60 16 11 30 25 5 11 7 50 40 40 19 7 18 29 70 21 17 30 25 5 11 7 55 40 40 21 9 18 29 70 21 17 30 25 0 0 1 10 4 10 0 6 0 6 32 3 0 70 10 3 4 5 20 14 20 6 12 10 18 42 9 12 100 20 3 6 9 30 29 20 12 12 10 30 42 18 18 110 20 3 8 9 35 29 20 16 15 10 30 42 20 18 120 20;b=550;700;130;240;280;310;110;205;260;275;popsize=20; %种群规模chromlength=15; %变量个数pc=0.9; %杂交概率pm=0.2; %变异概率t=0;pop=initpop(popsize,chromlength); %随机产生初始种群while t500 %迭代次数 t=t+1; pop=repair(pop,A,b,c); %修补算子,修补不满足约束的解 objvalue=calobjvalue(pop,c); %计算目标函数值 fitvalue=calfitvalue(objvalue); %计算适应度 bestindividual,bestfit=best(pop,fitvalue); %最近个体及其适应度值 x(t,:)=bestindividual; %最佳个体 y(t)=sum(c.*bestindividual); %计算最佳个体的目标函数值 newpop1=selection(pop,fitvalue); %选择算子 newpop2=crossover(newpop1,pc); %交叉算子 newpop3=mutation(newpop2,pm); %变异算子 objvalue1=calobjvalue(newpop3(1,:),c); if objvalue11&y(t)b(i) %判断每一约束,当不满足约束时,将该背包中利润密度最小的物资拿出 ty,I=min(t(i,:); pop(k,I)=0; t(i,I)=Inf; end endendend(4)计算目标函数值::calobjvalue.mfunction objvalue =calobjvalue( pop,c)px,py=size(pop);for i=1:px objvalue(i)=sum(c.*pop(i,:);endend(5)计算个体

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论