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

Algorithm 为什么在我的遗传算法中添加交叉会给我带来更糟糕的结果?,algorithm,mathematical-optimization,genetic-algorithm,traveling-salesman,Algorithm,Mathematical Optimization,Genetic Algorithm,Traveling Salesman,我已经实现了一个遗传算法来解决旅行商问题(TSP)。当我只使用变异时,我会找到比加入交叉更好的解决方案。我知道普通的交叉方法对TSP不起作用,所以我实现了和方法,但都有不好的结果 以下是我正在使用的其他参数: 突变:单交换突变或反向子序列突变(),突变率在1%到25%之间 选择:轮盘赌轮选择 健身功能:1/游览距离 种群规模:测试了100200500,我还运行了GA 5次,这样我就有了各种各样的起始种群 停止条件:2500代 对于相同的26个点的数据集,我通常使用高突变率的纯突变得到大约500-

我已经实现了一个遗传算法来解决旅行商问题(TSP)。当我只使用变异时,我会找到比加入交叉更好的解决方案。我知道普通的交叉方法对TSP不起作用,所以我实现了和方法,但都有不好的结果

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

突变:单交换突变或反向子序列突变(),突变率在1%到25%之间

选择:轮盘赌轮选择

健身功能:1/游览距离

种群规模:测试了100200500,我还运行了GA 5次,这样我就有了各种各样的起始种群

停止条件:2500代

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


为什么我的GA在添加交叉时表现更差?为什么它的性能比一个简单的爬山算法差得多,因为一旦找到局部极大值,它就无法探索,而这个简单的爬山算法应该停留在局部极大值上?

看起来你的交叉算子在新一代中引入了太多的随机性,所以你在试图改进糟糕的解决方案时正在失去你的计算努力。假设爬山算法可以将给定的解改进到其邻域的最佳状态,但您的遗传算法只能对几乎随机的总体(解)进行有限的改进


同样值得一提的是,遗传算法并不是解决TSP问题的最佳工具。无论如何,您应该看看如何实现它的一些示例。e、 g.

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


此外,在您的OX或PMX实现中可能存在一些小错误/遗漏的细节。也许你忽略了什么?顺便说一句,你可能想尝试边缘复合交叉算子?(有一个实现)

为了提出“创新”策略,遗传算法通常使用交叉组合不同候选解决方案的技巧,以便快速探索搜索空间并找到适应度更高的新策略,这与人类智能的内部工作方式完全不同(这就是为什么我们从来没有真正“发明”过任何东西,只是把我们已经知道的东西混在一起,这是有争议的)

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


值得强调的是,如果没有这种打破对称的交叉遗传算法壮举,它将无法填补进化的“生态位”(通常需要缺乏对称性),这就是为什么交叉(在其所有变体中)在绝大多数情况下,这一点非常重要。

轮盘赌轮盘选择会将坏父母引入到组合中。如果你想以某种方式权衡轮盘,选择更好的父母,这可能会有所帮助


请记住,您的大多数群体可能是不称职的父母。如果您根本不考虑父母选择的权重,则很有可能您会不断繁殖出超出池的糟糕解决方案。考虑您的选择,以便更频繁地选择更好的父母,并使用突变通过添加随机性来纠正过于相似的池。

您可能会这样做尝试在你的选择过程中引入精英主义。精英主义意味着在进行任何选择之前,种群中两个最适合的个体都会被保留下来并复制到新种群中。精英主义完成后,选择会继续正常进行。这意味着无论轮盘赌或在杂交过程中,它们产生的两个最佳个体将始终保持不变。这防止了新种群失去适应性,因为它的两个最佳解决方案不会比上一代更差