宿題のために書かなければならない遺伝的アルゴリズムを使用して、巡回セールスマン問題を解決する必要があります。
問題は52の都市で構成されています。したがって、検索空間は52!
です。range(1, 53)
私は、遺伝的アルゴリズムの初期母集団に対して、個人としての1000の順列をランダムにサンプリングする必要があります(たとえば) 。
これを行うために、私は試しました:
>>> 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()
だから私は試しました
>>> random.sample(list(itertools.permutations(range(1, 53))), 1000)
しかし、それ52!
が非常に大きいことを考えると、list
操作は私のコンピュータのメモリとスワップスペースを最大限に活用しています。itertools.permutations
それは非常に決定論的であり、それが私の遺伝的アルゴリズムにバイアスをかけるため、によって生成された最初の1000の順列を選択することはできません。
このサンプリングを達成するためのより良い方法はありますか?