2012-05-10 7 views
5

私の質問はこの1つにリンクされています: Roulette-wheel selection in Genetic algorithm. Population needs to be sorted first? 私たちは人口をソートしない場合は、それのためのルーレットホイールの選択を整理する方法は何ですか? 確かに、私たちは線形方法で検索しなければなりません。この場合、C++またはJavaでコードスニペットがありますか?遺伝的アルゴリズムでソートされていない集団に対してルーレットホイールの選択をどのように構成すべきですか?

答えて

12

人口はまったくソートする必要はありません - ルーレット選択の鍵は、特定の個人が再生のために選択される確率がその適応度に比例することです。

は、次のように適応度と、ソートされていない人口を持って言う:

[12, 45, 76, 32, 54, 21] 

をルーレット選択を実行するには、あなただけの240までの範囲0で乱数(人口のフィットネスの合計)を選ぶ必要があります。次に、リストの最初の要素から始めて、乱数がゼロ以下になるまで各個人の適応度を減算します。したがって、上記の場合、ランダムに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の再生を選択します。どのように集団を並べ替える必要がないかに注意してください。

ので、擬似コードでは、それはつまるところ:最終ラインで- 1は、我々がしたにも関わらずあるため、ループの最後の反復(内で行われますincrement iに対抗するためにあることを

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. 

注意私たちが望む個体を発見した、それにかかわらず増分する)。

関連する問題