在遗传算法中有一个阶段,我们应该选择将染色体从父母传给后代。
通过二进制形式很容易做到。
但是,如果我们使用值编码对染色体进行编码,该怎么办?
假设我的染色体中的一位是 DOUBLE 类型的值,比如说 0.99,它的范围是(0-1),因为它代表一个概率。
如何交叉这个 DOUBLE 数字?
转换为二进制以交叉然后转换回......?
在遗传算法中有一个阶段,我们应该选择将染色体从父母传给后代。
通过二进制形式很容易做到。
但是,如果我们使用值编码对染色体进行编码,该怎么办?
假设我的染色体中的一位是 DOUBLE 类型的值,比如说 0.99,它的范围是(0-1),因为它代表一个概率。
如何交叉这个 DOUBLE 数字?
转换为二进制以交叉然后转换回......?
您可以使用混合交叉运算符(α = 0 的变体):
p1 first parent
p2 second parent
u random number in [0, 1]
offspring = (1 - u) * p1 + u * p2
假设p1 < p2
,这个交叉算子在范围内创建了一个随机解[p1, p2]
。
混合交叉算子有一个有趣的特性,即如果父母之间的差异很小,则子解决方案和父解决方案之间的差异也很小。因此,当前人口的传播决定了解决方案在最终人口中的传播(这是 的一种形式adaptation
)。
混合交叉算子 (BLX-α) 和另一个众所周知的算子 (模拟二元交叉) 的更高级版本在Kalyanmoy Deb 和 Hans-Georg Beyer 的具有模拟二元交叉的自适应遗传算法中进行了描述(这里的简短摘要) .
差异进化是另一种可能性。