1、第 31 卷第 4 期 哈 尔 滨 工 程 大 学 学 报 Vol.31 No.42010 年 4 月 Journal of Harbin Engineering University Apr. 2010遗传算法求函数的极大值2013 年 4 月2 哈 尔 滨 工 程 大 学 学 报 第 28 卷遗传算法求函数的极大值摘 要:近年来遗传算法(GA)的理论研究和应用研究成为一大热点,遗传算法根据适者生存优胜劣汰等自然化规则在计算机上模拟生物进化过程和基因遗传的操作,来进行搜索计算和问题的求解,具有全局寻优能力.遗传算法的典型应用之一是求函数的极大值。利用遗传算法求 Rosenbrock 函数的极
2、大值,从而搜索问题的最优解关键词:遗传算法;Rosenbrock 函数;遗传算法流程图Doi:10.3969/j.issn.1006-7043.中图分类号:(作者本人填写) 文献标识码:A 文章编号:1006-7043 (2006) xx-xxxx-x The maximum value of the function of genetic algorithmsAbstract:Theoretical and applied research of genetic algorithm (GA) in recent years become a hot topic, genetic algori
3、thm based on the survival of the fittest, survival of the fittest naturalization rules on the computer simulate the process of biological evolution and genetic operations to search for computing and problem solvingwith global optimization ability of one of the typical application of the genetic algo
4、rithm is a function of great value. The great value of the Rosenbrock function using genetic algorithms to search the optimal solution. Keywords:genetic algorithm; Rosenbrock; genetic algorithm flowchart1遗传算法简称(GA)是 1962 由美国Michigan 大学的 Holland 教授提出的模拟自然界遗传机制和生物进化论而成的一种并行随机搜索最优化方法。它将“优胜劣汰,适者生存”的生物进化
5、原理引入优化参数形成编码串联群体中,按所选择的适配值函数并通过遗传中的复制、交叉、变异对个体进行筛选,使适配值高的个体被保留下来,组成新的群体,新的群体继承上一代的信息,又优于上一代。这样周而复始,群体中个体适应度不断提高,知道满足一定条件。利用遗传算法寻找Rosenbrock 的极大值,随着优化过程的进行,群体中适配度较低的一些个体逐渐被淘汰,而适配度较高的一些个体会越来越多,并且它们都集中在所求的最优点附近,从而搜索到问题的最优解。1 遗传算法的优化设计收稿日期:xxxx-xx-xx. 基金项目:基金项目名称(编号).作者简介:姓 名(出生年-), 性别, 职称,学位,E-mail(通信作
6、者) ;姓 名(出生年-), 性别, 职称,学位.通信作者:姓 名(出生年-), 性别, 职称,学位,E-mail(如不是作者简介里的作者).1.1 遗传算法的构成要素1.1.1 染色体编码方法基本遗传算法使用固定长度的二进制符号来表示群体中的个体,其等位基因由二值符号集所组成。1,01.1.2 个体适应度评价基本遗传算法与个体适应度成正比的概率决定当前群体中每个个体遗传到下一代群体中的概率多少。为正确计算这个概率,要求所有个体的适应度必须为正数或零。因此,必须先确定由目标函数值到个体适应度之间的转换规则。1.1.3 遗传算子基本遗传算法使用下述三种遗传算子(1) 选择运算使用比例选择算子;(
7、2) 交叉运算使用单点交叉算子;(3) 变异运算使用基本位变异算子或均匀变异算子。1.1.4 基本遗传算法的运行参数有四个运算参数需要提前设定::群体大小,既群体中所含个体的数量;M:遗传算法终止的进化代数,一般为G100150;: 交叉概率,0.490.99;cP:变异概率,一般为 0.00010.1m1.2 遗传算法的一般步骤照片尺寸为20mm*30mm;最好不用红色背景增刊 第一作者姓名,等:文章题目 - 3 -遗传算法是一种迭代算法。它以一组随机产生的解开始,在每一次迭代中由模拟进化和继承的遗传操作产生一组新解,这些解都由一个适应度函数给予评价,这个过程不断重复,直到达到某种形式上的收
8、敛,新的一组解不但可以有选择的保留一些适应度函数值高的旧解,而且可以包括一些与其他解相结合而得到的新解。图 1 给出了遗传算法的工作原理框图。实际问题的参数集编码成位串形式确定初始种群给出( 种群 1 ) 适应度函数计算种群适应度遗传算子的操作选择交叉变异生成新种群 ( 种群 2 )判断是否停止 ?输出最优结果种群 2 替换种群 1是否图 1 遗传算法的工作原理框图2 遗传算法求函数的极大值利用遗传算法求 Rosenbrock 函数的极大值:222111,0.48.,ifxxxi该函数有两个局部级大点,分别是 .,.397.42f和 ,其中后者为全局20056最大点。2.1 确定编码方式用长度
9、为 10 位的二进制编码串分别表示两个决策变量 , 。10 位二进制编码串可以表示从1x201023 之间的 1024 个不同的数,故将 , 的1x2定义域离散化为 1023 个均等的区域,包括两个端点在内共有 1024 个不同的离散点。从离散点-2.048 到离散点 2.048,依次让它们分别对应于从00000000001111111111 之间的二进制编码。再将分别表示 , 的两个 10 位长的二进制编码串1x2连接在一起,组成一个 20 位长的二进制编码串,就构成了这个函数优化问题的染色体编码方法。2.2 确定解码方法解码时需要将 20 位长的二进制编码串切断为两个 10 位长的二进制编
10、码串,然后分别将它们转换为对应的十进制整数代码,分别记为 和 。1y2依据个体编码方法和对定义域的离散化方法可知,将代码 转换为变量 的解码公式为:iyix4.0962.048,13iixi2.3 确定解码方法由于 Rosenbrock 函数的总是非负的,并且优化目标是求函数的最大值,故可将个体的适应度直接取为对应的目标函数值,既: 12(,)Fxf选个体适应度的倒数作为目标函数:J2.4 设计遗传算子选择运算使用比例选择算子,交叉运算使用单点交叉算子,变异运算使用基本变异算子。2.5 确定遗传算法的运行参数群大小为 =80,终止进化代数 =100,交叉MG概率 =0.60,变异概率 =0.1
11、0。cPmP在仿真中目标函数 和适应度函数 的变化过程JF见图 2 和图 3.0 10 20 30 40 50 60 70 80 90 1002.552.62.652.72.752.82.852.92.9533.05x 10-4TimesBest J图 2 目标函数 的优化过程J- 4 - 哈 尔 滨 工 程 大 学 学 报 第 28卷0 10 20 30 40 50 60 70 80 90 100320033003400350036003700380039004000TimesBest F图 3 适应度函数 的优化过程F3 结 论经过 100 步迭代,最佳样本为:Best=000000000
12、00000000000既当 和12.048x时,Rosenbrock 函数具有极大值。极大2.048x值为 3905.9.有仿真结果可知,随着进化过程的进行,群体中适配度较低的一些个体逐渐被淘汰,而适配度较高的一些个体会越来越多,并且它们都集中在所求的最优点附近,从而搜索到问题的最优解。参考文献:1 刘金锟.先进 PID 控制 MATLAB 仿真.北京:电子工业出版社,2004.9.增刊 第一作者姓名,等:文章题目 - 5 -附录:仿真程序Size=80;G=100;Codel=10;umax=2.048;umin=-2.048;E=round(rand(Size,2*Codel);for k
13、=1:1:Gtime(k)=k;for s=1:1:Sizem=E(s,:);y1=0;y2=0;m1=m(1:1:Codel);for i=1:1:Codely1=y1+m1(i)*2(i-1);endx1=(umax-umin)*y1/1023+umin;m2=m(Codel+1:1:2*Codel);for i=1:1:Codely2=y2+m2(i)*2(i-1);endx2=(umax-umin)*y2/1023+umin;F(s)=100*(x12-x2)2+(1-x1)2;endJi=1./F;BestJ(k)=min(Ji);fi=F;Oderfi,Indexfi=sort(f
14、i);Bestfi=Oderfi(Size);BestS=E(Indexfi(Size),:);bfi(k)=Bestfi;fi_sum=sum(fi);fi_Size=(Oderfi/fi_sum)*Size;fi_S=floor(fi_Size);kk=1;for i=1:1:Sizefor j=1:1:fi_S(i)TempE(kk,:)=E(Indexfi(i),:);kk=kk+1;endendpc=0.60;n=ceil(20*rand);for i=1:2:(Size-1)temp=rand;if pctemp;for j=n:1:20TempE(i,j)=E(i+1,j);Te
15、mpE(i+1,j)=E(i,j);endendendTempE(Size,:)=BestS;E=TempE;pm=0.1;for i=1:1:Size;for j=1:1:2*Codeltemp=rand;if pmtempif TempE(i,j)=0;TempE(i,j)=1;elseTempE(i,j)=0;endendendendTempE(Size,:)=BestS;E=TempE;endMax_Value=Bestfi;BestSx1x2figure(1)plot(time,BestJ);xlabel(Times);ylabel(Best J);figure(2)plot(time,bfi);xlabel(Times);ylabel(Best F);