Tengo que resolver the Travelling Salesman Problem usando un genetic algorithm que tendré que escribir para tarea.Muestreo de permutaciones de [1, 2, 3, ..., N] para grande N
El problema consiste en 52 ciudades. Por lo tanto, el espacio de búsqueda es 52!
. Necesito muestrear aleatoriamente (digamos) 1000 permutaciones de range(1, 53)
como individuos para la población inicial de mi algoritmo genético.
Con el fin de hacer esto, he intentado:
>>> 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()
así que traté
>>> random.sample(list(itertools.permutations(range(1, 53))), 1000)
Sin embargo, dado que 52!
es muy grande, la operación list
es el gasto excesivo con el espacio de memoria y de intercambio en mi computadora. No puedo elegir las primeras 1000 permutaciones generadas por itertools.permutations
porque es muy determinista y eso sesgaría mi algoritmo genético.
¿Hay una mejor manera de lograr este muestreo?
Estoy totalmente de acuerdo con su indexación basada en cero, pero los espacios aquí representan los ID de la ciudad y mi profesor decidió que quiere comenzar desde 1 ... Así que estoy tratando de mantenerme fiel a su convención – inspectorG4dget
Ha sido mi experiencia que deberías hacerlo a tu manera y convertirlo en las convenciones de mierda de tu profesor en tus declaraciones de salida. –
Espera, para una _permutación_ aleatoria_ ¿no debería ser 'p = rango (10); random.shuffle (p) '? 'random.sample' duplicará algunos valores y omitirá otros. Pero tal vez estás diciendo que estos no tienen que ser permutaciones ... – senderle