资源描述:
《利用遗传算法求函数的极大值.doc》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、利用遗传算法求函数的极大值该函数有两个局部极大值点,分别是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*Cod
2、eL));%InitialCode最初代码%MainProgram主程序fork=1:1:Gtime(k)=k;fors=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+um
3、in;%求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),mistheIndexfibelongt
4、omax(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:Cr
5、ossoverOperation************pc=0.60;%交叉概率n=ceil(20*rand);%种群大小fori=1:2:(Size-1)temp=rand;ifpc>temp%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.00
6、1-[1:1:Size]*(0.001)/Size;%Biggerfi,smallerPm%pm=0.0;%Nomutationpm=0.1;%Bigmutationfori=1:1:Sizeforj=1:1:2*CodeLtemp=rand;ifpm>temp%MutationConditionifTempE(i,j)==0TempE(i,j)=1;elseTempE(i,j)=0;endendendend%GuaranteeTempPop(30,:)isthecodebelongtothebestindividual(max(fi))TempE(Size,:)=BestS;E=Te
7、mpE;endMax_Value=BestfiBestSx1x2figure(1);plot(time,BestJ);%目标函数和时间的坐标系xlabel('Times');ylabel('BestJ');figure(2);plot(time,bfi);xlabel('times');ylabel('BestF');遗传算法十进制编码求函数极大值程序%GenericAlgorithmforfunctionf(x1,x2)optimumclea