运用遗传算法求解函数f(x)=x^2_第1页
运用遗传算法求解函数f(x)=x^2_第2页
运用遗传算法求解函数f(x)=x^2_第3页
运用遗传算法求解函数f(x)=x^2_第4页
运用遗传算法求解函数f(x)=x^2_第5页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

一遗传算法的基本原理遗传算法是模拟生物遗传学和自然选择机理,通过人工方式构造的一类优化搜索算法,是对生物进化过程进行的一种数学仿真,是进化计算的一种重要形式。其搜索过程是从问题解的一个随机产生的集合开始的,而不是从单个个体开始的,具有隐含并行搜索特性,也就大大减少可陷入局部极小值的可能。在解决可能在求解过程中产生组合爆炸的问题时会产生很好的效果。遗传算法需选择一种合适的编码方式表示解,并选择一种评价函数用来每个解的适应值,适应值高的解更容易被选中并进行交叉和变异,然后产生新的子代。选择、交叉和变异的过程一直循环,直到求得满意解或满足其他终止条件为止。本例运用遗传算法求解函数f(x)=x^2,x∈[0,31]上的整数,的最大值。首先随机选择五位二进制编码,设定初始种群个数为4,产生初始种群。随后确定适配度,本例就是目标值。然后根据适配值的大小,按照一定的概率进行复制。连续10代最大值结果保持一致,则遗传算法结束运行。二Matlab程序运行结果:由运行结果可以看出,经过2代以后,遗传算法的结果达到最优。Matlab程序如下:%****遗传算法主程序*******clearclctotal=1;%总的进化代数Num=0;MaN1=0;MaN2=0;flag=0;N1=initialize();N2=initialize();N3=initialize();N4=initialize();%复制while1while1DecN1=BinToDec(N1);%计算适配度DecN2=BinToDec(N2);DecN3=BinToDec(N3);DecN4=BinToDec(N4);f1=DecN1^2;f2=DecN2^2;f3=DecN3^2;f4=DecN4^2;ttt=[f1,f2,f3,f4];ifflag==0MaN1=max(ttt);elseMaN2=max(ttt);endifMaN1==MaN2Num=Num+1;elseNum=0;endsum=f1+f2+f3+f4;aver=sum/4;n1=round(f1/aver);%实际得到的复制个数n2=round(f2/aver);n3=round(f3/aver);n4=round(f4/aver);N=n1+n2+n3+n4;%总的复制个数ifN~=4N1=initialize();N2=initialize();N3=initialize();N4=initialize();total=1;Num=0;MaN1=0;MaN2=0;flag=0;continue;elsebreak;endendtemp1=cal(N1,n1);temp2=cal(N2,n2);temp3=cal(N3,n3);temp4=cal(N4,n4);M=[temp1;temp2;temp3;temp4];N1=M(1,:);N2=M(2,:);N3=M(3,:);N4=M(4,:);%交叉while1p=floor(1000*rand);ifp>1break;elsecontinue;endendk=mod(p,3);switchkcase0[N1,N2,N3,N4,ps]=crossover(N1,N2,N3,N4);case1[N1,N2,N3,N4,ps]=crossover(N1,N3,N2,N4);case2[N1,N2,N3,N4,ps]=crossover(N1,N4,N2,N3);end%变异U=[N1,N2,N3,N4]pos=mod(floor(1000*rand),20)+1;ifU(1,pos)==0U(1,pos)=1;elseU(1,pos)=0;endN1=U(1,1:5);N2=U(1,6:10);N3=U(1,11:15);N4=U(1,16:20);%遗传算法结束条件:连续10代最大值均保持一致ifNum==10disp('进化代数:')total-10disp('现在的种群:')N1N2N3N4disp('最大值:')MaN1break;endflag=mod(flag+1,2);total=total+1;end子程序1:initialize.mfunction[X]=initialize()X=zeros(1,5);forj=1:5X(1,j)=round(rand);end子程序2:BinToDec.mfunctionsum=BinToDec(X)sum=0;fori=5:-1:1sum=sum+X(1,i)*2^(5-i);end子程序3:cal.mfunction[temp]=cal(X,n)temp=zeros(n,5);fori=1:ntemp(i,:)=X;子程序4:crossover.mfunction[A1,A2,A3,A4,position]=crossover(t1,t2,t3,t4)while1p=floor(1000*rand);ifp>1break;elsecontinue;endendpo

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论