Itertools.permutations 生成TSP的n个随机解
我正在写一个脚本,用来生成旅行商问题的随机解决方案。我有一组城市,还有一组距离(不过我现在还不需要距离,因为我只是想生成随机的解决方案)。
我想用Itertools.permutations这个工具来对城市列表进行排列,从而创建独特的路线。我的问题是:
- 有没有办法让Itertools.permutations生成随机的解决方案?现在它是从城市[0]开始,接着是城市[1],然后是城市[2],依此类推。我能把这个顺序随机化吗?
- 我能让itertools只生成n个排列后就停止吗?我有29个城市,正如你可能猜到的那样,这会产生很多很多的排列!
提前谢谢你!
1 个回答
1
这段Python代码会根据一个随机的起始点生成排列,并在生成6个排列后停止:
from itertools import permutations
from random import shuffle
A=range(26)
shuffle(A)
for i,perm in enumerate(permutations(A)):
print perm
if i>=5:
break
需要注意的是,这些排列之间还是有很多相似之处,所以第二个排列会和第一个排列很像。
你可以尝试每次使用shuffle(A)来获得不同的排列,这样可能会更有效。(虽然它可能会重新生成一个排列,但对于29个城市来说,这种情况发生的概率非常低。)例如:
for i in range(10):
shuffle(A)
print A