针对TSP问题的建议GA运算符?
我正在创建一个遗传算法来解决旅行商问题。可惜的是,我遇到了一些高峰,这些高峰可以持续超过一千代,才会发生变化,最终得到更好的结果。在这种情况下,通常哪些交叉和变异操作效果比较好呢?
3 个回答
1
你能解释一下这句话吗:
“不幸的是,我遇到了一些高峰,这些高峰可以持续超过一千代,然后才会变异,得到更好的结果。”
你可以看看交叉操作,这些操作确保子代染色体中没有重复的节点。其中几个交叉操作包括顺序交叉(Order Crossover,简称OX)和边交叉(Edge Crossover)操作。
变异可以很简单,比如在一个染色体中交换两个位置。
顺便说一下,既然你提到了“python”,可以看看 Pyevolve,它也有一个旅行商问题(TSP)的例子。
2
如果你的问题是峰值在一千代以上仍然存在,那么问题可能不在于交叉和变异操作。你可能没有给你的种群引入或保持足够的变化。我建议你检查一下每一代中交叉、变异和存活者的比例,可能需要增加变异的比例。
3
有序变异和有序交叉(可以参考这篇文章)。一般的变异和交叉操作往往会导致无效的结果(也就是说,路线中可能会出现重复的城市或者缺少城市)。
最近有一个类似的问题。
我有一个Java小程序,它使用有序交叉和变异来实现旅行商问题(TSP),如果你有兴趣,可以用来比较一下你自己实现的效果。