进化算法程序.docx

上传人:大张伟 文档编号:11665056 上传时间:2021-08-29 格式:DOCX 页数:26 大小:112.09KB
返回 下载 相关 举报
进化算法程序.docx_第1页
第1页 / 共26页
进化算法程序.docx_第2页
第2页 / 共26页
进化算法程序.docx_第3页
第3页 / 共26页
进化算法程序.docx_第4页
第4页 / 共26页
进化算法程序.docx_第5页
第5页 / 共26页
点击查看更多>>
资源描述

《进化算法程序.docx》由会员分享,可在线阅读,更多相关《进化算法程序.docx(26页珍藏版)》请在三一文库上搜索。

1、精品文档进化算法作业1欢迎下载 。精品文档3欢在下载1全局优化问题(1) min f1 x4x2 2.1x14 ;x: x1x2 4x24x2st.5 xi 5, i 1,2此问题的全局最优值fmin 1.0316。程序(1)主函数: main.m clear 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,:

2、)=bestindividual; %保留最佳个体endpop=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,chromleng

3、th)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);0bjvalue=4*x1.A2-2.1*

4、x1.A4+1/3*x1.A6+x1.*x2-4*x2.A2+4*x2.A4; %计算目标函数enda 二进制转换为十进制:decodechrom.mfunction 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

