基因交叉,或者基因重组,就是把两个父体部分结构加以替换,生成新的个体的操作,习惯上对实数编码的操作叫做重组(Recombination),对二进制编码的操作称为交叉(crossover)1。
- 重组算法(Recombination)
实值重组产生子个体一般是用下边这个算法:
子个体=父个体1 + a × ( 父个体2 - 父个体1 )
这里a是一个比例因子,可以由[ -d, 1+d] 上边服从均匀分布的随机数产生。
不同的重组算法,a的取值是不同的,一般来讲,d=0.25是一个比较好的选择。 - 交叉算子
如上文遗传算法中的数据结构中所讲,基因的二进制编码有直接编码(Normal)和Gray编码之分,以下所说算法,均适用于这两种算法。
假设基因的二进制编码长度为N,那么这些编码之间有N-1个空隙,可供交叉使用。二进制交叉算法就是如何选择空隙,选择多少个空隙。
以下将各走极端的选择一个空隙交叉的单点交叉算法,和选择N-1个空隙进行交叉的洗牌交叉算子大致说一下。
(1) 单点交叉
在二进制编码中,随机选择一个点,以这个点为界限,相互交换变量。
如
父个体1 011111110000000000
父个体2 000000001111111111
如粗体前边位置为所选择的交叉点,那么生成的子个体为:
子个体1 011111111111111111
子个体2 000000000000000000
(2)洗牌交叉
洗牌交叉就是,将一个父基因取一半,再上来自另外一个父基因的一半,构成一个新的子基因。
(3)模拟二进制交叉(SBX)2
(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
- 另外的
(1)群体中的交叉算法
将经过选择考验的个体放入一个群体,当放入的个体数量达到要求后,对里边的个体进行两两交叉。
(2) 交叉函数定义
种群的交叉只涉及一个交叉主体,而基因/个体的交叉涉及两个交叉主体。