针对TSP问题的建议GA运算符?

5 投票
3 回答
2945 浏览
提问于 2025-04-15 18:47

我正在创建一个遗传算法来解决旅行商问题。可惜的是,我遇到了一些高峰,这些高峰可以持续超过一千代,才会发生变化,最终得到更好的结果。在这种情况下,通常哪些交叉和变异操作效果比较好呢?

3 个回答

1

你能解释一下这句话吗:

“不幸的是,我遇到了一些高峰,这些高峰可以持续超过一千代,然后才会变异,得到更好的结果。”

你可以看看交叉操作,这些操作确保子代染色体中没有重复的节点。其中几个交叉操作包括顺序交叉(Order Crossover,简称OX)和边交叉(Edge Crossover)操作。

变异可以很简单,比如在一个染色体中交换两个位置。

顺便说一下,既然你提到了“python”,可以看看 Pyevolve,它也有一个旅行商问题(TSP)的例子。

2

如果你的问题是峰值在一千代以上仍然存在,那么问题可能不在于交叉和变异操作。你可能没有给你的种群引入或保持足够的变化。我建议你检查一下每一代中交叉、变异和存活者的比例,可能需要增加变异的比例。

3

有序变异和有序交叉(可以参考这篇文章)。一般的变异和交叉操作往往会导致无效的结果(也就是说,路线中可能会出现重复的城市或者缺少城市)。

最近有一个类似的问题

我有一个Java小程序,它使用有序交叉和变异来实现旅行商问题(TSP),如果你有兴趣,可以用来比较一下你自己实现的效果。

撰写回答