遗传算法中使用值编码方式时如何交叉parents?
How to crossover the parents when using a value encoding method in genetic algorithm?
遗传算法中有一个阶段,我们应该选择将 parents 的染色体交叉到后代。
通过二进制形式很容易做到。
但是如果我们使用值编码对染色体进行编码怎么办?
假设我染色体中的一位是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
的一种形式)。
Self-Adaptive Genetic Algorithms with Simulated Binary Crossover by Kalyanmoy Deb and Hans-Georg Beyer (a short summary 中描述了混合交叉运算符 (BLX-α) 和另一个众所周知的运算符(模拟二进制交叉)的更高级版本。
是另一种可能。
遗传算法中有一个阶段,我们应该选择将 parents 的染色体交叉到后代。
通过二进制形式很容易做到。
但是如果我们使用值编码对染色体进行编码怎么办?
假设我染色体中的一位是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
的一种形式)。
Self-Adaptive Genetic Algorithms with Simulated Binary Crossover by Kalyanmoy Deb and Hans-Georg Beyer (a short summary