遗传算法的步骤
❶ 遗传算法的主要步骤
为了使用遗传算法来解决优化问题,准备工作分为以下四步[56,57,61]。
7.4.1 确定问题的潜在解的遗传表示方案
在基本的遗传算法中,表示方案是把问题的搜索空间中每个可能的点表示为确定长度的特征串(通常是二进制串)。表示方案的确定需要选择串长l和字母表规模k。在染色体串和问题的搜索空间中的点之间选择映射有时容易实现,有时又非常困难。选择一个便于遗传算法求解问题的表示方案经常需要对问题有深入的了解。
7.4.2 确定适应值的度量
适应值度量为群体中每个可能的确定长度的特征串指定一个适应值,它经常是问题本身所具有的。适应值度量必须有能力计算搜索空间中每个确定长度的特征串的适应值。
7.4.3 确定控制该算法的参数和变量
控制遗传算法的主要参数有群体规模Pop-Size、算法执行的最大代数N-Gen、交叉概率Pc、变异概率Pm和选择策略R等参数。
(1)群体规模Pop-Size。群体规模影响到遗传算法的最终性能和效率。当规模太小时,由于群体对大部分超平面只给出了不充分的样本量,所以得到的结果一般不佳。大的群体更有希望包含出自大量超平面的代表,从而可以阻止过早收敛到局部最优解;然而群体越大,每一代需要的计算量也就越多,这有可能导致一个无法接受的慢收敛率。
(2)交叉率Pc。交叉率控制交叉算子应用的频率,在每代新的群体中,有Pc·Pop-Size个串实行交叉。交叉率越高,群体中串的更新就越快。如果交叉率过高,相对选择能够产生的改进而言,高性能的串被破坏得更快。如果交叉率过低,搜索会由于太小的探查率而可能停滞不前。
(3)变异率Pm。变异是增加群体多样性的搜索算子,每次选择之后,新的群体中的每个串的每一位以相等的变异率进行随机改变。对于M进制串,就是相应的位从1变为0或0变为1。从而每代大约发生Pm·Pop-Size·L次变异,其中L为串长。一个低水平的变异率足以防止整个群体中任一给定位保持永远收敛到单一的值。高水平的变异率产生的实质是随机搜索。
比起选择和交叉,变异在遗传算法中是次要的,它在恢复群体中失去的多样性方面具有潜在的作用。例如,在遗传算法执行的开始阶段,串中一个特定位上的值1可能与好的性能紧密联系,也就是说从搜索空间中某些初始随机点开始,在那个位上的值1可能一致地产生适应性度量好的值。因为越好的适应值与串中那个位上的值1相联系,复制作用就越会使群体的遗传多样性损失。当达到一定程度时,值0会从整个群体中的那个位上消失,然而全局最优解可能在串中那个位上是0。一旦搜索范围缩小到实际包含全局最优解的那部分搜索空间,在那个位上的值0就可能正好是达到全局最优解所需的。这仅仅是一种说明搜索空间是非线性的方式,这种情形不是假定的,因为实际上所有我们感兴趣的问题都是非线性的。变异作用提供了一个恢复遗传多样性的损失的方法。
(4)选择策略R。有两种选择策略。一是利用纯选择,即当前群体中每个点复制的次数比与点的性能值成比例。二是利用最优选择,即首先执行纯选择,且具有最好性能的点总是保留到下一代。在缺少最优选择的情况下,由于采样误差、交叉和变异,最好性能的点可能会丢失。
通过指定各个参数Pop-Size、Pc、Pm和R的值,可以表示一个特定的遗传算法。
7.4.4 确定指定结果的方法和停止运行的准则
当遗传的代数达到最大允许代数时,就可以停止算法的执行,并指定执行中得到的最好结果作为算法的结果。
基本的遗传算法
1)随机产生一个由固定长度字符串组成的初始群体。
2)对于字符串群体,迭代地执行下述步骤,直到选择标准被满足为止。
①计算群体中的每个个体字符串的适应值;
②实施下列三种操作(至少前两种)来产生新的群体,操作对象的选取基于与适应度成比例的概率。
选择:把现有的个体串按适应值复制到新的群体中。
交叉:通过遗传重组随机选择两个现有的子串进行遗传重组,产生两个新的串。
变异:将现有串中某一位的字符随机变异产生一个新串。
3)把在后代中出现的最好适应值的个体串指定为遗传算法运行的结果。这一结果可以是问题的解(或近似解)。
基本的遗传算法流程图如图7-1所示。
❷ 遗传算法理解
遗传算法是一种进化算法,进化是什么哪?就是种群逐渐适应生存环境,种群中个体不断得到改良的过程。
遗传算法是一种对生物遗传的模拟、在算法中,初始化一个种群,种群中的每个染色体个体都是一种解决方案,我们通过适应性fitness来衡量这个解决方案的好坏。并对它们进行选择、变异、交叉的操作,找到最优的解决方案。
总结一下遗传算法的基本的步骤:
1.初始化一个种群,并评估每条染色体所对应个体的适应度。
2.选择、交叉、变异,产生新的种群
3.再评估每个个体的适应值,如果适应值达到要求或者达到最大循环次数,否则重复2,不断产生新种群。
知道了GA的大致流程之后、来具体分析一下细节,怎么实现吧
我们知道遗传算法起源于生物遗传,因此在种群中每个个体就是一个染色体,那如何对染色体进行编码,让它表示我们的解决方案那(就是把现实要优化的参数用编码表示成一个染色体)。这里就遇到了一个编码、解码的问题,我们将需要优化的目标编码成染色体,然后再解码为我们可以用来计算fitness的解;
一般在进行参数优化时,一般有两种方式:实数编码、二进制编码
实数编码:基因直接用实数进行表示,这样的表示方法比较简单,不用特意解码了,但是在交叉和变异时,容易过早收敛,陷入局部最优。
二进制编码:将基因用二进制的形式表示,将参数的值转化为二进制形式,这样交叉、变异时更好操作,多样性好,但是占用的存储空间大,需要解码。
染色体就称为个体。对于一次实验,个体就是需要优化参数的一种解、许多这样的个体就构成了种群。
在面对群体中那么多个体时,如何判断个体的好坏呢,就是通过适应值函数了,将解带入适应值函数,适应值越大、解越好。
在遗传算法中,我们怎么使得里面的个体变得越来越优秀呢?
核心思想就是:选择优秀的、淘汰不好的,并且为了生成更好的解,我们要尝试交叉、变异,带来新的解。
选择就是从当前的种群中选择出比较好的个体、淘汰不好的个体
常见的选择方法有:轮盘赌选择、锦标赛选择、最佳保留选择等等
轮盘赌选择就是根据每个个体fitness和种群所有fitness之和比较,确定每个个体被选中的概率,然后进行n次选择,选择n个个体构成新种群,是一种放回抽样的方式。
锦标赛就是每次从种群中选择m个个体,选择最优的,放入新种群,重复选择,直到新种群中个体数目达到n。
最佳保留选择就是在轮盘赌的基础上,将fitness个体先加进新种群,因为轮盘赌是一种概率模型,可能存在最优个体没有进入新种群的情况。
在选择之后,就要考虑产生新的、更优秀的解,为种群带来新的血液。遗传算法的思路是交叉两个优秀的解,往往get好的解。
交叉通过在经过选择的种群中,随机选择一对父母,将它们的染色体进行交叉,生成新的个体,替代原来的解。
常用的交叉方法有:单点交叉、多点交叉等等。
交叉就像生物里面,染色体交换基因一样的~但是并不是种群中所有个体都进行交叉的,实现时可以,设置一个交叉率和交叉概率,随机选择种群中两个体、随机一个数,小于交叉率就进行交叉操作,并根据交叉概率判断交叉的程度,从而生成新个体,反之就保留这两个体。
变异也是一种产生新个体的方式,通过改变个体上基因,期望产生更好的解。比如在以二进制编码的个体上,将里面的0、1进行等位变化啥的,就是0变1、1变0这样。同样也要考虑变异率、变异产生的新解是不可控的,可能很好,也可能很坏,不能像交叉一样,确保一定的效果,所以往往变异率设置的比较小。
❸ 用matlab遗传算法分析运动方式
(1)首先计算出所有个体的适应度总和Σfi。
(2)其次计算出每个个体的相对适应度大小fi/Σfi,类似于softmax。
(3)再产生一个0到1之间的随机数,依据随机数出现在上述哪个概率区域内来确定各个个体被选中的次数。
(4)交叉(交配)运算。该步骤是遗传算法中产生新的个体的主要操作过程,它用一定的交配概率阈值(pc,一般是0.4到0.99)来控制是否采取单点交叉,多点交叉等方式生成新的交叉个体。
具体步骤如下: (1)先对群体随机配对。(2)再随机设定交叉点的位置。 (3)再互换配对染色体间的部分基因。
(5)变异运算。该步骤是产生新的个体的另一种操作。一般先随机产生变异点,再根据变异概率阈值(pm,一般是0.0001到0.1)将变异点的原有基因取反。
❹ 如何用遗传算法实现多变量的最优化问题
将多个变量的数值编码编排进去,进行组合,只需要增长基因个体的燃搭长度,但是要明确每个变量具体的位置,然后让每个变量转化成二进制的等长编码,组合在一起,就可以来运算了。
❺ 变异操作是维持全体多样性的关键正确吗
正确。首先用最简单的例子来介绍遗传算法
例:用遗传算法求y = x在[-1, 1]上的最小值。
步骤一:选择二进制编码,及将[-1, 1]上的数向[0000000000 1111111111]映射,例将-1映射为0000000000, 1映射为1111111111。
步骤二:初始化种群。随意生成50个10位二进制数作为初始种群。
步骤三:适应度计算。由于我们要求最小值,所以我们将适应度函数设租迹扰为弊旦F = 1 / y。,然后计算初始种群的个体适应度。
步骤四:选择操作。常见的选择算子有轮盘赌法,即基于适应度比例的选择策略,个体i被选中的概率为
步骤五:交叉操作。交叉操作是指从种群中随机选择两个个体,通过两个个体的交换组合得到新的个体,例两个个体为1010101010和0101010101,交换其后两位得到1010101001和0101010110。
步骤六:变异操作。变异操作主要目的是维持种群多样性。例:将 1010101010变异成1010101011。
重复步骤三到六,迭代500次,最后种群中的适应度最高的个体即为得到的最优解。
遗传算法的不足
全局搜索能力极强而局部寻优能力较差。研究发现,遗传算法可以用几极快的速度达到最优解的90%左右,但要达到真正的最优解则需要花费很长的时间。
易出现早熟收敛现象。当种群规模较小,如果在进化初期出现适应度较高的个体,由于个别优势个体繁殖过快,往往会破坏群体的多样性,从而出现早熟收敛现象。
遗传算法的改进
为改善遗传算法的局部搜索能力,在变异操作后加上进化逆转操作。例随机变换一个个体中的两个部分交换,如果这种操州告作使得适应度增强,则保留,否则不变。
使用精英策略,子代种群中的最优个体永远不会比父代的个体差。父代中的精英会原封不动地直接传给子代,而不经过交叉或变异操作。
多种群遗传算法,多个种群同时进化,然后加入移民算子,将个体在种群之间交换。
量子遗传算法,每一个二进制位有两个纠缠的量子表示,只有当测量的时候才知道其真实值。然后用量子旋转操作代替选择、交叉和变异操作。
作者:小鹏不会飞
链接:https://juejin.cn/post/6861568236341723149
来源:稀土掘金
着作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。