一、遗传算法执行过程
参照百度百科:
遗传算法是从代表问题可能潜在的解集的一个种群(population)开始的,而一个种群则由经过基因(gene)编码的一定数目的个体(individual)组成。每个个体实际上是染色体(chromosome)带有特征的实体。
染色体作为遗传物质的主要载体,即多个基因的集合,其内部表现(即基因型)是某种基因组合,它决定了个体的形状的外部表现,如黑头发的特征是由染色体中控制这一特征的某种基因组合决定的。因此,在一开始需要实现从表现型到基因型的映射即编码工作。由于仿照基因编码的工作很复杂,我们往往进行简化,如二进制编码。
初代种群产生之后,按照适者生存和优胜劣汰的原理,逐代(generation)演化产生出越来越好的近似解,在每一代,根据问题域中个体的适应度(fitness)大小选择(selection)个体,并借助于自然遗传学的遗传算子(genetic operators)进行组合交叉(crossover)和变异(mutation),产生出代表新的解集的种群。
这个过程将导致种群像自然进化一样的后生代种群比前代更加适应于环境,末代种群中的最优个体经过解码(decoding),可以作为问题近似最优解。
二、相关术语
- 基因型:性状染色体的内部表现
- 表现型:染色体决定的性状的外部表现,或者说根据基因型形成的个体的外部表现。
- 进化:种群逐渐适应生存环境,不断改良。
- 适应度:度量某个物种对于生存环境的适应程度。
- 选择:以一定概率从种群中选择若干个体。
- 复制;细胞分裂的时候,遗传物质DNA通过复制而转移到新产生的细胞中,新细胞就继承了旧细胞的基因。
- 交叉:两个染色体的某一相同位置处的DNA被切断,前后两串分别交叉组合形成两个新的染色体,也称为重组。
- 变异:复制的时候产生某些复制的差错,前后两串产生新的染色体,表现出新的性状。
- 编码:DNA中遗传信息在一个长链上按一定的模式排列。遗传编码可看做表现型到基因型的映射。
- 解码:基因型到表现型的映射。
- 个体:指染色体带有特征的实体。
- 种群:个体的集合。
实现步骤
- 随机产生种群
- 根据策略判断个体的适应度,是否符合优化标准,如果符合,输出最佳个体及最优解,否则进行下一步。
- 根据适应度选择父母,适应度高的个体被选中的概率高。适应度低的个体被淘汰。
- 用父母的染色体按照一定的方式进行交叉,产生子代。
- 对染色体进行变异。
返回步骤2,直到最优解产生。
编码
编码是应用遗传算法时要解决的问题,也是设计遗传算法时的一个关键步骤。编码方法影响到交叉算子、变异算子等遗传算子的运算方法。很大程度决定了遗传进化的效率。
下面介绍几种编码方式。
二进制编码
使用0和1表示信息。一个位就能表示出两种信息量,因此,足够长的二进制染色体便能够表示所有的特征。二进制编码优点如下:
- 编码、解码简单易行。
- 交叉、变异等遗传操作易于实现。
- 符合最小字符集编码的原则
- 利用模式定理对算法进行理论分析。
缺点:
对于一些连续函数的优化问题,由于其随机性使得其局部搜索能力较差,如对于一些高精度的问题(如上题),当解迫近于最优解后,由于其变异后表现型变化很大,不连续,所以会远离最优解,达不到稳定。
浮点编码
二进制编码虽然简单直观,但明显地。但是存在着连续函数离散化时的映射误差。个体长度较短时,可能达不到精度要求,而个体编码长度较长时,虽然能提高精度,但增加了解码的难度,使遗传算法的搜索空间急剧扩大。
所谓浮点法,是指个体的每个基因值用某一范围内的一个浮点数来表示。在浮点数编码方法中,必须保证基因值在给定的区间限制范围内,遗传算法中所使用的交叉、变异等遗传算子也必须保证其运算结果所产生的新个体的基因值也在这个区间限制范围内。如下所示:
6.2-3.8-5.2-7.7-1.7-5.7
浮点数编码方法有下面几个优点:
- 适用于在遗传算法中表示范围较大的数
- 适用于精度要求较高的遗传算法
- 便于较大空间的遗传搜索
- 改善了遗传算法的计算复杂性,提高了运算交率
- 便于遗传算法与经典优化方法的混合使用
- 便于设计针对问题的专门知识的知识型遗传算子
- 便于处理复杂的决策变量约束条件
符号编码
符号编码法是指个体染色体编码串中的基因值取自一个无数值含义、而只有代码含义的符号集如{A,B,C…}。
符号编码的主要优点是:
- 符合有意义积术块编码原则
- 便于在遗传算法中利用所求解问题的专门知识
- 便于遗传算法与相关近似算法之间的混合使用。
适应度
适应度函数也称为评价函数,根据目标函数确定的用于区分群体中个体好坏的标准。
评价个体适应度的一般过称为:
- 对个体编码串进行解码处理后,可得到个体的表现型。
- 由个体的表现型可计算出对应个体的目标函数值。
- 根据最优化问题的类型,由目标函数值按一定的转换规则求出个体 的适应度。
选择函数
在遗传算法中的选择操作就是用来确定如何从父代群体中按某种方法 选择哪些个体,以便遗传到下一代群体。选择操作用来确定重组或者交叉个体,以及被选个体将产生多少个子代个体。
几种常见的选择算子:
- 轮盘赌选择:是一种回放式随机采样的过程,每个个体进入下一代的概率等于它的适应度值与整个种群中个体适应度值和的比例。
- 随机竞争选择:每次按照轮盘赌选择一对个体,然后让这两个个体进行竞争,适应度高的被选中,如此反复,直到选满为止。
- 最佳保留选择:首先按照轮盘赌选择方法执行遗传算法的选择操作,然后将当前群体中适应度最高的个体结构完整地复制到下一代群体中。
- 无回放随机选择:根据每个个体在下一代群体中的生存期望来进行随机选择运算。方法如下:
(1) 计算群体中每个个体在下一代群体中的生存期望数目N。
(2) 若某一个体被选中参与交叉运算,则它在下一代中的生存期望数目减去0.5,若某一个体未 被选中参与交叉运算,则它在下一代中的生存期望数目减去1.0。
(3) 随着选择过程的进行,若某一个体的生存期望数目小于0时,则该个体就不再有机会被选中。 - 确定式选择:按照一种确定的方式来进行选择操作。具体操作过程如下:
(1) 计算群体中各个个体在下一代群体中的期望生存数目N。
(2) 用N的整数部分确定各个对应个体在下一代群体中的生存数目。
(3) 用N的小数部分对个体进行降序排列,顺序取前M个个体加入到下一代群体中。至此可完全确定出下一代群体中M个个体。 - 无回放余数随机选择:可确保适应度比平均适应度大的一些个体能够被遗传到下一代群体中,因而选择误差比较小。
- 均匀排序:对群体中的所有个体按期适应度大小进行排序,基于这个排序来分配各个个体被选中的概率。
- 最佳保存策略:当前群体中适应度最高的个体不参与交叉运算和变异运算,而是用它来代替掉本代群体中经过交叉、变异等操作后所产生的适应度最低的个体。
- 随机联赛选择:每次选取几个个体中适应度最高的一个个体遗传到下一代群体中。
- 排挤选择:新生成的子代将代替或排挤相似的旧父代个体,提高群体的多样性。
交叉crossover
遗传算法的交叉操作,是指两个相互配对的染色体按照某种方式相互交换其部分基因,从而形成两个新的个体。
适用于二进制编码个体或浮点数编码个体的交叉算子:
1.单点交叉(One-point Crossover):指在个体编码串中只随机设置一个交叉点,然后再该点相互交换两个配对个体的部分染色体。
2.两点交叉与多点交叉:
(1) 两点交叉(Two-point Crossover):在个体编码串中随机设置了两个交叉点,然后再进行部分基因交换。
(2) 多点交叉(Multi-point Crossover)
3.均匀交叉(也称一致交叉,Uniform Crossover):两个配对个体的每个基因座上的基因都以相同的交叉概率进行交换,从而形成两个新个体。
4.算术交叉(Arithmetic Crossover):由两个个体的线性组合而产生出两个新的个体。该操作对象一般是由浮点数编码表示的个体。
变异–基因突变
以下变异算子适用于二进制编码和浮点数编码的个体:
1.基本位变异(Simple Mutation):对个体编码串中以变异概率、随机指定的某一位或某几位仅因座上的值做变异运算。
2.均匀变异(Uniform Mutation):分别用符合某一范围内均匀分布的随机数,以某一较小的概率来替换个体编码串中各个基因座上的原有基因值。(特别适用于在算法的初级运行阶段)
3.边界变异(Boundary Mutation):随机的取基因座上的两个对应边界基因值之一去替代原有基因值。特别适用于最优点位于或接近于可行解的边界时的一类问题。
4.非均匀变异:对原有的基因值做一随机扰动,以扰动后的结果作为变异后的新基因值。对每个基因座都以相同的概率进行变异运算之后,相当于整个解向量在解空间中作了一次轻微的变动。
5.高斯近似变异:进行变异操作时用符号均值为P的平均值,方差为P**2的正态分布的一个随机数来替换原有的基因值