大N时[1,2,3,...,N]的排列抽样
这个问题涉及到52个城市,所以可能的组合有很多,实际上是52!
(52的阶乘)。我需要随机生成大约1000种不同的城市排列,作为我遗传算法的初始种群。
为此,我尝试了:
>>> random.sample(itertools.permutations(range(1, 53)), 1000)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib/python2.6/random.py", line 314, in sample
n = len(population)
TypeError: object of type 'itertools.permutations' has no len()
所以我试过
>>> random.sample(list(itertools.permutations(range(1, 53))), 1000)
但是,由于52!
的数字非常大,我的电脑内存和交换空间都快用完了。我不能仅仅选择itertools.permutations
生成的前1000个排列,因为这样会很有规律,可能会影响我的遗传算法的效果。
有没有更好的方法来实现这个随机抽样呢?
1 个回答
7
你根本不需要进行排列。只需调用 random.sample(range(52), 52)
这个命令1000次就可以了。
补充一下:在你所有的工作中,最好使用从零开始的索引(也就是用 range(52)
而不是 range(1, 53)
)。这样通常会更顺利。