【问题标题】:How can I improve this genetic algorithm for the TSP?如何改进 TSP 的这种遗传算法?
【发布时间】:2018-01-17 06:33:00
【问题描述】:

这是我的遗传算法,一步一步来:

  1. 随机生成两个初始种群,并从两者中选择最合适的游览。

  2. 执行有序交叉,它选择第一个适合游览的随机部分,并按顺序从第二个开始填充其余部分。

  3. 如果巡演的效果仅为初始人群中前 10% 巡演的 1.3 倍,则通过随机交换两个城市来改变巡演(我实际上只是通过归纳来完成的,挑选出产生的差的巡演) - 我很想改变这一点,但想不出更好的方法。

    • 突变选自多个突变的群体。
  4. 返回生成的游览。

然而,突变几乎总是更糟,如果与交叉不同的话。

非常感谢一些帮助。谢谢!

【问题讨论】:

  • 不要做交叉。没必要。
  • 交叉实际上改进了从初始种群(父母)中选择的那些 - 但不会产生最好的游览。
  • 交叉和突变不会产生更好的基因;他们制造不同的基因。选择让事情变得更好。交叉是不必要的并发症。
  • 我也是这么想的,但是去掉了交叉和变异,你所拥有的只是蛮力。我需要设计一个遗传算法。
  • 你还在做变异。在顶级基因中随机“选择”并对其进行突变。这不是蛮力,它是随机的。它是遗传的,因为你的变异“基因”。

标签: python genetic-algorithm traveling-salesman mutation crossover


【解决方案1】:

GA 中的一个问题是过快地缩小搜索空间并达到局部最大值解决方案。您需要确保除了选择/适应功能之外,您没有以任何方式领导您的解决方案。所以当你说,

为什么你会采取一个好的解决方案,然后 执行一个很可能使其成为更糟糕解决方案的功能

,原因是您希望解决方案有机会退后一步,它可能需要在变得更好之前变得更糟。所以你真的应该从你的遗传算子中删除任何判断逻辑,把它留给选择过程。

此外,交叉和变异应被视为生成子个体的两种不同方式,您应该使用其中一种。在实践中,这意味着您有机会执行单亲的突变或两个亲本之间的交叉。通常突变几率只有 5%,其余 95% 使用交叉生成。

交叉保留来自父母双方的遗传信息(孩子是镜像),因此一个孩子会比父母差,另一个更好(或两者相同)。所以从这个意义上说,跨界,如果有变化,你总会得到一个更好的个体。

另一方面,突变并不能保证更好的个体,但它的存在是为了引入新数据,帮助将遗传算法从局部最大值场景中移开。如果突变未能改善个体并使其变得更糟,那么无论如何它被选为养育孩子的机会就会更小(即,您不需要突变算子本身的这种逻辑)。

你选择最好的变异

这并不完全正确,优秀的人应该有更高的被选中机会。在这里有一个细微的差别,BAD 个体也可能被选作父母。这再次有助于减少达到局部最大值解决方案的机会。这也意味着一代人中最优秀的人实际上可能(而且经常会)变得更糟。为了解决这个问题,我们通常实施“精英主义”,即最好的个体总是被复制到下一代(在它是/不进行任何操作时)。

如果我能评论您正在使用哪些遗传运算符,那也将是有益的。根据我的经验,我发现循环交叉和反转突变效果很好。

【讨论】:

    猜你喜欢
    • 2021-04-01
    • 2018-07-14
    • 2019-08-19
    • 2022-01-25
    • 2010-12-05
    • 2012-06-17
    • 2012-06-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多