演化算法作业

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

利用演化算法求约束优化问题姓名:学号指导老师:1问题:用遗传算法求解下列约束优化问题:10x010x004-xx-1(x)g01x-x(x)g)xx(xx2sinx2sin)x,f(xmax21222122212132132111,)(其中:)()(2演化算法计算过程:2.1个体的编码:采用实数向量编码,每一个个体是一实数对。本文采用二进制编码,自变量精度取小数点后三位,一个自变量需要二进制位数为14位,总共需要28位二进制来编码两个自变量。2.2译码:将二进制编码翻译为变量的实数形式:),(位二进制位串21i0.01*)14(xdeci2.3适应函数:本文使用目标函数作为适应函数2.4选择策略:采用轮盘赌算法。2.5杂交算子:随机挑选两条不同的染色体,随机选出杂交位点]1,0[kL,然后交换片段。完成后检查重组后的染色体是否满足约束条件,若不满足,则舍弃,恢复原染色体并重新杂交,直到完成15对染色体的杂交。2.6变异算子:随机生成14个随机数]1,0[pi对应于每条染色体的每个基因位点,若mpip则对该基因位点进行变异。同时完成变异后检查是否满足约束条件,若不满足,则舍弃变异,恢复染色体并重新变异直到满足约束条件为止。2.7参数设置:种群规模为30,最大代数为1000代,杂交概率0.9,变异概率0.12.8初始化:随机产生初始种群,自动生成初始群体,完成检查是否满足约束条件,若不满足,则重新初始化直到有30个个体满足约束条件为止。2.9终止条件:算法运行所指定的最大代数后终止,即1000代后终止迭代。3实验结果表1四次实验结果比对表迭代次数500迭代次数1000第一次运行第二次运行第三次运行第四次运行1x1.2271.2481.2451.2532x3.3033.3423.2593.251)x,f(xmax210.109440110450.093851245410.114697976850.11279980732由表1可以看出迭代次数越多遗传算法的效果可能越好;并且多次迭代结果较为稳定,证明没有陷入局部优化。表2某2次迭代过程表由表2可以看出迭代结果在经过若干代后已经趋于稳定;同时随着迭代次数的增加,最优值越来越靠近目标值。对原有遗传算法进行改进,在进行重组时将最好的两个个体保留下来直接进入下一次迭代,剩余个体继续保持原来重组方式。表3不同遗传算法运算比对表原遗传算子改进遗传算子第三次运行第四次运行第五次第六次1x1.2451.2531.2671.2512x3.2593.2513.2353.249)x,f(xmax210.114697976850.112799807320.106877506920.11349618572由表3可以看出实验结果稳定。代数(迭代总次数1000)1x2x)x,f(xmax2111.2894.3630.05720063406280318311.2954.230.07322047082080911751.2924.2540.075195615866267181341.2414.2560.094659884583908491371.2254.2620.09525349615511472最终结果1.2254.2620.0952534961551147211.3373.2460.056900429479572031.3213.3060.06461712393829212101.2973.2960.08375858854088097481.2813.2750.097390379205658811491.2713.2190.10366960257048366最终结果1.2713.2190.10366960257048366附录(演化算法java实现代码):importjava.lang.Math;importjava.util.Random;publicclassGA{publicstaticfinalintPOP_SIZE=30;//种群数目publicstaticString[]pop=newString[POP_SIZE];//种群编码publicstaticPair[]result=newPair[POP_SIZE];//种群代表的结果publicstaticfinalintLENGTH=28;//编码长度,因为要精确到小数点后六位,所以编为22位长,有一公式可参考publicstaticdouble[]fitness=newdouble[POP_SIZE];//存放种群适应度publicstaticfinaldoublePC=0.90;//交叉率publicstaticfinaldoublePM=0.1;//变异率publicstaticdouble[]p=newdouble[POP_SIZE];//轮盘赌方法个体适应度概率publicstaticdouble[]q=newdouble[POP_SIZE];//q[i]是前i项p之和publicstaticPairpair=newPair(0,0);publicstaticMaxmax=newMax(0,pair);//最大值publicstaticRandomrandom=newRandom();//用于产生随机数的工具/*约束条件*/publicstaticdoublegx1(Pairresult){returnMath.pow(result.getX1(),2)-result.getX2()+1;}publicstaticdoublegx2(Pairresult){return1-Math.pow(result.getX1(),2)+Math.pow(result.getX2()-4,2);}/*初始化种群*/publicvoidinitialization(){Stringa=0000000000000000000000000000;for(inti=0;ipop.length;i++){pop[i]=a;}for(inti=0;iPOP_SIZE;i++){StringBuffers=newStringBuffer(pop[i]);for(intj=0;jLENGTH;j++){doubletemp=Math.random();if(temp0.5)s.setCharAt(j,'0');elses.setCharAt(j,'1');}//剔除不符合约束的初始化pop[i]=s.toString();decoding();fitness();if(gx1(result[i])0||gx2(result[i])0||result[i].getX1()10||result[i].getX1()10)i--;}}/**解码方法,将二进制字节码还原为解*/publicvoiddecoding(){for(inti=0;iPOP_SIZE;i++){StringsubX1=pop[i].substring(0,14);StringsubX2=pop[i].substring(14,28);doublex1=Integer.parseInt(subX1,2);doublex2=Integer.parseInt(subX2,2);result[i]=newPair(x1*0.001,x2*0.001);}}/*适应度函数,也是目标函数*/publicvoidfitness(){for(inti=0;iresult.length;i++){fitness[i]=Math.pow(Math.sin(2*Math.PI*result[i].getX1()),3)*Math.sin(2*Math.PI*result[i].getX2())/(Math.pow(result[i].getX1(),3)*(result[i].getX1()+result[i].getX2()));}}/*交叉操作*/publicvoidcrossover(){for(inti=0;iPOP_SIZE/2;i++){doubled=random.nextDouble();if(dPC){intk1=random.nextInt(POP_SIZE);intk2=random.nextInt(POP_SIZE);while(k1==k2||k1==1||k1==2||k2==1||k2==2){k1=(int)random.nextInt(POP_SIZE);k2=(int)random.nextInt(POP_SIZE);}intposition=random.nextInt(LENGTH);Strings11=null,s12=null,s21=null,s22=null;s11=pop[k1].substring(0,position);s12=pop[k1].substring(position,LENGTH);s21=pop[k2].substring(0,position);s22=pop[k2].substring(position,LENGTH);pop[k1]=s11+s22;pop[k2]=s21+s12;//恢复不符合约束的重组,再重组decoding();fitness();if(gx1(result[k1])0||gx2(result[k1])0||gx1(result[k2])0||gx2(result[k2])0||result[k1].getX1()10||result[k2].getX1()10){pop[k1]=s11+s12;pop[k2]=s21+s22;i--;decoding();fitness();}}}}/**变异操作*/publicvoidmutation(){for(inti=2;ipop.length;i++){Strings=pop[i];for(intj=0;jLENGTH;j++){doublek=random.nextDouble();if(kPM){StringBuffersb=newStringBuffer(s);if(sb.charAt(j)=='0')sb.setCharAt(j,'1');elsesb.setCharAt(j,'0');pop[i]=sb.toString();}}//恢复不符合约束的变异,重新变异decoding();fitness();if(gx1(result[i])0||gx2(result[i])0||result[i].getX1()10||result[i].getX1()10){pop[i]=s;i--;decoding();fitness();}}}/**轮盘赌方法算法*/publicvoidroulettewheel(){doublesum=0;for(inti=0;iPOP_SIZE;i++){sum=fitness[i]+sum;}for(inti=0;iPOP_SIZE;i++){p[i]=fitness[i]/sum;}for(inti=0;iPOP_SIZE;i++){for(intj=0;j=i;j++){q[i]+=p[j];}}double[]ran=newdouble[POP_SIZE];String[]tempPop=newString[POP_SIZE];for(inti=0;iran.length;i++){ran[i]=random.nextDouble();}for(inti=0;iran.length;i++){intk=0;while(ran[i]q[k]){k++;}tempPop[i]=pop[k];}for(inti=0;itempPop.length;i++){pop[i]=tempPop[i];}}publicvoidevaluate(){for(inti=0;ifitness.length;i++){if(fitness

1 / 9
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功