首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何对TSP的遗传算法进行改进?

如何对TSP的遗传算法进行改进?
EN

Stack Overflow用户
提问于 2017-12-06 17:17:31
回答 1查看 495关注 0票数 0

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

  1. 随机生成两个初始种群,并从两者中选择最适合的旅行。
  2. 执行一个有序的交叉,它选择第一次适合巡演的随机部分,并按顺序填充第二次中的其余部分。
  3. 如果这个旅游仅仅是最初人口中前10%的旅游的1.3倍(我只是通过归纳,挑出了制作的糟糕的旅游)--我很想改变这一点,但我想不出更好的方法了。
代码语言:javascript
复制
- The mutation is selected from a population of several mutations. 

  1. 返回所产生的巡演。

然而,变异几乎总是更糟,如果不是相同的交叉。

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

EN

回答 1

Stack Overflow用户

发布于 2018-01-16 22:33:00

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

为什么要采取一个好的解决方案,然后执行一个很有可能使其成为更糟的解决方案的函数?

原因是你想要一个机会让解决方案后退一步,在它变得更好之前,它可能需要变得更糟。所以你真的应该从你的基因运算符中删除任何判断逻辑,把这个留给选择过程。

此外,交叉和突变应该被看作是两种不同的方式产生一个孩子的个人,你应该使用一个或另一个。在实践中,这意味着你有机会执行一个单亲的突变或两个父母之间的交叉。通常情况下,变异概率仅为5%,用交叉产生95%的变异概率。

交叉可以保存来自父母双方的遗传信息(孩子是镜像),所以一个孩子会比父母更糟糕,而另一个会更好(或者都一样)。因此,在这个意义上,交叉,如果有变化,你将永远得到一个更好的个人。

另一方面,突变并不能保证有一个更好的个体,但它的存在是为了引入新的数据,帮助遗传算法从局部极大值场景中移动。如果突变不能改善个体,使其变得更糟,那么它就更不可能被选择来养育一个孩子(也就是说,你不需要在突变算子本身中使用这种逻辑)。

你选择了最适合变异的

严格地说,这不是事实,优秀的人应该有更高的机会被选中。在这里,有一个微妙的区别,坏的人也可能被挑选为父母。同样,这有助于减少达到局部极大值解决方案的机会。这也意味着一代人中最好的个体可能(而且经常会)变得更糟。为了解决这一问题,我们通常实施“精英主义”,即最好的个体总是被复制到下一代(在它正在/不进行操作)。

如果我能评论一下你使用的是哪种基因运算符,那也是有益的。在我的经验中,我发现周期交叉和反转突变工作得很好。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47679966

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档