遗传算法中有一个阶段,我们应该选择将染色体从 parent 交叉到后代。
通过二进制形式很容易做到。
但是如果我们使用值编码对染色体进行编码怎么办?
假设我的染色体中有一位是 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-α) 的更高级版本和另一个众所周知的算子(模拟二元交叉)在 Self-Adaptive Genetic Algorithms with Simulated Binary Crossover 中进行了描述。作者:Kalyanmoy Deb 和 Hans-Georg Beyer(简短摘要 here)。
<小时/>Differential Evolution是另一种可能性。
关于encoding - 遗传算法中使用值编码方法时如何交叉 parent ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37021934/