我必须使用我必须为家庭作业编写的遗传算法来解决旅行推销员问题。
问题包括 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
因为它非常具有确定性,这会使我的遗传算法产生偏差。
有没有更好的方法来实现这种采样?