在遗传算法中选择父代进行交叉操作?

3
首先,这是一份作业的一部分。
我正在尝试实现遗传算法。我对选择交叉亲代感到困惑。
根据我的笔记(显然有问题),以下是示例操作:
1. 交叉可能性 * 种群大小 = 预计交叉的染色体数(如果不是偶数,则四舍五入到最接近的偶数之一) 2. 对于每个染色体,选择在范围 [0,1] 内的随机数,如果此数小于交叉可能性,则将该染色体选择为交叉配对。
但是,在应用第二步时,所选染色体数等于第一步中找到的结果。由于随机性,这并不总是保证的。
因此,这没有任何意义。我搜索了选择交叉亲代的方法,但我发现的都是交叉技术(单点,切割等)以及如何在所选的亲代之间进行交叉(对此我没有问题)。我只是不知道应该选择哪些染色体进行交叉。有什么建议或简单的示例吗?
2个回答

9
你可以这样实现:
对于每个新的子代,你通过随机概率决定它是否由交叉产生。如果是,则选择两个父母,例如通过轮盘赌选择或锦标赛选择。这两个父母生成一个子代,然后你用变异概率突变它并将其添加到下一代中。如果不是,则只选择一个“父母”进行克隆,用概率突变并将其添加到下一个种群中。
我注意到一些其他观察结果,并希望发表评论。我经常看到“染色体”这个词,但它应该是“个体”。你几乎从来没有选择染色体,而是完整的个体。染色体只是解决方案的一部分。可能是挑剔,但解决方案不是染色体。一个解决方案是一个由多个染色体组成的个体,染色体则由基因组成,这些基因以等位基因的形式表现出它们的表达方式。通常,个体只有一个染色体,但混淆术语仍然不好。
此外,我注意到你标记了遗传编程,这基本上只是遗传算法的一种特殊类型。在遗传编程中,你把树作为染色体,它可以代表数学公式或计算机程序。不过,你的问题似乎并不是关于遗传编程的。

一种特殊类型的进化算法,但同意。 - Matej Kolec'ko

1
这个回答有些晚了,但希望能对未来的某个人有所帮助。即使两个染色体没有成对(并产生后代),它们也会在下一代中传递(不经过交叉互换),但是在一些突变后(受概率影响)。另一方面,如果两个染色体成对,则它们将为下一代产生两个子孙(替代原始的两个父母)。因此,这就是为什么两个世代中染色体数保持不变的原因。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接