için [1,2,3, ..., N] 'nin Örnekleme İzinleri the Travelling Salesman Problem'u genetic algorithm kullanarak ödev ödevini yazmak zorundayım.Büyük N
Sorun, 52 şehirden oluşmaktadır. Bu nedenle, arama alanı 52!
'dir. Genetik algoritmamın ilk popülasyonu için birey olarak range(1, 53)
1000 permütasyonunu rastgele örneklemem gerekiyor.
Bunu yapmak için, Denedim:
>>> 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()
Yani,
list
operasyon bellek ve takas alanı tükenmek üzere olduğunu
52!
ÇOK büyük olduğu göz önüne alındığında, Ancak
>>> random.sample(list(itertools.permutations(range(1, 53))), 1000)
çalıştı bilgisayarımda.
itertools.permutations
tarafından üretilen ilk 1000 permütasyonları seçemiyorum çünkü çok belirleyici ve bu benim genetik algoritmamı önyargıyor.
Bu örneklemeyi başarmanın daha iyi bir yolu var mı?
Sıfır tabanlı endeksleme ile tamamen katılıyorum, ancak burada indeksler City ID'lerini temsil ediyor ve benim Prof 1'den başlamak istediğine karar verdi ... Bu yüzden onun kongresine sadık kalmaya çalışıyorum – inspectorG4dget
Bu benim deneyimim oldu sadece kendi yolunu kendin yapmalı ve bunu profosyonun boktan sözleşmelerinden çıkış ifadelerinize dönüştürmelisin. –
Bekleyin, rastgele bir _permutation_ için bu olmamalıydı 'p = range (10); random.shuffle (p) '? random.sample, bazı değerleri kopyalayıp diğerlerini çıkarır. Ama belki de bunların aslında permütasyonlar olması gerekmediğini söylüyorsunuz ... – senderle