基因交叉,或者基因重组,就是把两个父体部分结构加以替换,生成新的个体的操作,习惯上对实数编码的操作叫做重组(Recombination),对二进制编码的操作称为交叉(crossover)1

  1. 重组算法(Recombination)
    实值重组产生子个体一般是用下边这个算法:
    子个体=父个体1 + a × ( 父个体2 - 父个体1 )
    这里a是一个比例因子,可以由[ -d, 1+d] 上边服从均匀分布的随机数产生。
    不同的重组算法,a的取值是不同的,一般来讲,d=0.25是一个比较好的选择。
  2. 交叉算子
    如上文遗传算法中的数据结构中所讲,基因的二进制编码有直接编码(Normal)和Gray编码之分,以下所说算法,均适用于这两种算法。

假设基因的二进制编码长度为N,那么这些编码之间有N-1个空隙,可供交叉使用。二进制交叉算法就是如何选择空隙,选择多少个空隙。
以下将各走极端的选择一个空隙交叉的单点交叉算法,和选择N-1个空隙进行交叉的洗牌交叉算子大致说一下。

(1) 单点交叉
在二进制编码中,随机选择一个点,以这个点为界限,相互交换变量。

父个体1 011111110000000000
父个体2 000000001111111111
如粗体前边位置为所选择的交叉点,那么生成的子个体为:
子个体1 011111111111111111
子个体2 000000000000000000

(2)洗牌交叉
洗牌交叉就是,将一个父基因取一半,再上来自另外一个父基因的一半,构成一个新的子基因。

(3)模拟二进制交叉(SBX)2

交叉算子python 交叉算子的选择原理_随机数

(4)Partial-Mapped Crossover (PMX)

(5)Order Crossover (OX)

(6)Position-based Crossover (PBX)

(7)Order-Based Crossover (OBX)

(8)Cycle Crossover (CX)

(9)Subtour Exchange Crossover

(10)轮盘赌

(11)DE

交叉算子python 交叉算子的选择原理_随机数_02

  1. 另外的
    (1)群体中的交叉算法
    将经过选择考验的个体放入一个群体,当放入的个体数量达到要求后,对里边的个体进行两两交叉。

(2) 交叉函数定义
种群的交叉只涉及一个交叉主体,而基因/个体的交叉涉及两个交叉主体。