encoding - 遗传算法中使用值编码方法时如何交叉 parent ?

标签 encoding machine-learning genetic-algorithm crossover

遗传算法中有一个阶段,我们应该选择将染色体从 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/

相关文章:

neural-network - 如何利用遗传算法优化神经网络?

python - 自定义 Python unicode 模块

linux - gradle构建时无效的编码名称UTF8

video - 如何解码使用 FFMPEG 编码的实时流?

machine-learning - 井字游戏的神经网络

machine-learning - Tensorflow 中的缩放梯度运算

vb.net - 无法在 VBA 上使用 .GetBytes 和 .ComputeHash 方法

python - 心脏病预测的反向传播 - 结果不准确?

mathematical-optimization - 单目标、混合整数、约束规划的优化算法?

给定限制条件下计算时间表的算法