借鉴生物进化论,遗传算法将要解决的问题模拟成一个生物进化的过程,通过选择、交叉、变异等操作产生下一代的解,并逐步淘汰掉适应度函数值低的解,增加适应度函数值高的解。这样进化N代后就很有可能会进化出适应度函数值很高的个体。遗传算法的实现有6个主要因素:参数的编码、初始种群的设定、适应度函数的设计、遗传操作、算法控制参数的设定、约束条件的处理。
遗传算法的基本步骤为:首先对染色体编码与解码,再初始化染色体种群,然后计算个体适应值,若满足终止条件就输出最优解;否则,检测评估遗传算子(选择运算使用比例选择算子、交叉运算使用单点交叉算子、变异运算使用基本位变异算子或者均匀变异算子) ,再次计算适应值,依次迭代。
编码 (Coding and Decoding)
编码就是把一个问题的可行解从其解空间转换到遗传算法所能处理的搜索空间的转换方法。
主要的编码方法有:二进制编码、Gray编码(格雷码)、浮点数编码、多参数级联编码、多参数交叉编码。
最简单的一种编码方式是二进制编码,即将问题的解编码成二进制位数组的形式。它使遗传操作易于实现,其算法的处理模式最多,也易于生物遗传解释;但是其缺点之一是可能有较大Hamming距离(海明悬崖:某些相邻整数的二进制代码间有很大的海明距离,使得交叉和变异都难以跨越),降低遗传算子的搜索速率。编码的评估策略:完备性、健全性、非冗余性。
适应度函数
适应度函数也称评价函数,是根据目标函数确定的用于区分群体中个体好坏的标准,总是非负的,任何情况下都希望其值越大越好。
在选择操作中,会出现两个成为遗传算法欺骗的问题。一是过早收敛:一些超常个体因竞争力突出,而控制选择过程,影响到算法的全局优化性能。二是停滞现象:算法趋于收敛时,由于种群中个体适应度差异较小,继续优化的潜能降低,可能获得某个局部最优解。
适应度函数的设计主要满足以下条件:单值、连续、非负、最大化、合理、一致性、计算量小、通用性强。
在遗传算法的不同阶段,还需要对个体适应度进行适当的扩大或缩小,成为适应度的尺度变换,主要有三种:线性变换、幂函数变换、指数变换。
选择
选择是在群体中选择生命力强的个体产生新的群体的过程。根据每个个体的适应度值大小选择,适应度较高的个体被遗传到下一代群体的概率较大。这样使得群体中个体的适应度值接近最优解。
常用的选择算子:轮盘赌选择(Roulette Wheel Selection,又称比例选择算子)、随机竞争选择(Stochastic Tournament)、锦标赛选择方法(tournament selection model)、最佳个体保存、无回放随机选择、确定式选择、无回放余数随机选择、均匀选择、最优保存策略、随机联赛选择、排挤选择(小生境常用)。
交叉
交叉是按较大的概率从群体中选择两个个体,交换两个个体的某个或某些位。交叉运算产生的子代继承了父代的基本特征,其设计包括两个主要内容:确定交叉点位置、如何进行部分基因的交换。
几种适合二进制编码和浮点数编码个体的交叉算子:一点交叉、两点交叉与多点交叉、均匀交叉、算术交叉。
交叉算法是产生新个体的主要算法,它决定了遗传算法的全局搜索能力。
变异
变异运算,是指将个体染色体编码串中的某些基因座上的基因值用该基因座的其他等位基因来替换,从而形成新的个体。其本身是一种随机算法,只是产生新个体的辅助算法,它决定了遗传算法的局部搜索能力。
整数编码的变异方法:位点变异、逆转变异、插入变异、互换变异、移动变异、自适应变异。
实数编码的变异方法:均匀性变异、正态性变异、非一致性变异、自适应变异。
遗传算法的优化
精英主义(Elitist Strategy)选择:是基本遗传算法的一种优化。为了防止进化过程中产生的最优解被交叉和变异所破坏,可以将每一代中的最优解原封不动的复制到下一代中。
插入操作:可在3个基本操作的基础上增加一个插入操作。插入操作将染色体中的某个随机的片段移位到另一个随机的位置。
遗传算法的改进算法
双倍体遗传算法:采用隐性和显性两个染色体同时进行进化,且显性遗传,来延长有用基因的寿命,提高算法的收敛能力,变异概率低的情况下也能保持一定水平的多样性。
双种群遗传算法:两个种群同时进化,并交换种群之间优秀个体所携带的遗传信息,以打破种群内的平衡态达到更高的平衡态,有利于算法跳出局部最优。
自适应遗传算法:通过交叉概率和变异概率随适应度的自动改变来避免出现局部最优解或保护优良个体。
总结自以下博文
遗传算法的基本原理与方法--笔记<转> - yi ming - 博客园 https://www.cnblogs.com/yi-ming/p/4115284.html
遗传算法入门 - 苍梧 - 博客园 https://www.cnblogs.com/heaad/archive/2010/12/23/1914725.html
遗传算法学习心得 - Victoria520 - 博客园 https://www.cnblogs.com/victoria/archive/2010/09/18/GA.html