私の質問はこれに関連しています: 遺伝的アルゴリズムにおけるルーレットホイールの選択。人口を最初にソートする必要がありますか? 人口を分類しない場合、ルーレットホイールの選択を整理する方法は何ですか?確かに、今は直線的に検索する必要があります。この場合、C ++またはJavaのコードスニペットはありますか?
質問する
5238 次
1 に答える
13
母集団を並べ替える必要はまったくありません。ルーレットを選択するための鍵は、特定の個体が生殖のために選択される確率がその適応度に比例することです。
次のようなフィットネスを備えた、分類されていない母集団があるとします。
[12, 45, 76, 32, 54, 21]
ルーレットの選択を実行するには、0から240(母集団の適応度の合計)の範囲の乱数を選択するだけです。次に、リストの最初の要素から始めて、乱数がゼロ以下になるまで、各個人の適応度を減算します。したがって、上記の場合、ランダムに112を選択すると、次のようになります。
Step 1: 112 - 12 = 100. This is > 0, so continue.
Step 2: 100 - 45 = 55. This is > 0, so continue.
Step 3: 55 - 76 = -21. This is <= 0, so stop.
したがって、私たちは複製のために個人#3を選択します。これにより、母集団を並べ替える必要がまったくないことに注意してください。
したがって、擬似コードでは、次のように要約されます。
let s = sum of population fitness
let r = random number in range [0, s].
let i = 0.
while r > 0 do:
r = r - fitness of individual #i
increment i
select individual #i - 1 for reproduction.
- 1
最後の行のは、ループの最後の反復内で行われたことを打ち消すことであることに注意してincrement i
ください(必要な個人が見つかったとしても、それは関係なく増加するため)。
于 2012-05-10T10:18:04.560 に答える