【问题标题】:Genetic algorithm, cross over without duplicate data遗传算法,交叉无重复数据
【发布时间】:2016-02-16 15:03:02
【问题描述】:

我正在创建一个遗传算法,我只是遇到了一个问题,让我们举个例子。我有一个数字列表: [2, 3, 6, 8, 9, 1, 4] 代表我的数据。 我的问题的最佳解决方案取决于列表中数字的顺序。所以我有两个解决方案:S1 [2, 3, 9, 8, 1, 6, 4]S2 [1, 6, 4, 3, 9, 2, 8]

如果我用 S1 和 S2 做一个基本的交叉,我可能会得到这样的解决方案:child [2, 3, 9, 8, 9, 2, 8] 我们可以看到解决方案不好,因为我重复数据。

问题是我如何在没有重复这些数据的情况下实现进化(如此交叉)?

谢谢。

【问题讨论】:

标签: algorithm artificial-intelligence genetic-algorithm


【解决方案1】:

您将需要一个像 Ordered Crossover (OX1) 这样的交叉运算符,它可以在不重复这些数据的情况下执行交叉:

OX1: 一个父节点的随机选择部分映射到一个部分 另一个父母的。从被替换的部分开始,其余部分被填充 由剩余的基因向上,其中已经存在的基因被省略并且 订单被保留。

你也应该注意突变,因为它可以改变基因的顺序,在这种情况下你可以使用像Reverse Sequence Mutation (RSM)这样的突变运算符。

在反向序列变异算子中,我们取一个序列 S 受限于随机选择的两个位置 i 和 j,使得 i

【讨论】:

  • 谢谢,这对我很有帮助,我会寻找它的详细信息!
【解决方案2】:

你有Permutation Encoding,看这个解释:http://www.obitko.com/tutorials/genetic-algorithms/crossover-mutation.php

一般来说,您按照在第一个父项中遇到的顺序获取第一个父项的元素,然后按照在第二个父项中遇到的顺序获取其余元素。

【讨论】:

    猜你喜欢
    • 2014-08-12
    • 1970-01-01
    • 2016-08-31
    • 2015-07-03
    • 2016-09-16
    • 1970-01-01
    • 2011-10-11
    • 2015-07-15
    相关资源
    最近更新 更多