2

フィットネスの比例確率を得るときに0であるフィットネス(フィットネスは?)について何か質問があります。メンバーのコンテナが最初に最高のフィットネスでソートする必要があり、このようなコードを実行します。若干のフィットネスが0のときのフィットネス比例選択

for all members of population 
    sum += fitness of this individual 
end for 

for all members of population 
    probability = sum of probabilities + (fitness/sum) 
    sum of probabilities += probability 
end for 

loop until new population is full 
    do this twice 
     number = Random between 0 and 1 
      for all members of population 
       if number > probability but less than next probability then you have been selected 
      end for 
     end 
     create offspring 
end loop 

を私はランダムに生成されたメンバーと手で一回の反復を通過するように私は見ています私の問題は、私はいくつかを持っているということですメンバーのフィットネスは0になりますが、それらのメンバーの確率を得るとき、最後の非ゼロメンバーと同じ確率を維持します。ゼロ以外の確率とゼロ確率とを分けることができる方法はありますか?私は最高のフィットネスに基づいてソートしても、最後の非ゼロメンバーはゼロ確率と同じ確率を持つと考えていました。

答えて

2

この例で考えてみましょう:私たちはi個人を選ぶしようとしているnumber = Random between [0;1[場合ならば今

individual fitness(i) probability(i)  partial_sum(i) 
    1   10  10/20 = 0.50       0.50  
    2   3   3/20 = 0.15 0.5+0.15    = 0.65 
    3   2   2/20 = 0.10 0.5+0.15+0.1   = 0.75 
    4   0   0/20 = 0.00 0.5+0.15+0.1+0.0  = 0.75 
    5   5   5/20 = 0.25 0.5+0.15+0.1+0.0+0.25 = 1.00 
      ------ 
      Sum 20 

を:

individual   condition 
    1   0.00 <=     number < partial_sum(1) = 0.50 
    2   0.50 = partial_sum(1) <= number < partial_sum(2) = 0.65 
    3   0.65 = partial_sum(2) <= number < partial_sum(3) = 0.75 
    4   0.75 = partial_sum(3) <= number < partial_sum(4) = 0.75 
    5   0.75 = partial_sum(4) <= number < partial_sum(5) = 1.00 

個人がフィットネス0(例えばI )を持っている場合、それはすることはできません(例えば、は、関連する条件が0.75 <= number < 0.75であるため)を選択したことを示します。

関連する問題