为什么在我的遗传算法中添加Crossover会给我带来更糟糕的结果?

时间:2010-03-13 18:03:51

标签: algorithm mathematical-optimization genetic-algorithm traveling-salesman

我已经实施了遗传算法来解决旅行商问题(TSP)。当我只使用变异时,我找到了比添加交叉时更好的解决方案。我知道正常的交叉方法对TSP不起作用,所以我实现了Ordered CrossoverPMX Crossover方法,并且都遭受了糟糕的结果。

以下是我正在使用的其他参数:

突变:单一交换突变或倒置子序列突变(as described by Tiendil here),突变率测试在1%到25%之间。

选择:轮盘赌选择

健身功能:1 /游览距离

人口规模:经过测试100,200,500,我还运行GA 5次,以便我有各种各样的起始人群。

停止条件:2500代

使用26个点的相同数据集,我通常使用具有高突变率的纯突变获得约500-600距离的结果。添加交叉时,我的结果通常在800距离范围内。另一个令人困惑的事情是我还实现了一个非常简单的Hill-Climbing算法来解决这个问题,当我运行1000次(比运行GA 5次更快)时,我得到410-450距离的结果,我希望使用GA获得更好的结果。

当我添加交叉时,有关为什么我的GA表现更差的任何想法?为什么它表现得比简单的Hill-Climb算法差得多,它应该卡在局部最大值上,因为一旦找到局部最大值就无法探索?

5 个答案:

答案 0 :(得分:3)

看起来您的交叉运算符会为新一代引入过多的随机性,因此您在尝试改进不良解决方案时会失去计算量。想象一下,Hill-Climb算法可以将给定解决方案改进到最佳邻域,但您的遗传算法只能对几乎随机的群体(解决方案)进行有限的改进。

值得一提的是,GA并不是解决TSP问题的最佳工具。无论如何,你应该看看如何实现它的一些例子。例如http://www.lalena.com/AI/Tsp/

答案 1 :(得分:3)

通过选择轮盘赌,你会把坏父母引入混合体中。如果你想以某种方式给车轮加重选择一些更好的父母,这可能会有所帮助。

请记住,您的大部分人口可能都不适合父母。如果你根本没有对父母的选择进行加权,那么你很有可能会一直在不断地养成那些超越游泳池的糟糕解决方案。权衡您的选择以更频繁地选择更好的父母,并使用变异通过添加随机性来纠正过于相似的池。

答案 2 :(得分:2)

您可以尝试将精英主义引入您的选择过程。精英主义意味着在完成任何选择之前,人口中两个最高的健身个体被保存并复制到新的群体中。精英主义完成后,选择继续正常进行。这样做意味着无论轮盘赌选择哪个父母或者他们在交叉期间产生什么,这两个最好的个体将始终被保留。这可以防止新人群丧失适应性,因为它的两个最佳解决方案不会比上一代更差。

答案 3 :(得分:1)

当添加交叉时你的结果更糟的一个原因可能是它没有做它应该做的事情 - 结合两个人的最佳特征。尝试用低交叉概率可能?人口多样性可能是一个问题。莫里森和德容在他们的工作中人口多样性的测量提出了一种新的多样性衡量标准。使用该度量,您可以看到您的人口多样性如何在几代人中发生变化。看看使用交叉或不使用交叉时它会有什么不同。

此外,您的OX或PMX实施中可能存在一些轻微的错误/遗漏细节。也许你忽略了什么? BTW,您可能想尝试Edge Recombination交叉运算符吗? (Pyevolve有一个实现)。

答案 4 :(得分:1)

为了提出“创新”策略,遗传算法通常使用 crossover 来组合不同候选解决方案的功能,以便快速探索搜索空间并找到更高适应性的新策略 - 而不是完全不同于人类智能的内部运作(这就是为什么我们从来没有真正'发明'任何东西,而只是混淆我们已经知道的东西是有争议的。)

通过这样做(随机组合不同的个体)交叉不保持对称性或排序,并且当问题高度依赖于某种对称性或染色体中基因的顺序时(如在您的特定情况下)采用交叉确实可能会导致更糟糕的结果。正如你自己提到的那样众所周知,众所周知,交叉不适用于旅行推销员。

值得强调的是,如果没有这种交叉遗传算法的对称突破性功能将无法填补进化的“利基”(通常需要缺乏对称性) - 这就是为什么交叉(在其所有变体中)基本上是重要的绝大多数情况。