'Genetic Algorithms to solve a SUDOKU - Selection
I am trying to solve a Sudoku with genetic algorithms, but when I am using roulette wheel and rank selection my fitness seems to be stuck in a part of the search space. This is normal? Shouldn't my fitness decrease if is a minimization problem and increase if it is a maximization problem?
Here are the code of the selections:
def roulette(population):
sum_all_fitness = sum([population.individuals[ind].fitness for ind in range(len(population))])
individual_prob = [population.individuals[ind].fitness/sum_all_fitness for ind in range(len(population))]
if population.optim == 'min':
problem = 1 - np.array(individual_prob)
elif population.optim == 'max':
problem = np.array(individual_prob)
problem /= problem.sum()
choice = np.random.choice(population, p=problem)
return choice
def rank(population):
if population.optim == 'min':
sort_all_fitness = [population.individuals[ind].fitness for ind in range(len(population))]
sort_all_fitness.sort(reverse=True)
elif population.optim == 'max':
sort_all_fitness = [population.individuals[ind].fitness for ind in range(len(population))]
sort_all_fitness.sort(reverse=False)
individual_prob = np.array([ind/len(population) for ind in range(len(population))])
individual_prob /= individual_prob.sum()
choice = np.random.choice(population, p=individual_prob)
return choice
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
| Solution | Source |
|---|
