Мне нужно решить задачу коммивояжера с помощью генетический алгоритм, который мне придется написать в качестве домашнего задания.
Задача состоит из 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
, потому что это очень детерминировано, и это исказило бы мой генетический алгоритм.
Есть ли лучший способ добиться этой выборки?