如何改善TSP的这种遗传算法



这是我的遗传算法,逐步:

  1. 随机生成两个初始人口,然后从两者中选择适合旅行。

  2. 执行有序的跨界车,该分频器选择第一个合适的旅行的随机部分,并从第二个填充其余部分。

  3. 如果这次旅行只有最初人口中前10%的巡回赛的1.3倍,可以随机交换两个城市来突变这次旅行(我实际上是通过归纳来完成的,挑出了生产的可怜的旅行) - 我很想改变这一点,但无法想到更好的方式。

    • 突变是从几个突变种群中选择的。
  4. 返回旅行的产生。

突变几乎总是更糟,即使与跨界"。

我非常感谢您的帮助。谢谢!

GA中的一个问题正在缩小您的搜索空间,并达到本地最大解决方案。您需要确保除了选择/健身功能以外,您不会以任何方式领导解决方案。所以当你说

你为什么要采用一个好的解决方案然后 执行一个函数,很可能会使它成为更糟糕的解决方案

,原因是您希望解决方案退后一步,它可能需要变得更糟,然后才能变得更好。因此,实际上,您应该从遗传操作员中删除任何判断逻辑,将其留在选择过程中。

此外,跨界和突变也应视为产生孩子个体的两种不同方法,您应该使用一个或另一个。在实践中,这意味着您有机会进行单亲的突变或两个父母之间的跨界突变。通常,突变机会只有5%,分频器用于产生其他95%。

跨界可以保留父母双方的遗传信息(孩子是镜像),因此一个孩子会比父母和另一个孩子更糟(或两者都相同)。因此,从这种意义上讲,如果有变化,您将永远得到一个更好的个人。

另一方面,

突变不能保证一个更好的个体,但它的目的是引入新数据,有助于将GA从本地最大值的情况移动。如果突变无法改善个人并使情况变得更糟,那么无论如何,它被选为育儿的机会较少(即,您不需要在突变操作员本身中需要这种逻辑)。

您选择最佳突变

这不是严格的真实,好人应该有更高的选择机会。在这里,有一个微妙的区别,即父母也可能选择坏人。同样,这有助于减少达到局部最大解决方案的机会。这也意味着,最好的个人可能(而且经常)确实会变得更糟。要解决这个问题,我们通常会实施"精英主义",从而始终将最好的人复制到下一代(在/不经营任何操作)。

如果我可以评论您使用的遗传操作员,这也将是有益的。我发现循环跨界和反转突变在我的经验中效果很好。

最新更新