Added function decorator

This commit is contained in:
SimpleArt
2020-11-19 21:55:12 -05:00
parent a8b38dc800
commit 46b4dc749d

View File

@ -5,39 +5,42 @@ class Crossover_Methods:
class Population: class Population:
"""Methods for selecting chromosomes to crossover.""" """Methods for selecting chromosomes to crossover."""
def sequential_selection(ga): def __append_children_from_mating_pool(crossover_method):
def helper(ga):
mating_pool = ga.population.mating_pool
ga.population.append_children([
[chromosome for cromosome in crossover_method(ga, mating_pool)]
)
return helper
@__append_children_from_mating_pool
def sequential_selection(ga, mating_pool):
"""Select sequential pairs from the mating pool. """Select sequential pairs from the mating pool.
Every parent is paired with the previous parent. Every parent is paired with the previous parent.
The first parent is paired with the last parent. The first parent is paired with the last parent.
""" """
mating_pool = ga.population.get_mating_pool() for index in range(len(mating_pool)): # for each parent in the mating pool
yield ga.crossover_individual_impl( # apply crossover to
for index in range(len(mating_pool)): # for each parent in the mating pool ga, #
ga.population.add_child( # add a child mating_pool[index], # the parent and
ga.crossover_individual_impl( # by crossing mating_pool[index-1] # the previous parent
ga, # )
mating_pool[index], # the parent and
mating_pool[index-1] # the previous parent
)
)
def random_selection(ga): @__append_children_from_mating_pool
def random_selection(ga, mating_pool):
"""Select random pairs from the mating pool. """Select random pairs from the mating pool.
Every parent is paired with a random parent. Every parent is paired with a random parent.
""" """
mating_pool = ga.population.get_mating_pool() for parent in mating_pool: # for each parent in the mating pool
yield ga.crossover_individual_impl( # apply crossover to
for parent in mating_pool: # for each parent in the mating pool ga, #
ga.population.add_child( # add a child parent, # the parent and
ga.crossover_individual_impl( # by crossing random.choice(mating_pool) # a random parent
ga, # )
parent, # the parent and
random.choice(mating_pool) # a random parent
)
)
class Individual: class Individual: