Roulette Wheel selection procedure
-
11-06-2021 - |
Question
is it possible to evaluate each individual in the population using the fitness value without finding the probability as the following pseudo code
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
and what the following part of the code do ?
Do this twice
I really confuse how the Roulette Wheel selects pair of parents. can any help ? thanks in advance
Solution
The code is meant to select a random element, but with probabilities according to a certain weight.
Example:
- We want to select from a two-element array with the following weights: { 1, 9 }
- The cumulative weight is { 1, 10 }
- The total weight is 10
- We choose a random number between 1 and 10
- We look into the cumulative weight array and find the first index where our random number is greater than the element
- This index is the index of the randomly chosen element
Intuitively, this example makes sense: 9 out of ten times the random number will fall between 1 and 9 causing the first element to be drawn with probability 0.9 (just as the weights specified).
OTHER TIPS
Number should be less than Currentfitness, otherwise it is heavily biased towards the first member of the population.
Example:
- Consider weights {1, 2, 7}
- Cumulative weights {1, 3, 10}
- Total weight 10
- Choose random double between 0 and 10 with r.NextDouble(10.0)
- 90% of time 1 is chosen with given pseudo code. Should be 10%