Itertools.permutations 生成TSP的n个随机解

-1 投票
1 回答
858 浏览
提问于 2025-04-21 06:40

我正在写一个脚本,用来生成旅行商问题的随机解决方案。我有一组城市,还有一组距离(不过我现在还不需要距离,因为我只是想生成随机的解决方案)。

我想用Itertools.permutations这个工具来对城市列表进行排列,从而创建独特的路线。我的问题是:

  1. 有没有办法让Itertools.permutations生成随机的解决方案?现在它是从城市[0]开始,接着是城市[1],然后是城市[2],依此类推。我能把这个顺序随机化吗?
  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

撰写回答