'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