Mam do rozwiązania the Travelling Salesman Problem przy użyciu genetic algorithm, które będę musiał napisać dla zadania domowe.Permptacje próbkowania [1,2,3, ..., N] dla dużego N
Problem składa się z 52 miast. Dlatego przestrzeń wyszukiwania to 52!
. Muszę losowo próbować (powiedzmy) 1000 permutacji range(1, 53)
jako osobników dla początkowej populacji mojego algorytmu genetycznego.
W tym celu, próbowałem:
>>> 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()
Więc próbowałem
>>> random.sample(list(itertools.permutations(range(1, 53))), 1000)
Biorąc jednak pod uwagę, że 52!
jest bardzo duża, operacja list
jest maxing przestrzeń pamięci i wymiany na moim komputerze. Nie mogę po prostu wybrać pierwszych 1000 permutacji wygenerowanych przez itertools.permutations
, ponieważ jest to bardzo deterministyczne i może wpłynąć na mój algorytm genetyczny.
Czy istnieje lepszy sposób na uzyskanie tego próbkowania?
Całkowicie zgadzam się z twoim indeksowaniem od zera, ale indeces tutaj reprezentują City ID i mój Profesor zdecydował, że chce zacząć od 1 ... Więc staram się pozostać wiernym jego konwencjom – inspectorG4dget
To było moje doświadczenie że powinieneś zrobić to po swojemu i przekonwertować go na gówniane konwencje profesora w swoich wypowiedziach wyjściowych. –
Czekaj, bo losowy _permutacja_ nie powinien to być 'p = zakres (10); random.shuffle (p) '? 'random.sample' spowoduje zduplikowanie niektórych wartości i pominięcie innych. Ale może mówisz, że te naprawdę nie muszą być permutacjami ... – senderle