转自博客:https://blog.csdn.net/u010945683/article/details/40987331
遗传算法(Genetic Algorithm)是一类借鉴生物界的进化规律(适者生存,优胜劣汰遗传机制)演化而来的随机化搜索方法。它是由美国的J.Holland教授1975年首先提出,其主要特点是直接对结构对象进行操作,不存在求导和函数连续性的限定;具有内在的隐并行性和更好的全局寻优能力;采用概率化的寻优方法,能自动获取和指导优化的搜索空间,自适应地调整搜索方向,不需要确定的规则。遗传算法的这些性质,已被人们广泛地应用于组合优化、机器学习、信号处理、自适应控制和人工生命等领域。它是现代有关智能计算中的关键技术。
定义遗传算法的基本控制参数
1.种群规模 N
2.最大换代数
3.交叉率 Pc (一般为0.4 – 0.99)
4.变异率 Pm (一般为0.0001 – 0.001)
5.染色体中基因长度 L
遗传算法主要运算过程构成
1.选择-复制
2.交叉
3.变异
遗传算法的流程:
步1.在搜索空间U上定义一个适应度函数,给定种群规模N,交叉率Pc,变异率Pm。
步2.生成初始种群S0。
步3.计算适应度f。
步4.若终止条件满足,则退出;否则转步5。
步5.选择,复制N次。生成种群S1。
步6:交叉,随机确定C个染色体,生成种群S2。
步7:变异,变异次数m=Pm * N * L,生成种群S3;然后再次转到步3。
遗传算法利用了生物进化和遗传的思想。它不同于枚举法、启发式算法、搜索算法等传统的优化方法,具有如下特点 :
a)自组织、自适应和智能性。遗传算法削除了算法设计中的一个最大障碍,即需要事先描述问题的全部特点,并说明针对问题 的不同特点算法应采取的措施。因此,它可用来解决复杂的非结构化 问题 , 具有很强的鲁棒性 。
b)直接处理的对象是参 数编码集 , 而不是问题参数本身。
c)易于并行化。
遗传算法中几个需要解决的问题 *****
(1)编码表示:(即如何对对象编码,以便于计算机识别)
在许多问题求解中,编码是遗传算法中首要解决的问题,对算法的性能有很重要的影响。Holland提出的二进制编码是遗传算法中最常用的一种编码方法,它采用最小字符编码原则,编/解码操作简单易行,利于交叉、变异操作的实现,也可以采用模式定理对算法进行理论分析。但二进制编码用于多维、高精度数值问题优化时,不能很好地克服连续函数离散化时的映射误差;不能直接反映问题的固有结构,精度不高,并且个体长度大、占用内存多 。针对二进制编码存在的不足,人们提出了多种改进方法,比较典型的有以下几种:
格雷码编码
为了克服二进制编码在连续函数离散化时存在的不足,人们提出了用格雷 码进行编码的方法,它是二进制编码的变形。假设有一个二进制编码为X=XmXm-1…X2 X1 , 其对应的格雷码为Y=Ym Ym-1…Y2Y1,
实数编码
该方法适合于遗传算法中表示范围较大的数,使遗传算法更接近问题空间,避免了编码和解码的过程。它便于较大空间的遗传搜索,提高了遗传算法的精度要;便于设计专门问题的遗传算子;便于算法与经典优化方法的混合作用,改善了遗传算法的计算复杂性,提高了运算效率。
十进制编码
该方法利用十进制编码控制参数,缓解了“组合爆炸”和遗传算法的早熟收敛问题。
非数值编码
染色体编码串中的基因值取一个仅有代码含义而无数值含义的符号集,这些符号可以是数字也可以是字符。非数值编码的优点是在遗传算法中可以利用所求问题的专门知识及相关算法。对于非数值编码,问题的解和染色体的编码要注意染色体的可行性 、染色体的合法性和映射的惟一性。
(2)遗传算 子
在遗传算法中通过一系列算子来决定后代,算子对当前群体中选定的成员进行重组和变异 。
1)选择算子
选择操作通过适应度选择优质个体而抛弃劣质个体,体现了“适者生存”的原理 。Potts等人概括 了23种选择方法。常见的选择操作主要有以下几种 :
a)轮盘赌选择 。选择某假设的概率是通过这个假设的适应度与当前群体中其他成员的适应度的比值而得到。此方法是基于概率选择的,存在统计误差,因此可以结合最优保存策略以保证当前适应度最优的个体能够进化到下一代而不被遗传操作的随机性破坏,保证算法的收敛性。
b)排序选择。对个体适应值取正值或负值以及个体适应度之间的数值差异程度无特殊要求 , 对群体中的所有个体按其适应度大小进行排序,根据排序来分配各个体被选中的概率。
c)最优个体保存。父代群体中的最优个体直接进入子代群体中。该方法可保证在遗传过程中所得到的个体不会被交叉和变异操作所破坏,它是遗传算法收敛性的一个重要保证条件 ;它也容易使得局部最优个体不易被淘汰,从而使算法的全局搜索能力变强。
d)随机联赛选择。每次选取N个个体中适应度最高的个体遗传到下一代 群体中。具体操作如下:
从群体中随机选取N个个体进行适应度大小比较,将其中适应度最高的个体遗传到下一代群体中;将上述过程重复执行M(为群体大小)次,则可得到下一代群体。
2)交叉算子
交叉是指对两个相互交叉的染色体按某种方式相互交换其部分基因,从而形成两个新的个体。它是产生新个体的主要方法,决定了遗传算法的全局搜索能力,在遗传算法中起关键作 用。Potts等人概括了17种交叉方法。几种常用的适用于 二进制编码或实数编码方式的交叉算子如下 :
a)单点交叉。
在个体编码串中随机设置一个交叉点后在该点相互交换两个配对个体的部分基因 。
b)两点交叉。
在相互配对的两个个体编码串中随机设置两个交叉点,并交换两个交叉点之间的部分基因 。
c)均匀交叉。
两个相互配对个体的每一位基因都以相同的概率进行交换,从而形成两个新个体。
d)算术交叉。
由两个个体的线性组合而产生出新的个体。
3)变异算子
变异是指将个体染色体编码串中的某些基因座上的基因值,用该基因座的其他等位基因来替换,从而形成一个新的个体 。它是产生 新个体的辅助方法,决定了遗传算法的局部搜索能力。变异算子与交叉算子相互配合,可以共同完成对搜索空间的全局搜索和局部搜索 , 从而使得遗传算法以良好的搜索性 能完成最优化问题的寻优过程。在遗传算法中使用变异算子主要有以下两个目的:改善遗传算法的局部搜索能力;维持群体的多样性,防止出 现早熟现象。下面是几种常用的变异操作 :
a)基本位变异。对个体编码串以变异概率Pm随机指定某一位或某几位基因进行变异操作。
b)均匀变异(一致变异 )。分别用符合某一范围内均匀分布的随机数,以某一较小的概率来替换个体编码串中各个基因座上的原有基因值。均匀变异操作特别适合应用于遗传算法
的初期运行阶段,它使得搜索点可以在整个搜索空间内自由地移动,从而可以增加群体的 多样性,使算法能够处理更多的模式。
c)二元变异。 需要两条染色体参与,通过二元变异操作后生成两条新个体中的各个基因 分别取原染色体对应基因值的同或/异或。它改变了传统的变异方式,有效地克服了早熟
收敛,提高了遗传算法的优化速度。
d)高斯变异。在进行变异时用一个均值为μ、方差为σ2的正态分布的一个随机数来替换原有基因值。其操作过程与均匀变异类似。
参数选择
遗传算法的参数选择一般包括群体规模、收敛判据、杂交概率和变异概率等。参数选择 关系到遗传算法的精度、可靠性和计算时间等诸多因素,并且影响到结果的质量和系统性 能。因此,在遗传算法中参数选择的研究非常重要。在标准的遗传算 法中经常采用经验对参数进行估计,这将带来很大的盲目性从而影响算法的全局最优性和收敛性,人们意识到这些参数应该随着遗传进化而自适应变化。基于这一观点,Davis提出自适应算子概率方法, 即用自适应机制把算子概率与算子产生的个体表示适应性相结合,高适应性值被分配高算子概率。 Whitley等人提出了自适应突变策略与一对父串间的Hamming距离成反比的观点 ,结果显示能有效地保持基因的多样性。张良杰等人通过引入i位改进子空间概念,采用模糊推理技术确定选取突变概率的一般性原则。用模糊规则对选择概率和变异概率进行控制 ,在线改变其值。相应的算例表明,这种方法有较好的性能 。
虽然遗传算法在许多领域中都有成功的应用,但其自身也存在不足,如局部搜索能力差、存在未成熟收敛和随机游走等现象,导致算法的收敛性能差,需要很长时间才能找到最优解等问题 。
参考文献: 遗传算法研究综述,葛继科,邱玉辉,吴春明,蒲国林 计算机应用研究,第25卷第10期2008年10月
———————
作者:sam-X
来源:CSDN
原文:https://blog.csdn.net/u010945683/article/details/40987331