




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、进化算法作业1全局优化问题241624(1) minf1 x =4x| -2.1捲 人x/?4x24x23st. -5 二Xi 5 , i =1,2此问题的全局最优值fmin二1.0316。一.程序(1) 主函数: mai n.mclear all;clc;popsize=60; %种群规模chromlength=34;%二进制编码,编码精度为0.0001,所以串长I为17pc=0.7;%杂交概率pm=0.1;%变异概率t=0;%进化代数初始为0pop=in itpop(popsize,chromle ngth);% 随机产生初始种群while ty(t)newpop3(1,:)=best i
2、n dividual;% 保留最佳个体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,chromlength)pop=round(r
3、and(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);0bjvalue=4*x1.A2-2.1*x1.A4+1/3*x1.
4、A6+x1.*x2-4*x2.A2+4*x2.A4;% 计算目标函数enda. 二进制转换为十进制:decodechrom.mfuncti0n temp=dec0dechr0m(p0p,sp0int,length )pop1=pop(:,spoint:spoint+length-1);%按变量个数分组转换, spoint 为起始点, length 为一个变量的长度temp=decodebinary(pop1);endb. 求二进制串对应的十进制数:decodeb in ary.mfunction temp =decodebinary( pop)px,py=size(pop); %求 pop 行
5、数和列数for i=1:pypop1(:,i)=24(py-i).*pop(:,i);endtemp=sum(pop1,2);%每一行求和end(4) 计算个体适应度: calfitvalue.m function fitvalue= calfitvalue( objvalue )fitvalue=1./(1+exp(objvalue);end(5) 种群中最大适应度个体及其值: best.m function bestindividual,bestfit = best(pop,fitvalue ) px,py=size(pop);bestindividual=pop(1,:); bestfi
6、t=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,py=size(pop); ms=sort(rand(px,1); %随机产生 px 个 0,1 之间的数
7、,并按升序排列 fitin=1;newin=1;while newin=px if(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 randpc cpoint=round(rand*py); %随机产生一个交叉位 newpop2(i,
8、:)=pop(i,1:cpoint),pop(i+1,cpoint+1:py); %交换相邻两个个体交叉位之 后的基因newpop2(i+1,:)=pop(i+1,1:cpoint),pop(i,cpoint+1:py);elsen wepop2(i,:)=pop(i,:);n ewpop2(i+1,:)=pop(i+1,:);endendend(8) 变异算子:mutatio n.mfunction n ewpop3 = mutati on( pop,pm ) px,py=size(pop);n ewpop3=pop;for i=1:pxif(ra ndpm)mpoi nt=rou nd(r
9、a nd*py);%随机产生一个变异位if mpoin t=0mpoin t=1;endif (n ewpop3(i,mpoi nt)=O)% 变为等为基因n ewpop3(i,mpo in t)=1;elsen ewpop3(i,mpo in t)=0; endendendend最好目标函数值:-1.0316平均目标函数值:-0.9914三最好的一次结果最差目标函数值:-0.9751标准方差:0.0286.独立运行程序 30次的结果x10.1590-0.0900-0.0888-0.0894-0.08090.07720.08760.1175-0.1578-0.0778x2-0.70160.71
10、260.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.
11、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最好解:x1=0.0919x2=-0.7126最好值:-1.0316运行结果及收敛性曲线如下图:1, oaie=O. TX 2-
12、运行结果收敛性曲线(2) min5 12521 f2 (x )= (x2 - 一 x1 + 论 一6) +10 1 -icosg )+104兀兀i8応丿st. -5_Xj _5 , i =1,2此问题的全局最优值fmin =.398。(1)主函数: mai n.mclear all;clcpopsize=40; %种群规模chromlength=28;%二进制编码,编码精度为0.001,所以串长I为14pc=0.8;%杂交概率pm=0.2;%变异概率t=0;pop=in itpop(popsize,chromle ngth);% 随机产生初始种群while ty(t)newpop3(1,:)=
13、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.mfunction pop=initpo
14、p(popsize,chromlength)pop=round(rand(popsize,chromlength); %rand 随机产生 0,1 区间的一个小数, 取整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
15、-5.1/(4*pi*pi).*x1.A2+5/pi.*x1-6).A2+10.*(1-1/(8*pi).*cos(x1)+10;end%计rand 四舍五入a.二进制转换为十进制:decodechrom.mlength 为一个function temp=decodechrom(pop,spoint,length ) pop1=pop(:,spoint:spoint+length-1);%按变量个数分组转换, spoint 为起始点,变量的长度temp=decodebinary(pop1);endb.求二进制串对应的十进制数:decodeb in ary.mfunction temp =dec
16、odebinary( pop)px,py=size(pop);%求 pop 行数和列数for i=1:pypop1(:,i)=24(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(
17、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,py=size(pop);ms=sort(r
18、and(px,1);%随机产生px个0,1之间的数,并按升序排列fitin=1;newin=1;while newin=pxif(ms(newin)pss(fitin)newpop1(newin,:)=pop(fitin,:); newin=newin+1;else fitin=fitin+1;endendend(7) 交叉算子: crossover.m function newpop2 = crossover( pop,pc ) px,py=size(pop);newpop2=ones(size(pop);for i=1:2:px-1%交换相邻两个个体交叉位之if randpc cpoint
19、=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.m function newpop3 = mutation( pop,pm ) px,py=size(pop);newpop3=pop;for i=1:pxif(ra
20、ndpm) mpoint=round(rand*py); %随机产生一个变异位 if mpoint=0mpoint=1;endif (newpop3(i,mpoint)=0) %变为等为基因 newpop3(i,mpoint)=1;else newpop3(i,mpoint)=0;endendendendX13.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.
21、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.
22、3990.3980.3980.399.独立运行程序 30次的结果最好目标函数值:0.398平均目标函数值:0.403三最好的一次结果最好解:x1=3.145x2=2.265最好值:0.398运行结果及收敛性曲线如下图:ey =收舒性曲线14O_1.2-1nZL =LJfri-1 -(Mx 2=叭501001502Q0254300J504505002- SGS进it优散运行结果收敛性曲线最差目标函数值:0.445标准方差:1.886e-00410(3) minf3 x 八 x:i =1st. -100岂 Xj 乞 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); %初始种群while ty(t)newpop3(1,:)=bestindividual; %保留最佳个体endpop=newpop3; %产生新种群endy; % 每代的最佳目标函数值x; %每
24、代的最佳目标函数值对应的自变量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) 计算目标函数值 ::calobjvalu
25、e.m function objvalue =calobjvalue( pop ) px,py=size(pop);for i=1:py x(:,i)=pop(:,i);end objvalue=sum(x.*x,2);end(4) 计算个体适应度: calfitvalue.m function fitvalue= calfitvalue( objvalue ) fitvalue=1./objvalue;end(5) 种群中最大适应度个体及其值: best.m function bestindividual,bestfit = best(pop,fitvalue ) px,py=size(po
26、p);bestindividual=pop(1,:); bestfit=fitvalue(1);for i=2:px;if fitvaluebestfit bestindividual=pop(i,:); best=fitvalue(i);endendend(6) 选择算子: selection.m function newpop1=selection(pop,fitvalue) totalfit=sum(fitvalue); % 适应度和 if(fitvalue=0) newpop1=pop;else ps=fitvalue./totalfit;%单个个体被选择的概率pss=cumsum(p
27、s); % 前几项累积和 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;elsefitin=fitin+1;endendendend(7) 交叉算子: crossover.mfunction newpop2 = crossover( pop,pc ) px,py=size(pop);newpop2=ones(size(po
28、p);for i=1:2:px-1for 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);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 %每
29、一个点以概率 pm 变为等为基因for j=1:pyif(randpm) r=-100+200*rand; while(r=pop(i,j) r=-100+200*rand;end newpop3(i,j)=r;elsenewpop3(i,j)=pop(i,j);endendend独立运行程序 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.01
30、88-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.000
31、0-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.0094
32、0.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.0
33、5140.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
34、-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
35、.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.
36、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平均目标
37、函数值: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 x8=0.0131x9=0.0079 x10=0.0208最好值:0.0020运行结果及收敛性曲线如下图:Co mm? 15-0. 0G34 T. 01&I -a OOSO-0.015J7Cs Lcntx E- 1 hrEMjgh IQ0,020收敛性曲线运行结果2组合优化问题 多背包问题max f x = exx ust Ax E bX - 1,X2,| 山 Xn 1一X
38、i 0,1 , i =1,2,1山n测试算例:n -15e 二100, 220, 90, 400, 300, 400, 205, 120, 160, 580, 400, 140, 100, 1300, 650;82413807080451528901303220120408441310010090752528120130324016040364202030831214406320559640304016518246016113025A =5117504040197182970211730255117554040219182970211735250011041006063230701034520
39、14206121018429121002036930292012121030421818110203893529201615103042201812020 一b550, 700, 130, 240, 280, 310, 110, 205, 260, 275最优值为: 4015一程序(1) 主函数: main.m clear 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 408 44 13 100 100 90 7
40、5 25 28 120 130 32 40 160 403 6 4 20 20 30 8 3 12 14 40 6 3 20 55 9 6 40 30 40 16 5 18 24 60 16 11 30 255 11 7 50 40 40 19 7 18 29 70 21 17 30 255 11 7 55 40 40 21 9 18 29 70 21 17 30 250 0 1 10 4 10 0 6 0 6 32 3 0 70 103 4 5 20 14 20 6 12 10 18 42 9 12 100 203 6 9 30 29 20 12 12 10 30 42 18 18 110
41、203 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); %计算目
42、标函数值 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
43、(newpop3(1,:),c);if objvalue11&y(t)b(i) % 判断每一约束,当不满足约束时,将该背包中 利润密度最小的物资拿出ty,I=min(t(i,:); pop(k,I)=0;t(i,I)=Inf;endendendend(4) 计算目标函数值 ::calobjvalue.m function objvalue =calobjvalue( pop,c)px,py=size(pop);for i=1:pxobjvalue(i)=sum(c.*pop(i,:);endend(5) 计算个体适应度: calfitvalue.m function fitvalue= cal
44、fitvalue( objvalue ) fitvalue=objvalue;end(6) 种群中最大适应度个体及其值: best.m function 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(7) 选择算子: selection.m function newpop1=selection(pop,fit
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 飞机钣金工入职考核试卷及答案
- 棉花播种工艺考核试卷及答案
- 锅炉设备试压工标准化作业考核试卷及答案
- 糖艺师设备维护与保养考核试卷及答案
- 高职院校优化数字人才培养链的现实需求与策略研究
- 选矿技术考试题库及答案
- 2025中国农民丰收节庆农业丰收享美好生活
- 银行招聘试题及答案网站
- 银行营销考试题及答案
- 银行行长笔试试题及答案
- 综合医院危重患者院内转运发生意外情况应急预案
- 电镀行业环境保护现状课件
- 烹饪美学高职全套教学课件
- 最全看图猜成语 课件
- 园林景观施工图设计课件
- 柔性传感器技术
- 自考英语二4500词汇汇总
- 高毅投资冯柳文章(全集)
- 不同温度下饱和蒸汽压力及水含量对照表
- 西师版数学五年级上册教材培训
- 日用百货购销合同及清单
评论
0/150
提交评论