在遗传算法中,有一个阶段我们需要选择从父母到后代的染色体进行交叉。
通过二进制形式进行交叉操作很容易实现。
但是,如果我们使用值编码来编码染色体,该怎么办呢?
假设我的染色体中的一个位是一个DOUBLE类型的数值,比如0.99,其范围是(0-1),因为它将代表一个概率。
如何交叉这个DOUBLE类型的数值呢?
转换为二进制进行交叉然后再转换回来…?
回答:
你可以使用混合交叉算子(α = 0的变体):
p1 第一父代p2 第二父代u [0, 1]之间的随机数offspring = (1 - u) * p1 + u * p2
假设p1 < p2
,这个交叉算子会在范围[p1, p2]
内创建一个随机解。
混合交叉算子有一个有趣的特性,如果父母之间的差异较小,子代与父母解之间的差异也较小。因此,当前种群的分布决定了结果种群中解的分布(这是一种适应
形式)。
混合交叉算子的更高级版本(BLX-α)和另一个众所周知的算子(模拟二进制交叉)在Kalyanmoy Deb和Hans-Georg Beyer的自适应遗传算法与模拟二进制交叉中有所描述(简短摘要在这里)。
差分进化是另一种可能性。