'How to avoid negative values during the fitness calculation of a Genetic Algorithm?
The error I am getting is as follows
ValueError: probabilities are not non-negative.
when I am doing the fitness calculation, it should generate values between 0 and 1 but I am getting some negative numbers for example -0.0068109 which generates an error. How can I avoid negative numbers?
import matplotlib.pyplot as plt
import numpy as np
import math
ind_size = 10
genetic_pool = [[-1, 0, 1], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]]
individuo = []
individuo += [np.random.choice(genetic_pool[0])]
individuo += list(np.random.choice(genetic_pool[1], ind_size - 1))
def listToDecimal(num):
decimal = 0
for i in range(len(num)):
decimal += num[i] * 10 ** (-i)
return decimal
poblacion = []
poblacion_aleatoria = []
for i in range(10):
individuo = []
individuo += [np.random.choice(genetic_pool[0])]
individuo += list(np.random.choice(genetic_pool[1], ind_size - 1))
poblacion.append(individuo)
def fx(x):
return x * math.sin(10 * math.pi * x) + 1
y_axis = []
x_axis = np.arange(-1, 2, 0.05)
for num in x_axis:
y_axis.append(fx(num))
for individuo in poblacion:
x = listToDecimal(individuo)
y = fx(x)
print(x)
fitness = []
for individuo in poblacion:
x = listToDecimal(individuo)
y = fx(x)
fitness += [y]
fitness = np.array(fitness).astype('float64')
# divido todos los valores de y para la suma total
# durante este paso se generan valores negativos
fitness = fitness / fitness.sum()
print(fitness)
print(type(fitness))
size_poblacion = len(poblacion)
offspring = []
for i in range(size_poblacion // 2):
parents = np.random.choice(size_poblacion, 2, p=fitness)
cross_point = np.random.randint(ind_size)
offspring += [poblacion[parents[0]][:cross_point] + poblacion[parents[1]][cross_point:]]
offspring += [poblacion[parents[1]][:cross_point] + poblacion[parents[0]][cross_point:]]
poblacion = offspring
for individuo in poblacion:
x = listToDecimal(individuo)
y = fx(x)
plt.plot(x, y, 'x')
plt.plot(x_axis, y_axis)
plt.show()
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
| Solution | Source |
|---|