5、); % 求 pop 行数和列数 for i=1:pypop1(:,i)=2.A(py-i).*pop(:,i);endtemp=sum(pop1,2); % 每一行求和 end(4) 计算个体适应度: calfitvalue.mfunction fitvalue= calfitvalue( objvalue ) fitvalue=1./(1+exp(objvalue);end(5) 种群中最大适应度个体及其值: best.m function bestindividual,bestfit = best(pop,fitvalue ) px,py=size(pop);bestindividual

6、=pop(1,:);bestfit=fitvalue(1);for i=2:px;if fitvaluebestfitbestindividual=pop(i,:); best=fitvalue(i);endend end(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); %

7、 随机产生 px 个 0,1 之间的数,并按升序排列 fitin=1;newin=1;while newin=pxif(ms(newin)pss(fitin) newpop1(newin,:)=pop(fitin,:); newin=newin+1;elsefitin=fitin+1;5欢迎下载 。精品文档endendend交叉算子:crossover.mfunction newpop2 = crossover( pop,pc )px,py=size(pop);newpop2=ones(size(pop);for i=1:2:px-1if randpccpoint=round(rand*py)

8、; %随机产生一个交叉位交换相邻两个个体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);elsenwepop2(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:pxif(randpm)mpo

9、int=round(rand*py); %随机产生一个变异位if mpoint=0mpoint=1;endif (newpop3(i,mpoint)=0) %变为等为基因newpop3(i,mpoint)=1;elsenewpop3(i,mpoint)=0;endendendend二.独立运行程序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.

10、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.0931

11、0.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.0316st.5 xi 5, i 1,2此问题的全局最优值fmin0.398。程序(1)主函数:main.mclear all;最好目标函数值:-1.0316平均目标函数值:-0.9914最差目标函数值:-0.9751标准方差:0.0286三.最好的一次结果最好解

12、:x1=0.0919 x2=-0.7126最好值:-1.0316运行结果及收敛性曲线如下图:=-jl . 03u =1 =O. 口口1,9自mN =O. 71运行结果收敛性曲线 minf2 x(X25.1252一2X1- X16)10 141一 cos X1810clc7欢在下载精品文档11欢迎下载 。popsize=40; % 种群规模chromlength=28; % 二进制编码,编码精度为 0.001 ,所以串长l 为 14pc=0.8; % 杂交概率pm=0.2; % 变异概率t=0;pop=initpop(popsize,chromlength); %while ty(t)newpo

13、p3(1,:)=bestindividual; %保留最佳个体endpop=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.mfu

14、nction 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

15、)/(pow2(14)-1);objvalue=(x2-5.1/(4*pi*pi).*x1.A2+5/pi.*x1-6).A2+10.*(1-1/(8*pi).*cos(x1)+10;enda 二进制转换为十进制:decodechrom.mfunction temp=decodechrom(pop,spoint,length )pop1=pop(:,spoint:spoint+length-1); % 按变量个数分组转换, spoint 为起始点, length为一个变量的长度temp=decodebinary(pop1);endb 求二进制串对应的十进制数:decodebinary.mfun

16、ction temp =decodebinary( pop)px,py=size(pop); % 求 pop 行数和列数for i=1:pypop1(:,i)=2.A(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,f

17、itvalue )px,py=size(pop);bestindividual=pop(1,:);bestfit=fitvalue(1);for i=2:px;if fitvaluebestfitbestindividual=pop(i,:);best=fitvalue(i);endendend(6) 选择算子: selection.mfunction newpop1=selection(pop,fitvalue)totalfit=sum(fitvalue); % 适应度和ps=fitvalue./totalfit; %单个个体被选择的概率pss=cumsum(ps); % 前几项累积和px,

18、py=size(pop);ms=sort(rand(px,1); % 随机产生 px 个 0,1 之间的数,并按升序排列fitin=1;newin=1;while newin=pxif(ms(newin)pss(fitin)newpop1(newin,:)=pop(fitin,:);newin=newin+1;elsefitin=fitin+1;endendend(7) 交叉算子: crossover.mfunction newpop2 = crossover( pop,pc )px,py=size(pop);newpop2=ones(size(pop);for i=1:2:px-1if ra

19、ndpccpoint=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);elsenwepop2(i,:)=pop(i,:);newpop2(i+1,:)=pop(i+1,:);endendend(8) 变异算子: mutation.mfunction newpop3 = mutation( pop,pm )px,py=size(pop);newpop3

20、=pop;精品文档for i=1:pxif(randpm)mpoint=round(rand*py); %随机产生一个变异位if mpoint=0mpoint=1;endif (newpop3(i,mpoint)=0) %变为等为基因newpop3(i,mpoint)=1;elsenewpop3(i,mpoint)=0;endendend最差目标函数值:0.445标准方差:1.886e-004endx13.1253.1453.1283.1453.1413.1243.1253.1453.1453.125x22.2852.2652.5002.2652.2762.2902.3052.2652.273

21、2.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.285

22、2.2752.2762.288y0.4000.3990.3990.3980.3980.4020.3990.3980.3980.399.独立运行程序 30次的结果最好目标函数值:0.398平均目标函数值:0.403三.最好的一次结果最好解:x1=3.145 x2=2.265最好值:0.398运行结果及收敛性曲线如下图:收敛性曲线曰y O. 39后5C1 二3_ _1,哓5mN = 运行结果 10 2 (3) min f3 x Xi i 1st.100 Xi 100, i 1,2, ,10此问题的全局最优值 fmin 0。本题采用十进制编码方式,与二进制编码方式相比较,效率不如二进制,但程序相比简

23、 单一些。多次运行,自变量去平均值可得到最好结果。一.程序(1)主函数: main.mclear all;clcpopsize=40; % 种群规模chromlength=10; % 变量个数,十进制编码pc=0.8; % 杂交概率pm=0.1; %变异概率t=0; %进化代数初始种群pop=initpop(popsize,chromlength); %1欺速下载计算目标函数值while ty(t)newpop3(1,:)=bestindividual; %保留最佳个体endpop=newpop3; % 产生新种群endy; % 每代的最佳目标函数值x; % 每代的最佳目标函数值对应的自变量g

24、y,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 ob

25、jvalue =calobjvalue( pop )px,py=size(pop);for i=1:pyx(:,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(

26、1,:);bestfit=fitvalue(1);for i=2:px;if fitvaluebestfitbestindividual=pop(i,:);best=fitvalue(i);15欢迎下载。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

27、(pop);ms=sort(rand(px,1); % 随机产生 px 个0,1 之间的数,并按升序排列fitin=1;newin=1;while newin=pxif(ms(newin)pss(fitin)newpop1(newin,:)=pop(fitin,:);newin=newin+1;elsefitin=fitin+1;endendendend(7) 交叉算子: crossover.mfunction newpop2 = crossover( pop,pc )px,py=size(pop);newpop2=ones(size(pop);for i=1:2:px-1for j=1:py

28、if randpca=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);elsenewpop2(i,j)=pop(i,j);newpop2(i+1,j)=pop(i+1,j);endendendend精品文档(8)变异算子:mutation.mfunction newpop3 = mutation( pop,pm )px,py=size(pop);newpop3=pop;for i=1:px %每一个点以概率pm变为等为基因for j=1:pyif(r

29、andpm)r=-100+200*rand;while(r=pop(i,j)r=-100+200*rand;endnewpop3(i,j)=r;elsenewpop3(i,j)=pop(i,j);end endend.独立运行程序 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.02

30、620.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.0

31、180-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.0

32、0710.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.0

33、198-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-

34、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

35、.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

36、.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.0127x6=0.0000 x7=-0.0234

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 科普知识


经营许可证编号:宁ICP备18001539号-1