您好,欢迎访问三七文档
遗传算法一二三四遗传算法的MATLAB求解五遗传算法的特点与发展遗传算法的基本思想是:从一组解的初值开始进行搜索,这组解称为一个种群,种群由一定数量、通过基因编码的个体组成,其中每一个个体称为染色体。不同个体通过染色体的复制、交叉和变异又生成新的个体,依照适者生存的规则,个体也在一代一代进化,通过若干代的进化最终得出条件最优的个体。一、基本概念个体与种群个体就是模拟生物个体而对问题中的对象(一般就是问题的解)的一种称呼,一个个体也就是搜索空间中的一个点。种群(population)就是模拟生物种群而由若干个体组成的群体,它一般是整个搜索空间的一个很小的子集。二、遗传算法的基本迭代步骤基本遗传算法可用于解决求一般参数优化问题的全局最优解,即求解其寻优过程如下:(1)编码对优化问题解空间中可行解(个体)进行编码,也就是要将解空间的设计变量转换为遗传算法中的基因型数据结构,通常用一个固定长度的二进制位串来进行编码,形成遗传算法中的染色体,这种编码方式简单,易于计算机上编程实现.在进行二进制编码时,首先要确定二进制编码串的长度.依赖于变量的定义域以及问题所要求的精度.例如,若变量的定义域为[0,10]而问题的精度要求为10-6,要确定编码串的长度.首先要把分割成10,000,000个等长区间,每个区间采用一个二进制编码来表示,而223=8,388,608,224=16,777,216,因此至少需要编码串长度为24.这样对应于[0,10]区域精度范围内的每个值都可用一个24位编码串个体来表示,其转换过程如下当优化问题属于多维优化问题时,可先对各个变量分别进行编码,然后将它们合并成一个长串.在解码时,再对各个变量分别进行解码即可.(2)产生初始群体由于遗传算法是对群体的反复操作,因此需要建立一个初始迭代的群体.群体的大小视具体问题而定,较小的优化问题个体可以选择10~20个,复杂一些的问题则需要50~100个.初始群体的每个个体都是通过随机方法产生的,初始群体称为进化第一代.(3)构造评价函数(适应度)在遗传算法中,通常将优化问题的目标函数进行适当的变化后,作为遗传算法的评价函数,或称为适应度.群体在进化过程中,通过适应度来评价个体的优劣,作为遗传操作的依据,并由此一步步地达到问题的最优逼近值.适应度(fitness)就是借鉴生物个体对环境的适应程度,而对问题中的个体对象所设计的表征其优劣的一种测度.适应度函数(fitnessfunction)就是问题中的全体个体与其适应度之间的一个对应关系。它一般是一个实值函数。该函数就是遗传算法中指导搜索的评价函数。(4)遗传操作在初始群体的基础上,通过遗传操作产生后代群体,遗传操作也称遗传算子,它影响着群体的进化过程和效率.选择、交叉和变异是遗传算法的三个主要操作算子,它们构成了遗传算法的主体.下面分别介绍选择运算、交叉运算和变异运算.①选择运算选择是遗传算法的基本算子,它从当前群体中选择出一定数量的优良个体,作为参与下一代群体繁殖的父代个体,使它们有机会繁殖后代,体现了“适者生存”的自然选择原则.个体的选择是依据适应度大小进行的,适应度大的个体被复制,适应度小的被淘汰,而新群体个体的总数保持不变.假定一个群体有6个符号串,而且它们的适应度值如下表所示.)(/)(iixfxfA250.5B100.2C60.12C60.12D20.04E10.02总数501符号串(ix)适度值)(ixfABCCDE图9.2实现上述选择的一种方法是轮盘选择.每个符号串在轮盘上占有一格,而格的大小则与符号串的适应度值成正比.在选择一个新的符号串时,只转动轮盘,待轮盘停下,落在标记处的格所对应的符号串被选中.图9.2描述了轮盘转动6次生成一代新的群体,且符号串的期望组合为基于期望次数,见表9.2.新的群体可能是(A,A,A,B,C,C).很明显,如果繁殖操作被重复运用,适应度较高的符号串在整个群体中将占据主导地位.由于繁殖操作只能使新群体性能得到改善,但是不能生成新的符号串(个体).ix符号串()(ixP选择概率)(6ixP期望次数)A0.53B0.21.2C0.241.44D0.040.24E0.020.12②交叉运算交叉运算是使群体产生新个体的操作过程,简单的交叉操作是首先对新群体中的个体(优胜者)进行随机配对,然后在配对个体中随机选择交叉点位置,然后将两个个体的部分结构加以替换,重组而生成新个体.一般交叉操作要求不要太多地破坏优良个体的优良特性,同时又能够产生一些较好的新个体模式.交叉操作的主要内容包括:A在形成的配对库中随机产生配对个体组,并依概率决定是否进行交叉操作.B设定配对交叉点并完成交叉操作.两个个体字符串可按如下步骤进行:a在个体字符串长度范围内,随机选择一个交叉点位置,将个体字符串断开.b交换个体字符串断开后一部分信息.由此一来,两个具有其父母双方基因成分的符号串由此产生.例如,有二个个体A和B,分别用8位二进制字符串编码,选择第6位为交叉点,则交叉前交叉后A个体1101011111010110A个体B个体0100101001001011B个体↑交叉位置这一交叉操作所产生的新个体有时和父代个体具有明显的差别,有时又会产生一定的相似性,正是有了交叉操作群体才保持着多样性,从而扩大了遗传算法的探索范围,加快了优化的收敛速度.需要注意的是,如果整个群体中只有一种符号串,交叉操作不会产生任何新的符号串,如何处理这种情况呢?我们可采用下面要介绍的变异运算来解决这个问题.③变异运算在生物的遗传和自然进化过程中,其细胞分裂复制环节可能因为某些偶然因素的影响而产生一些复制差错,这样就会导致生物内的某些范围发生变异,从而产生出新的染色体,表现出新的生物性状.虽然发生这种变异的可能性较小,但也是产生新物种的一个不可忽视的原因.在遗传算法中则利用变异来模拟生物遗传和进化过程中的由变异而产生的新个体.它是对群体中个体的某些基因座上的基因值作变动.对于二进制编码的个体,其编码字符集为,变异操作就是将个体在变异点上的基因值按照变异概率取反,即1变0,0变1.变异率(mutationrate)是指发生变异的基因位数所占全体染色体的基因总位数的比例,记为Pm,取值范围一般为0.0001~0.1。(5)判定遗传算法的收敛性遗传算法是一种基于群体进化的计算模型,它通过对群体中的个体进行遗传操作(选择、交叉和变异)使群体向着最优方向移动并最后逼近问题最优解,这样的进化过程包含了大量的随机性操作,显然该进化过程为一随机过程,从而可用随机过程理论来研究进化过程.由遗传算法的进化过程可知,每一子代群体只和它的父代群体相关,而与其他代种群无关,因此进化过程具有无后效性,同时,各代种群之间的转换概率与时间的起点无关,因此可用Markov链分析遗传算法收敛性.(6)最优个体解码(最优解)当群体进化结束时,如适应度最大的个体,即最优个体,进行解码,从而可以得到应相变量的值,这就是优化问题的最优解.遗传算法的基本流程图三应用举例例9.2求二次函数的最大值,自变量x∈[0,3l]T.解利用遗传算法来求解该优化问题时,其主要步骤如下.(1)个体编码.遗传算法的运算对象是表示个体的字符串,为了实现方便,通常采用固定长度的字符串来表示,字符选用0或1.本例中,自变量x的取值范围为0~31,可以用5位二进制数来表示x的取值,即0,1,…,31共32个整数值.(2)群体初始化.采用随机产生的方法产生初始群体,这里选取群体规模数为4,得出由4个个体组成的初始群体,即个体l01101个体211000个体301000个体410011它们对应的x值分别为13、24、8、19(3)构造适应度函数.本问题的目标是使二次函数最大,而群体进化过程中适应度最大的个体即是最优个体,于是可以将该二次目标函数作为适应度函数,这样在进化结束时,最大适应度值的个体所对应变量x的值,将使目标函数达到最大.本例中的目标函数可以直接作为适应度函数,在计算适应度函数时需要对个体进行解码.比如,个体1~个体4解码后对应的x值分别为13、24、8、19,相应的适应度则分别为169、576、64、361(4)选择运算.选择运算就是从当前群体中选出优良个体作为父代个体,使它们有机会繁殖后代.一般选择那些适应度较高的个体,个体适应度越高,被选择的机会就越多,而适应度小的个体则被删除.选择操作的实现方法很多,这里采用和适应度值成正比的概率方法进行选择.首先,计算出群体中所有个体的适应度总和,然后计算每个个体的相对适应度大小,并以此作为相应的选择概率,如表9.3中第⑤栏所示.也可以采用轮盘选种法进行筛选,将个体适应度的值累加得到总适应度的和,每个个体按照适应度对应着相应的区间,,,,若在区间上随机产生一个数,则该数值所在区间对应的个体即被选为父代个体.显然,适应度大的个体在适应度累计值中占有较大的比例,从而被选中的可能性也就大些.本例中,随机选择4个个体,其结果为:个体1被选择1次,个体2被选择2次,个体4被选择1次.如表9.3中第⑦栏所示,表示传递给下一代的个体数目,其中2号个体占2个,第l、4号个体保持为1个,而3号个体为0,不会进行繁殖.群体中个体在理论上被选择的概率分别为:0.14、0.49、0.06和0.31,如表9.3中第⑤栏所示.2号个体(11000)性能最优(1.97),予以复制繁殖.3号个体(01000)性能最差(0.22),将它删除,使之死亡,选择的结果基本上反映了生物进化的内部机制.新群体的4个个体分别是01101、11000、11000、10011,相应的解码变量值为13、24、24、19,如表9.4中第②和③栏所示.经过选择运算后,新一代群体的进化性能有明显改善,如表9.4中第④栏所示.新群体的最小适应度由原来的64提高到361,平均适应度也由原来的增293增至421.这是因为在本次群体的进化过程中,淘汰了最差个体(3号)、增加了优良个体(2号)的个数,从而使新群体的总适应度累计都得了相应的增加.利用随机配对的方法选择1号和2号个体、3号和4号个体作为配对交换对象,如表9.4中第⑤列所示.再利用随机定位的方法,确定这两对配对个体的交叉换位的位置,交叉位分别为4和2.表9.4第⑥列中数字表明交叉点位于该基因座之后,从符号串的左数第4位及第2位开始进行部分基因的交换.即在配对库中选择第l号个体和第2号个体作为配对对象、交叉点为4,如下式左侧所示.从配对个体字符串左数第4位个基因座之后进行交叉运算,用下横线标记,所得的新个体如下式的右侧所示:同样,配对库中3号和4号个体进行配对交叉得到另外两个新个体11011、10000(交叉操作结果见表9.4中第⑦列).这4个新个体形成了新的群体,即新一代.表9.4中第⑨列中数字表明,经过交叉操作之后,在群体中出现了更优的个体(3号),其适应度达到729,远高于交换前的最大适应度576,新群体的平均适应度也由原来的421提高到439.由于本例中的适应度函数也就是目标函数本身,所以函数值也增大了,这说明交换后的新群体正朝着我们所期望的方向发展.本例中取变异概率为0.001,由于群体中总共有20位,于是发生变异的位数为20×0.001=0.02位,这表明群体中没有一位可以变异.反复执行上述的步骤(1)~(6),直到得出满意的最优解.四遗传算法的matlab求解详见附件文件:Ga.m&主程序Best.m%求群体中最大适应值Calfitvalue.m%计算个体的适应值Calobjvalue.m%实现目标函数的计算Crossover.m%实现交叉Decodebinary.m%产生行向量并求和Decodechrom.m%将二进制数转化为十进制数Initpop.m%初始化Mutation.m%变异Selection.m%选择复制求:Y=10*sin(5*x)+7*cos(4*x)最大值。程序运行结果如下图:五遗传算法的特点与发展遗传算法长于全局搜索,它不受搜索空间的限制性假设的约束,不要求连续性,能以很大的概率从离散的、多极值的、
本文标题:90遗传算法
链接地址:https://www.777doc.com/doc-5018032 .html