Мне нужно решить задачу коммивояжера , используя генетический алгоритм , который мне придется написать для домашней работы .
Проблема состоит из 52 городов. Следовательно, пространство поиска равно 52!
. Мне нужно случайным образом выбрать (скажем) 1000 перестановок range(1, 53)
как отдельных лиц для начальной популяции моего генетического алгоритма.
Чтобы сделать это, я попытался:
>>> 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
, потому что это очень детерминистично и это сместило бы мой генетический алгоритм.
Есть ли лучший способ добиться этой выборки?