您好,欢迎访问三七文档
当前位置:首页 > 行业资料 > 交通运输 > 利用遗传算法求函数的极大值
利利用用遗遗传传算算法法求求函函数数的的极极大大值值该函数有两个局部极大值点,分别是f(2.048,-2.048)=3897.7342和f(2.048,-2.048)=3905.9262,其中,后者为全局最大点。可以分别用二进制编码和十进制编码遗传算法求函数极大值遗传算法二进制编码求函数极大值程序%GenericAlgorithmforfunctionf(x1,x2)optimumclearall;closeall;%Parameters参数Size=80;%群体大小G=100;%终止进化代数CodeL=10;%代码长度umax=2.048;umin=-2.048;E=round(rand(Size,2*CodeL));%InitialCode最初代码%MainProgram主程序fork=1:1:Gtime(k)=k;222212121(,)100()(1)2.0482.048(1,2)ifxxxxxxifors=1:1:Sizem=E(s,:);y1=0;y2=0;%X对应的十进制代码%Uncodingm1=m(1:1:CodeL);fori=1:1:CodeLy1=y1+m1(i)*2^(i-1);%将y1转换为十进制数endx1=(umax-umin)*y1/1023+umin;m2=m(CodeL+1:1:2*CodeL);fori=1:1:CodeLy2=y2+m2(i)*2^(i-1);%将y2转换为十进制数endx2=(umax-umin)*y2/1023+umin;%求x对应的十进制数F(s)=100*(x1^2-x2)^2+(1-x1)^2;%个体适应度函数endJi=1./F;%个体适应度函数的倒数%******Step1:EvaluateBestJ******BestJ(k)=min(Ji);fi=F;%FitnessFunction适应函数[Oderfi,Indexfi]=sort(fi);%ArrangingfismalltobiggerBestfi=Oderfi(Size);%LetBestfi=max(fi)BestS=E(Indexfi(Size),:);%LetBestS=E(m),mistheIndexfibelongtomax(fi)%最佳样本bfi(k)=Bestfi;%******Step2:SelectandReproductOperation******fi_sum=sum(fi);fi_Size=(Oderfi/fi_sum)*Size;fi_S=floor(fi_Size);%SelectingBiggerfivaluekk=1;fori=1:1:Sizeforj=1:1:fi_S(i)%SelectandReproduceTempE(kk,:)=E(Indexfi(i),:);kk=kk+1;%kkisusedtoreproduceendend%************Step3:CrossoverOperation************pc=0.60;%交叉概率n=ceil(20*rand);%种群大小fori=1:2:(Size-1)temp=rand;ifpctemp%CrossoverConditionforj=n:1:20TempE(i,j)=E(i+1,j);%交换E(i,j)和E(i+1,j)TempE(i+1,j)=E(i,j);endendendTempE(Size,:)=BestS;E=TempE;%************Step4:MutationOperation**************%pm=0.001;%变异概率%pm=0.001-[1:1:Size]*(0.001)/Size;%Biggerfi,smallerPm%pm=0.0;%Nomutationpm=0.1;%Bigmutationfori=1:1:Sizeforj=1:1:2*CodeLtemp=rand;ifpmtemp%MutationConditionifTempE(i,j)==0TempE(i,j)=1;elseTempE(i,j)=0;endendendend%GuaranteeTempPop(30,:)isthecodebelongtothebestindividual(max(fi))TempE(Size,:)=BestS;E=TempE;endMax_Value=BestfiBestSx1x2figure(1);plot(time,BestJ);%目标函数和时间的坐标系xlabel('Times');ylabel('BestJ');figure(2);plot(time,bfi);xlabel('times');ylabel('BestF');遗传算法十进制编码求函数极大值程序%GenericAlgorithmforfunctionf(x1,x2)optimumclearall;closeall;%Parameters参数Size=80;G=100;%迭代次数CodeL=10;%编码长度umax=2.048;umin=-2.048;E=round(rand(Size,2*CodeL));%InitialCode???%MainProgramfork=1:1:Gtime(k)=k;fors=1:1:Sizem=E(s,:);y1=0;y2=0;%Uncodingm1=m(1:1:CodeL);%???fori=1:1:CodeLy1=y1+m1(i)*2^(i-1);endx1=(umax-umin)*y1/1023+umin;m2=m(CodeL+1:1:2*CodeL);fori=1:1:CodeLy2=y2+m2(i)*2^(i-1);endx2=(umax-umin)*y2/1023+umin;F(s)=100*(x1^2-x2)^2+(1-x1)^2;endJi=1./F;%******Step1:EvaluateBestJ******BestJ(k)=min(Ji);fi=F;%FitnessFunction[Oderfi,Indexfi]=sort(fi);%ArrangingfismalltobiggerBestfi=Oderfi(Size);%LetBestfi=max(fi)BestS=E(Indexfi(Size),:);%LetBestS=E(m),mistheIndexfibelongtomax(fi)bfi(k)=Bestfi;%******Step2:SelectandReproductOperation******fi_sum=sum(fi);fi_Size=(Oderfi/fi_sum)*Size;fi_S=floor(fi_Size);%SelectingBiggerfivaluekk=1;fori=1:1:Sizeforj=1:1:fi_S(i)%SelectandReproduceTempE(kk,:)=E(Indexfi(i),:);kk=kk+1;%kkisusedtoreproduceendend%************Step3:CrossoverOperation************pc=0.60;n=ceil(20*rand);fori=1:2:(Size-1)temp=rand;ifpctemp%CrossoverConditionforj=n:1:20TempE(i,j)=E(i+1,j);TempE(i+1,j)=E(i,j);endendendTempE(Size,:)=BestS;E=TempE;%************Step4:MutationOperation**************%pm=0.001;%pm=0.001-[1:1:Size]*(0.001)/Size;%Biggerfi,smallerPm%pm=0.0;%Nomutationpm=0.1;%Bigmutationfori=1:1:Sizeforj=1:1:2*CodeLtemp=rand;ifpmtemp%MutationConditionifTempE(i,j)==0TempE(i,j)=1;elseTempE(i,j)=0;endendendend%GuaranteeTempPop(30,:)isthecodebelongtothebestindividual(max(fi))TempE(Size,:)=BestS;E=TempE;endMax_Value=BestfiBestSx1x2figure(1);plot(time,BestJ);xlabel('Times');ylabel('BestJ');figure(2);plot(time,bfi);xlabel('times');ylabel('BestF');思考:通过改变群体大小、终止进化代数G、交叉概率Pc和变异概率Pm,分析群体大小、终止进化代数、交叉概率和变异概率对优化效果的影响。
本文标题:利用遗传算法求函数的极大值
链接地址:https://www.777doc.com/doc-5462480 .html