Computer Science, asked by Romidash9679, 9 months ago

How to handle negative fitness in wheel selection algorithm?

Answers

Answered by Anonymous
0

Explanation:

I am trying to implement genetic algorithm for maximizing a function of n variables. However the problem is that the fitness values can be negative and I am not sure about how to handle negative values while doing selection. I read this article Linear fitness scaling in Genetic Algorithm produces negative fitness values but it's not clear to me how the negative fitness values were taken care of and how scaling factors a and b were calculated.

Also, from the article I know that roulette wheel selection only works for positive fitness value.

Answered by nguyenthieu2102
0

Answer:

from numpy import min, sum, ptp, array  

from numpy.random import uniform  

list_fitness1 = array([-12, -45, 0, 72.1, -32.3])

list_fitness2 = array([0.5, 6.32, 988.2, 1.23])

def get_index_roulette_wheel_selection(list_fitness=None):

""" It can handle negative.Make sure your list fitness is 1D-numpy array"""

scaled_fitness = (list_fitness - min(list_fitness)) / ptp(list_fitness)

minimized_fitness = 1.0 - scaled_fitness

total_sum = sum(minimized_fitness)

r = uniform(low=0, high=total_sum)

for idx, f in enumerate(minimized_fitness):

 r = r + f

 if r > total_sum:

  return idx

get_index_roulette_wheel_selection(list_fitness1)

get_index_roulette_wheel_selection(list_fitness2)

Explanation:

If your problem is minimum and your fitness contain negative values. Then   here is the best code for it.

1. Make sure your fitness list is 1D-numpy array  

2. Scaled the fitness list to the range [0, 1]

3. Transform maximum problem to minimum problem by 1.0 - scaled_fitness_list

4. Random a number between 0 and sum(minimizzed_fitness_list)

5. Keep adding element in minimized fitness list until we get the value greater than the total sum  

6. You can see if the fitness is small --> it has bigger value in minimized_fitness --> It has a bigger chance to add and make the value greater than the total sum.

Similar questions