Então, o que fizemos foi o seguinte:
- escolhemos por torneio n indivíduos de toda a população (n é a dimensão do torneio)
- encontramos o pai com pior fitness- torneio negativo
- este é trocado por um filho, segundo a ordem sequencial de índice
- repetimos tantas vezes quantas a dimensão da população, e devolvemos o resultado.
O método foi implementado com duas funções: negative_tournament e survivors_steady_state. A primeira encontra o prior pai e a segunda faz a troca deste com um filho, devolvendo a população final.
def negative_tournament(population, size):
"""Deterministic"""
pool_index = [choice(range(len(population))) for i in range(size)]
worst_index = pool_index[0]
for j in range(1, size):
if population[pool_index[j]][1] < population[worst_index][1]:
worst_index = pool_index[j]
return worst_index
def survivors_steady_state(population, offspring, size):
"""Swap the worst parent by an offspring element"""
for i in range(len(population)):
worst_parent = negative_tournament(population, size)
population[worst_parent] = offspring[i]
return population
O código completo pode ser descarregado a partir de: aqui.
Nota: no programa principal, deve-se usar a função survivors_steady_state em vez da survivors_elitism.
Ana Nogueira

Sem comentários:
Enviar um comentário