我正在建立一个遗传算法来解决旅行商问题。不幸的是,我发现可以持续超过一千代的峰值,然后变异并获得更好的结果。在这种情况下,交叉和变异算子通常做得好吗?
答案 0 :(得分:3)
有序突变和有序交叉(见this article)。标准变异和交叉操作通常会导致无效的解决方案(即路线中的重复和/或缺失的城市)。
最近有一个similar question。
我有a Java applet that implements the TSP using ordered cross-over and mutation,如果您有兴趣比较实施的效果。
答案 1 :(得分:2)
如果您的问题是峰值仍然存在超过一千代,那么问题可能不在于交叉和变异算子。您可能不会为您的人群引入或保留足够的变异:我会检查交叉,突变和幸存者从一代到下一代的比例,并可能提高突变的比例。
答案 2 :(得分:1)
请你澄清一下
“不幸的是,我达到了峰值 维持超过一千 在变异之前的几代人 他们并取得了更好的结果“?
您可以检查交叉运算符,确保子染色体中没有重复节点。这些交叉运算符中的几个是Order Crossover(OX)和Edge Crossover运算符。
突变可以像简单地在单个染色体中交换两个位置一样简单。
顺便说一句,既然你已经标记了“python”,请看一下Pyevolve,它也有一个TSP示例。