che devo risolvere the Travelling Salesman Problem utilizzando un genetic algorithm che dovrò scrivere per compiti.campionamento permutazioni di [1,2,3, ..., N] per la grande N
Il problema è composto da 52 città. Pertanto, lo spazio di ricerca è 52!
. Ho bisogno di campionare casualmente (per esempio) 1000 permutazioni di range(1, 53)
come individui per la popolazione iniziale del mio algoritmo genetico.
Per fare questo, ho provato:
>>> 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()
Così ho provato
>>> random.sample(list(itertools.permutations(range(1, 53))), 1000)
Tuttavia, dato che 52!
è molto grande, l'operazione list
è maxing lo spazio di memoria e di swap sul mio computer. Non riesco a scegliere le prime 1000 permutazioni generate da itertools.permutations
perché è molto deterministico e questo pregiudicherebbe il mio algoritmo genetico.
Esiste un modo migliore per ottenere questo campionamento?
Sono totalmente d'accordo con l'indicizzazione basata su zero, ma gli indumenti qui rappresentano gli ID città e il mio Prof ha deciso che vuole iniziare da 1 ... Quindi sto cercando di rimanere fedele alla sua convenzione – inspectorG4dget
È stata la mia esperienza che dovresti farlo a modo tuo e convertirlo nelle convenzioni di merda del tuo professore nelle tue dichiarazioni di uscita. –
Attendi, per una _permata_ casuale non dovrebbe essere p = intervallo (10); random.shuffle (p) '? 'random.sample' duplicherà alcuni valori e ometterà gli altri. Ma forse stai dicendo che queste non devono essere permutazioni ... – senderle