遗传算法

   遗传算法…

1. 基本思想

   遗传算法(Genetic Algorithm, GA)是模拟生物在自然环境中的遗传和进化的过程而形成的自适应全局优化搜索算法。它借用达尔文的进化论和孟德尔与摩根的遗传学学说,通过自然选择,遗传和变异等机制,实现算法的求解。

2. 遗传算法理论

2.1 生物学基础

  • 自然选择: 生存斗争包括种内斗争、种间斗争以及与环境之间的斗争。在生存斗争中,具有有利变异的个体容易存活下来,并且有更多机会将有利变异遗传给货代;而具有不利变异的个体则容易被淘汰。
  • 遗传:指父代与子代之间,在性状上存在相似的现象。通过基因复制基因交叉,使得性状的遗传得到选择和控制,使得有利的性状遗传给后代。生物的遗传特性,使生物界的物种能够保持相对的稳定。
  • 变异: 指父代与子代之间,以及子代与子代之间,在性状上存在差异的现象。通过基因重组基因变异染色体结构和数目上的变化,可以发生变异,使得生物的性状发生改变,从而适应新的环境而不断地向前发展。生物的变异特性,使生物个体产生新的性状,以至于成为新的物种,推动了生物的进化和发展。
  • 基因:具有遗传效应的DNA片段,存储着遗传信息。
  • 染色体:遗传物质的主要载体。

2.2 理论基础

2.2.1 模式定理

   模式定理:在遗传算法选择、交叉和变异算子的作用下,具有低阶、短定义距,并且其平均适应度高于群体平均适应度的模式在子代中将呈现指数级增长。
   模式: 描述种群中在位串(染色体)的某些确定位置上具有相似性的位串子集的相似性模板。长度为L的位串,其具有的模式数为:$$ 2^L $$
   模式阶:模式H中,确定位置的个数。如模式011*1的阶为4,而0*****的阶为1。一个模式的阶越高,其样本数就越少,确定性就越高。
   定义距:在模式H中,第一个确定位置和最后一个确定位置之间的距离。

   引入模式后,遗传算法的本质是对模式所进行的一系列运算。即通过选择操作将当前群体中的优良模式遗传到下一代群体中;通过交叉操作进行模式的重组;通过变异操作进行模式的突变。通过这些操作,较差的模式被淘汰,而一些较好的模式逐步被遗传和进化,最终就可以得到问题的最优解。
   模式定理说明:在遗传进化过程中,具有某种结构特征(高适应度、低阶和短定义距)的模式的样本数目将呈指数级增长。

2.2.2 积木块假设

   积木块:具有低价、短定义距以及高平均适应度的模式。
   积木块假设:个体的积木块通过选择、交叉、变异等遗传算子的作用,能够相互结合在一起没形成高阶、长距、高平均适应度的个体编码串。

3. 基本概念

   遗传学与遗传算法之间的对应关系:

群体 –> 可行解集,即决策向量X组成的解空间。
个体 –> 可行解,即决策向量X。
染色体 –> 多个基因排列组成染色体。在遗传算法中,个体X即染色体X。
基因 –> 决策向量X的分量,以不同的编码方式表现出来,常见编码方式:二进制编码,实数编码(十进制编码)等。
个体基因型 –> 某种编码方式下,个体编码的排列形式。
个体表现型 –> 与个体编码所对应的X值。
个体适应度 –> 与个体表现型(X值)所对应的目标函数值相关联。个体X越优,适应度越大。
选择 –> 选择操作
交叉 –> 交叉操作
变异 –> 变异操作

注意:遗传操作是选择操作、交叉操作和变异操作的统称。

4. 遗传算法流程

   在遗传算法中,n维决策变量$$ X = {x_1, x_2, …, x_n} $$ 其中,X的每一个分量被看作为一个遗传基因,X就可当作是由n个遗传基因排列组成的一个染色体X。每一个分量(即遗传基因)的所有可能的取值被称为等位基因

交叉:将群体P(K)中选中的各个个体随机搭配,对每一对个体,以某一概率(交叉概率)交换它们之间的部分染色体。

变异:对群体中的每个个体,以某一概率(变异概率)将一个或某一些基因座上的基因值改变为其他的等位基因值。常见的变异方式有:二进制变异、实值变异等。

   基本流程如下:

  1. 初始化。设置最大进化代数G,随机产生初始群体。
  2. 个体适应度评估
  3. 选择操作。根据个体的适应度,按照一定的规则或方法,从第K代群体P(K)中选择一些优良的个体传到下一代群体P(K+1)中。常见的方法有:轮盘赌。
  4. 交叉操作。首先,从交配池中选出要交配的一对个体;然后,根据位串长度L,对要交配的一对个体,随机选择[1,L]中的一个或多个整数M作为交叉位置;最后,根据交叉概率进行交叉操作,配对的个体在交叉位置处,相互交换各自的部分基因,从而产生一对新的个体。
  5. 变异操作。首先,将种群中所有个体,根据变异概率判断是否进行变异;然后,对进行变异的个体,随机选择其变异位及逆行变异。
  6. 终止条件判断。若满足,则结束程序;否则,跳转到2。

5. 代码示例 – Python

有时间再加…

有何不可 wechat
Subscribe to my blog by scanning my wechat account~
书山有路勤为径,学海无涯苦作舟~