7

我必须使用我必须为家庭作业编写的遗传算法来解决旅行推销员问题

问题包括 52 个城市。因此,搜索空间为52!range(1, 53)我需要为我的遗传算法的初始群体随机抽样(比如说)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!它非常大,该list操作正在最大化我计算机上的内存和交换空间。我不能只选择由 生成的前 1000 个排列,itertools.permutations因为它非常具有确定性,这会使我的遗传算法产生偏差。

有没有更好的方法来实现这种采样?

4

1 回答 1

7

你根本不需要置换。调用random.sample(range(52), 52)1000 次。

PS:您确实应该在所有工作中使用从零开始的索引(range(52)而不是)。range(1, 53)事情通常这样会更好。

于 2012-01-28T23:52:20.660 回答