5

次の擬似コードのように確率を見つけることなく、適応度の値を使用して母集団の各個人を評価することは可能ですか?

For all members of population
    sum += fitness ( member)
End for 
Loop until new population is full 
      Do this twice 
            Number = Random between 0 and sum
            Currentfitness = 0.0
            For each member in population
               Currentfitness += fitness (member)
               if Number > Currentfitness then select member
            End for 
      End
Create offspring 
End loop

そして、コードの次の部分は何をしますか?

Do this twice

ルーレット盤が親のペアを選択する方法を本当に混乱させます。何か助けてもらえますか?前もって感謝します

4

2 に答える 2

4

Number はCurrentfitnessよりも小さくする必要があります。そうしないと、母集団の最初のメンバーに大きく偏ってしまいます。

例:

  • 重み {1, 2, 7} を検討してください
  • 累積重み {1, 3, 10}
  • 総重量 10
  • r.NextDouble(10.0) で 0 から 10 の間のランダムな double を選択します
  • 90% の確率で、与えられた疑似コードで 1 が選択されます。10%のはず
于 2015-08-27T10:36:05.003 に答える
3

コードはランダムな要素を選択することを意図していますが、特定の重みに応じた確率があります。

例:

  • 次の重みを持つ 2 要素の配列から選択したい: { 1, 9 }
  • 累積重みは { 1, 10 }
  • 総重量は10
  • 1 から 10 までの乱数を選択します
  • 累積重み配列を調べて、乱数が要素より大きい最初のインデックスを見つけます。
  • このインデックスは、ランダムに選択された要素のインデックスです

直観的に、この例は理にかなっています: 10 回中 9 回の乱数は 1 から 9 の間に入り、最初の要素が確率 0.9 (指定された重みと同じ) で描画されます。

于 2012-05-26T11:11:22.257 に答える