7

宿題のために書かなければならない遺伝的アルゴリズムを使用して、巡回セールスマン問題を解決する必要があります。

問題は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の順列を選択することはできません。

このサンプリングを達成するためのより良い方法はありますか?

4

1 に答える 1

7

順列する必要はまったくありません。random.sample(range(52), 52)1000回電話します。

range(52)PS:すべての作業で(ではなく)ゼロベースのインデックスを使用する必要がrange(1, 53)あります。物事は一般的にそのようにうまくいきます。

于 2012-01-28T23:52:20.660 に答える