Выборочные перестановки [1,2,3,…, N] для большого N

Мне нужно решить Задачу коммивояжера , используя генетический алгоритм , который мне придется написать для домашнего задания .

Проблема состоит из 52 городов. Следовательно, пространство поиска составляет 52! .Мне нужно случайным образом выбрать (скажем) 1000 перестановок из диапазона (1, 53) как индивидуумов для начальной популяции моего генетического алгоритма.

Для этого я попробовал:

>>> random.sample(itertools.permutations(range(1, 53)), 1000)
Traceback (most recent call last):
  File "", line 1, in 
  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! ОЧЕНЬ большой, операция списка приводит к исчерпанию объема памяти и места подкачки на моем компьютере. Я не могу просто выбрать первые 1000 перестановок, сгенерированных itertools.permutations , потому что они очень детерминированы и могут повлиять на мой генетический алгоритм.

Есть ли лучший способ добиться такой выборки?

7
задан Community 22 September 2017 в 17:44
поделиться