sábado, 7 de abril de 2012

Lei da Morte

Depois de construirmos uma nova geração, quem de entre pais e filhos, sobrevive? Alguns métodos.

Geracional

Nadas mais simples e fácil do que sobreviverem apenas os filhos. O único problema é perderem-se pais de melhor qualidade. Mas não se pode ter tudo...

def survivors_generational(parents,offspring):
return offspring

Elitismo

Mas se quisermos garantir que não se perdem os melhores pais podemos garantir que eles passam sempre, sem alteração, para a geração seguinte. O número dos elementos dos pais que passam para a geração seguinte, o tamanho da élite, pode ser controlado. No limite basta apenas manter o melhor.

def survivors_elitism(parents,offspring,elite):
""" Sorted. """
size = len(parents)
comp_elite = int(size* elite)
new_population = parents[:comp_elite] + offspring[:size - comp_elite]
return new_population

Estado Estável
Podemos colocar as duas gerações em competição pela sobrevivência, cabendo a decisão à qualidade de cada indivíduo.

def survivors_mu_plus_lambda(parents,offspring):
"""Minimizing."""
size = len(parents)
new_population = parents + offspring
new_population.sort(key=itemgetter(1))
return new_population[:size]

Não é difícil imaginar pequenas variantes a estes métodos.

Sem comentários:

Enviar um comentário