




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、Page of20遗传算法及其应用实例遗传算法(GeneticAlgorithm)是由美国Michigan大学的Holland教授(1969)提出,后经由DeJong(1975),Goldberg(1989)等归纳总结所形成的一类模拟进化算法。遗传算法搜索最优解的方法是模仿生物的进化过程,即通过选择与染色体之间的交叉和变异来完成的。遗传算法主要使用选择算子、交叉算子与变异算子来模拟生物进化,从而产生一代又一代的种群X(t)。选择算子:是模拟自然选择的操作,反映“优胜劣汰”原理。它根据每一个个体的适应度,按照一定规则或方法,从t代种群X(t)中选择出一些优良的个体(或作为母体,或让其遗传到下一代
2、种群X(t1)。彳(2)交叉算子:是模拟有性繁殖的基因重组操作,它将从种群X的所选择的每一对母体,以一定的交叉概率交换它们之间的部分基因。呻(3)变异算子:是模拟基因突变的遗传操作,它对种群X(t)中的每一个个体,以一定的变异概率改变某一个或某一些基因座上的基因值为其他的等位基因。呻交叉算子与变异算子的作用都在于重组染色体基因,以生成新的个体。遗传算法的运算过程如下:步1(初始化)确定种群规模N,交叉概率P,变异概率P和终止进化准则;随cm机生成N个个体作为初始种群X(0);置t0。步2(个体评价)计算评估X(t)中各个体的适应度。步3(种群进化)选择(母体)从X(t)中运用选择算子选择出M/
3、2对母体(MN)。交叉对所选择的M/2对母体,以概率P执行交叉,形成Mc个中间个体。变异对m个中间个体分别独立以概率P执行变异,形成Mm个候选个体。选择(子代)从上述所形成的M个候选个体中依据适应度选择出N个个体组成新一代种群X(t1)。步4(终止检验)如已满足终止准则,则输出Xtt1)中具有最大适应度的个体作为最优解,终止计算,否则置tt!并转步2。以上运算过程只是遗传算法的多种实现方式中的一种,根据实际问题的不同,遗传算法的实现也是多种多样的。遗传算法具有通用、并行、稳健、简单与全局优化能力强等突出优点,适用于解决复杂、困难的全局优化问题。一个优化问题被称为是复杂的,通常指它具有下述特征之
4、一:(1)目标函数没有明确解析表达(如非数值优化问题)。(2)目标函数虽有明确表达,但不可能恰好估值(如大部分最优控制问题、金融优化问题)。(3)目标函数有极多的峰值(如DNA计算、组合优化问题)。(4)多目标优化,即目标函数是向量值。一个优化问题被称为是困难的,则通常是指:或者目标函数f不连续、不可微、高度非线性,或者优化问题是困难的组合问题。对于这些复杂、困难的优化问题,已知的优化方法或者根本不可用,或者可用但不有效。相比之下,遗传算法不但保证可用,而且常常显得更为有效。但是,我们必须注意到,一个通用而又较少依赖于目标函数值与其他辅助信息的算法不可能比专用且充分利用目标函数值与相关辅助信息
5、的算法更为有效,而当一个问题有某些辅助信息可供使用时舍弃应用本来可供应用的信息而去应用于这些信息无关的算法也不是一个聪明的选择。所以,遗传算法一般来说并不适宜应用于通常的数值优化问题(例如连续可微的数学规划问题),或者说,当应用于这样的问题时,遗传算法并不总能显示其优越性。接下来,我们通过一个求解简单函数的最小值点的问题来初步展示遗传算法的具体实现方法:问题1:求函数f(X)Ilsin(6x)7cos(5x)在x0,2区间上的最小值点。20151050-5-10-15上图为函数f(x)Ilsin(6x)7cos(5x)在x0,2闔区间上的曲线图像,可以看出,该函数有多个极值点,如果使用其他的搜
6、寻方法,很容易陷入局部最小点,而不能搜寻到真正的全局最小点,但遗传算法可以较好地弥补这个缺陷。遗传算法的具体实现如下:1问题分析。对于本问题,自变量x可以抽象为个体的基因组,即用二进制编码表示x;函数值f(x)可以抽象为个体的适应度,函数值越小,适应度越高。关于二进制编码方式,在精度允许的范围下,可以将区间内的无穷多点用间隔足够小的有限点来代替,以降低计算量同时保证精度损失不大。如用16位二进制数来表示该区间的点,相邻点的间隔仅为2丄09.5875110-5,相邻点的函数值的变化幅度已经很小,由此带来216-1的精度损失完全可以接受。另一个问题是普通的二进制编码方式可能具有较大的汉明(Hamm
7、ing距离,例如15和16的二进制表示为01111和10000,从15到16必须改变所有位,这种缺陷将降低遗传算法的搜索效率。采用格雷编码(GrayEncoding)可以避免这一缺陷。格雷码的特点是任意两个连续的两个整数的编码值之间只有一个位是不同的,其他位都完全相同。格雷编码的原理如下:设有二进制串bb12b,对应的格雷串aaa,则从二进制编码n12n到格雷编码的变换为ab,i-1啟-b.,i-1川从格雷编码到二进制编码的变换为b(-a)mod2。ijj例如,0-15的格雷码如下表所示:01234567000000010011001001100111010101008910111213141
8、5110011011111111010101011100110002.根据遗传算法的运算过程编写程序。%f(x)=11sin(6x)+7cos(5x),0=x=2*piL=16;N=32;M=48;T=100;Pc=0.8;Pm=0.03;fori=1:1:Nx1(1,i)=rand()*2*pi;x2(1,i)=uint16(x1(1,i)/(2*pi)*65535);grayCode(i,:)=num2gray(x2(1,i),L);endfort=1:1:Ty1=11*sin(6*x1)+7*cos(5*x1);fori=1:1:M/2a,b=min(y1);grayCodeNew(i,
9、:)=grayCode(b,:);grayCodeNew(i+M/2,:)=grayCode(b,:);y1(1,b)=inf;endfori=1:1:M/2p=unidrnd(L);ifrand()Pcforj=p:1:Ltemp=grayCodeNew(i,j);grayCodeNew(i,j)=grayCodeNew(M-i+1,j);grayCodeNew(M-i+1,j)=temp;endendendfori=1:1:Mforj=1:1:Lifrand()PmgrayCodeNew(i,j)=1-grayCodeNew(i,j);endendendfori=1:1:Mx4(1,i)=
10、gray2num(grayCodeNew(i,:);endx3=double(x4)*2*pi/65535;y3=11*sin(6*x3)+7*cos(5*x3);fori=1:1:Na,b=min(y3);x1(1,i)=x3(1,b);grayCodei,:)=grayCodeNew(b,:);y3(1,b)=inf;endendx1y1=11*sin(6*x1)+7*cos(5*xl)3.结论分析。程序运行结果为:最小值点为x1.8486,f(x)17.8340。下面针对上面的问题,讨论遗传算法中一些初始化参数的设定方法及其影响。(1)编码长度L。使用二进制编码时,L通常由对问题的求解精
11、度决定,编码长度L越长,可期望的最优解的精度也就越高,但应注意过大的L会增大运算量。(2)种群规模N。种群规模N表示每一代种群中所含个体数目。当N取值较小时,可提高遗传算法的运算速度,但却降低种群的多样性,容易引起遗传算法早熟,出现假收敛;而当N取值较大时,又会使得遗传算法效率降低。一般建议的取值范围是20100。(3)交叉概率P。在遗传算法中交叉算子被认为是主要搜索算c子,因而一般取较大值。一般说,较大的P容易破坏群体中已形成的c优良模式,是搜索的随机性太大,而较小的P使发现新个体(特别是c优良新个体)的速度太慢。一般建议的取值范围是0.40.99。另外,比较理想的的方式是非一致地使用交叉概
12、率,例如在遗传算法的前期使用较大的P,后期降低P以保留优良个体。cc(4)变异概率p。较大的变异概率P使遗传算法在整个搜索空mm间中大步跳跃,而小的变异概率使遗传算法聚焦于特别区域作局部搜索。一般在不使用交叉算子的情形(演化策略(EvolutionStrategy)算法,进化程序(EvolutionProgramming)算法),变异算子作主要搜索算子,P取较大值(0.41);而在与交叉算子联合使用的情形(遗m传算法),P通常取较小值(0.00010.5)。m终止进化代数t。遗传算法不同于传统优化算法,它很难有明确的搜索终止准则(特别是对于非数值优化问题),于是通常需指定一个终止进化代数来终止
13、算法,一般设T100,1000。一般来说,事先指定T通常只能找到给定问题的在给定时限内所能寻求的相对满意解,但不一定是问题的最优解或较高精度的近似解。为了获得较高精度解,通常可依据种群适应度的稳定情况来实时调整T的设置。总体来说,以上参数的确定并没有明确的准则可依据,需要根据实际问题的特点以及算法的运行情况进行实时的调整,以搜索获得更为满意的最优解。Page of20L=32;N=60;M=80;T=100;Pc:=0.6;Pm:=0.02;fori=1:1:Nx10(1,i)=unidrnd(2人Lx10(2,i)=unidrnd(2人Lx11(1,i)=double(x10(1,x11(2
14、,i)=double(x10(2,-1);-1);i)/(2人L-1)*10-5;i)/(2人L-1)*10-5;接下来,我们用遗传算法来求解一个更为复杂的函数最值问题。问题2:求Schaffer函数的最大值点:sin2Jx2x20.5:,x)0.5丄2,Sx5,i1,212l0.001(x2x2)2i丄20.8-0.4-0.2-5-5根据遗传算法的一般运算过程编写MATLAB程序如下:Page #of20endfortPage of20foritemp1(1,i)=x11(1,i)人2+x11(2,i)人2;y1(1,i)=0.5-(sin(sqrt(temp1(1,i)*temp1(1,i
15、);grayCode1(1,grayCode1(2,endi,:)i,:)=num2gray(x10(1,=num2gray(x10(2,i),i),fori=1:1:a,b=max(y1);grayCode2(1,i,grayCode2(2,i,y1(1,b)=-inf;end:):)=grayCode1(1,b,=grayCode1(2,b,:);:);人2-0.5)/(1+.001L);L);fori=1:1:M/p=unidrnd(L);ifrand()Pcforj=p:1:temp=grayCode2(1,i,j);grayCode2(1,i,j)=grayCode2(1,grayC
16、ode2(1,M-i+1,j)=temp;temp=grayCode2(2,i,j);grayCode2(2,grayCode2(2,endM-i+1,j);endendfori=1:1:Mforj=1:1:Lfork=1:1:ifrand()grayCode2endendendendfori=1:1:Mx20(1,x20(2,x21(1,x21(2,i)i)i)i)i,j)M-iPm=grayCode2(2,M-i+1,j);+1,j)=temp;j)=1-grayCode2(k,i,j);=gray2num(grayCode2(1,i,=gray2num(grayCode2(2,i,=do
17、uble(x20(1,i)/(2人=double(x20(2,i)/(2人:);:);L-1)*L-1)*i)人2;10-5;10-5;temp2(1,i)=x21(1,i)人2+x21(2,y2(1,i)=0.5-(sin(sqrt(temp2(1,i)人2-*temp2(1,i);0.5)/(1+.001endPage of20fori=1:1:Na,b=max(y2);x10(1,i)=x20(1,b);x10(2,i)=x20(2,b);x11(1,i)=x21(1,b);x11(2,i)=x21(2,b);y21,b)=-inf;endendxl1运行结果显示,遗传算法常常在x2X2
18、2附近陷入局部最大,12而难以达到(x,x).(0,0)的全局最大点。为此,应对遗传算法加以改进。12之前的遗传算法存在的一个缺陷是不能保证搜寻到的最佳个体可以被遗传到下一代,因此可能会错过全局最优点。父子混合选择遗传算法(Father-OffspringCombinedSelectionGeneticAlgorithm)对此加以改进,该算法要求上一代的最佳个体必须被无条件地遗传到下一代,因此记录了到目前为止算法所发现的最佳个体,因而适应度序列必然具有单调性,即关于进化代数是单调不减的。可以证明的是,该算法是遗传算法保证收敛的执行策略。父子混合选择遗传算法的执行过程如下:步1(初始化)随机产生
19、M对母体组成初始种群X(0),置t0。步2(种群进化)独立地对X(t)中的N对母体执行交叉,生成中间种群Y(t(由N个中间个体组成)。独立地对Y(t)中的每一个中间个体执行变异,生成子代种群Z(t)。2.3.在父代种群x(t)与子代种群Z(t)的并集X(t)Z(t)中选择N对母体作为新一代父代种群x(t.1)。步3(终止检验)4+4如果终止准则满足,停机并输出X(t.1)中的最佳个体作为问题的近似解,否则置tt.1并转步2。根据这一算法重新编写程序。+L=32;N=60;T=100;Pc=0.6;Pm=0.02;fori=1:1:Nx0(1,i)=unidrnd(2人L-1);x0(2,i)=
20、unidrnd(2人L-1);endfort=1:1:Tfori=1:1:NgrayCode(1,i,:)=num2gray(x0(1,i),L);grayCode(2,i,:)=num2gray(x0(2,i),L);endfori=1:1:N/2ifrand()Pcp=unidrnd(L);forj=1:1:p-1grayCode(1,i+N,j)=grayCode(1,i,j);grayCode(2,i+N,j)=grayCode(2,i,j);grayCode(1,N-i+1+N,j)=grayCode(1,N-i+1,j);grayCode(2,N-i+1+N,j)=grayCode
21、(2,N-i+1,j);endforj=p:1:LgrayCode(1,i+N,j)=grayCode(1,N-i+1,j);grayCode(2,i+N,j)=grayCode(2,N-i+1,j);grayCode(1,N-i+1+N,j)=grayCode(1,i,j);grayCode(2,N-i+1+N,j)=grayCode(2,i,j);endendendfori=N+1:1:2*Nforj=1:1:Lfork=1:1:2ifrand()PmgrayCode(k,i,j)=1-grayCode(k,i,j);endendendendfori=N+1:1:2*Nx0(1,i)=gr
22、ay2num(grayCode(1,i,:);x0(2,i)=gray2num(grayCode(2,i,:);endfori=1:1:2*Nx1(1,i)=double(x0(1,i)/(2人L-1)*10-5;x1(2,i)=double(x0(2,i)/(2人L-1)*10-5;temp1,i)=x1(1,i)人2+x1(2,i)人2;y(1,i)=0.5-(sin(sqrt(temp(1,i)人2-0.5)/(1+0.001*temp(1,i);endfori=1:1:Na,b=max(y);x2(:,i)=x0(:,b);y(1,b)=-inf;endfori=1:1:Nx0(:,i
23、)=x2(:,i);endend运行结果显示,该算法已经搜索到了近似最优解(x,x)(0,0)12关于遗传算法的收敛性问题,这里可以给出几个结论供参考。经典遗传算法并不保证全局最优收敛,而只能在一定的约束条件下,实现全局最优收敛。经典遗传算法可能出现未成熟收敛问题,主要表现在以下两个方面:一是群体中所有的个体都陷于同一适应度而停止进化;二是接近最优解的个体总是被淘汰,进化过程不收敛。抑制未成熟收敛的对策有:提高变异概率;调整选择概率;维持群体中个体的多样性等等。但这些方式都不能确保全局最优收敛。但是,如果在每次迭代过程中保留最优个体,那么就能够保证其收敛。不过,保留最优个体的遗传算法在概率意义
24、下的收敛,并不表明该方法一定具有很快的收敛速度,也不意味着该方法具有更佳的性能,因为它可能需要更长的时间,其计算代价可能是无法接受的。在设计遗传算法的编码方式时,应考虑以下问题:(1)对于问题空间的任何一个点有表达空间的一个点与之对应,即问题空间的所有可能解都能表示为所设计得染色体形式。(2)对于表达空间中的任何一个点都有问题空间中的一个点与之对应,即任何一个染色体都对应于一个可能解。(3)问题空间和表达空间一一对应。这三点是编码方式或策略应遵守的普遍准则,但是,在实际应用中,对于很多问题,很难设计出同时满足上述三个性质的编码方案。此时,首先必须满足第一个要求,即在保证所有可能解均可以被表示为
25、染色体形式的前提下,是允许生成无用解的。最后,我们使用遗传算法来解决一个更为贴近实际的问题旅行商问题(TravellingSalesmanProblem)。问题的具体表述如下:一个旅行商需要访问个城市,在任意路线的两个城市之间有一个关联的费用(例如公里数、航空费用等)。找出一个费用最少的路径:从一个城市出发,经过所有其他的城市一次且仅一次,然后回到出发点。这个问题已被证明是NP难题,当城市数量较大时,使用普通算法将耗费大量的时间,因此我们尝试使用遗传算法来求解。适应度评价函数的很直观:我们要做的是评估路径的长度,然后按照长度对路径进行排序,最短的就是最好的。因此,对于本问题的求解,最重要的部分
26、在于编码方式的确定。假设我们有9个城市要访问,编号为1,2,9。加入简单的用一个四位二进制数(0001,0010,1001)来代表每一个城市,二进制串0001001000110100010101100111B1000聊卩01代表按照序号顺序进行访问。但问题在于,交叉算子与变异算子很难应用到这种编码方式上,一般的交叉算子和变异算子会产生大量的不可行解,从而影响搜索速度。另一种方式是使用一个数字(例如1,2,9)代表一个城市,通过对这9个数字排序构造路径,选择合适的遗传算子产生路径。Davis(1985)提出了有序交叉(OrderCrossover)算子,较好地解决了这个问题,具体方式如下:有序交
27、叉通过在一个双亲的路径中选择城市子序列创建子代。首先,选择两个划分点,用|标志,划分点任意插入到双亲路径中的相同位置,如:p1(19214657183)p2(459|1876|23)两个子代和按下面的方法产生。首先,双亲中划分点中间的部分复制到后代中:c1(|4657|)c2(118761)然后,从一个双亲路径的第二个划分点开始,从另外一个双亲路径中来的城市按相同的顺序复制。当字符串的结尾到达时,转从字符串的开始处继续,最终得到两个子代:cl(23914657118)c2(39211876145)一般来说,对于TSP问题,城市的顺序在生成最少花费路径时非常重要,于是双亲路径中的顺序信息片段传递
28、到子代路径中去时很关键的。根据该思路编写程序如下:(测试数据来自TSPLIB95:rd100.tsp)rd100=importdata(rd10O.tsp);cityAmount=100;fori=1:1:cityAmountforj=1:1:cityAmountdistancei,j)=sqrt(rd100(i,2)-rd100(j,2)人2+(rd100(i,3)-rd100(j,3)人2);endendL=100;N=200;T=10000;Pc=0.8;Pm=0.15;fori=1:1:Nx(i,:)=randperm(L);endfort=1:1:Tfori=1:1:N/2ifran
29、d()p2temp=pl;pl=p2;p2=temp;endflagl=zeros(1,L);flag2=zeros(1,L);forj=pl:1:p2x(i+N,j)=x(i,j);flagl(1,x(i,j)=1;x(N-i+1+N,j)=x(N-i+1,j);flag2(1,x(N-i+1,j)=1;endj=p2+1;k=1;while1ifjLj=1;endifk=p1k=p2+1;endifkLbreak;endifflag1(1,x(N-i+1,j)=0 x(i+N,k)=x(N-i+1,j);j=j+1;k=k+1;elsej=j+1;endendj=p2+1;k=1;while1ifjLj=1;endifk=p1k=p2+1;endifkLbreak;endifflag2(1,x(i,j)=0 x(N-i+1+N,k)=x(i,j);j=j+1;k=k+1;elsej=j+1;endendelsex(i+N,:)=x(i,:);x(N-i+1+N,:)=x(N-i+1,:);endendf
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 推进省能减排措施的总结计划
- 组织目标达成情况报告计划
- Unit 2 More than fun -Developing ideas 教学设计 2024-2025学年外研版英语七年级上册
- 家长参与教育的有效提升计划
- 学校美术教育的多元评价体系计划
- 突破瓶颈的创新解决方案计划
- 环评验收合同(2025年版)
- 四年级下册数学教案-8.2 条形统计图 1-西师大版
- 小学普法教育
- 物业客服接待流程及礼仪培训
- 宣传片基本报价单三篇
- 初中必背260个固定搭配
- (正式版)SHT 3115-2024 石油化工管式炉轻质浇注料衬里工程技术规范
- 无人机发展助力各行各业的创新1
- 心脏血管旋磨术护理
- 2024年九年级中考数学专题训练-动点最值之胡不归模型
- 2024年考研英语真题及答案(完整版)
- 2024年中国太平洋财产保险股份有限公司招聘笔试参考题库含答案解析
- 氯碱行业收益如何分析
- 尺寸不符回复报告
- 中华人民共和国护士管理办法
评论
0/150
提交评论