这是我的遗传算法,一步一步:
- The mutation is selected from a population of several mutations.
然而,变异几乎总是更糟,如果不是相同的交叉。
我非常感谢你的帮助。谢谢!
发布于 2018-01-16 22:33:00
GA的一个问题是过快缩小搜索空间,并达到局部极大值解。您需要确保除了选择/适应功能之外,您没有以任何方式领导解决方案。所以当你说,
为什么要采取一个好的解决方案,然后执行一个很有可能使其成为更糟的解决方案的函数?
原因是你想要一个机会让解决方案后退一步,在它变得更好之前,它可能需要变得更糟。所以你真的应该从你的基因运算符中删除任何判断逻辑,把这个留给选择过程。
此外,交叉和突变应该被看作是两种不同的方式产生一个孩子的个人,你应该使用一个或另一个。在实践中,这意味着你有机会执行一个单亲的突变或两个父母之间的交叉。通常情况下,变异概率仅为5%,用交叉产生95%的变异概率。
交叉可以保存来自父母双方的遗传信息(孩子是镜像),所以一个孩子会比父母更糟糕,而另一个会更好(或者都一样)。因此,在这个意义上,交叉,如果有变化,你将永远得到一个更好的个人。
另一方面,突变并不能保证有一个更好的个体,但它的存在是为了引入新的数据,帮助遗传算法从局部极大值场景中移动。如果突变不能改善个体,使其变得更糟,那么它就更不可能被选择来养育一个孩子(也就是说,你不需要在突变算子本身中使用这种逻辑)。
你选择了最适合变异的
严格地说,这不是事实,优秀的人应该有更高的机会被选中。在这里,有一个微妙的区别,坏的人也可能被挑选为父母。同样,这有助于减少达到局部极大值解决方案的机会。这也意味着一代人中最好的个体可能(而且经常会)变得更糟。为了解决这一问题,我们通常实施“精英主义”,即最好的个体总是被复制到下一代(在它正在/不进行操作)。
如果我能评论一下你使用的是哪种基因运算符,那也是有益的。在我的经验中,我发现周期交叉和反转突变工作得很好。
https://stackoverflow.com/questions/47679966
复制相似问题