Split the process into function decorators
This commit is contained in:
@ -1,6 +1,27 @@
|
||||
def chromosomes_to_population(initialize):
|
||||
return lambda ga: ga.make_population([initialize(ga) for _ in range(ga.population_size)])
|
||||
|
||||
def genes_to_chromosome(initialize):
|
||||
return lambda ga: ga.make_chromosome([genes for genes in initialize(ga)])
|
||||
|
||||
def value_to_gene(initialize):
|
||||
return lambda ga: (ga.make_gene(value) for value in initialize(ga))
|
||||
|
||||
|
||||
class Initialization_Methods:
|
||||
"""Initialization examples that are used as defaults and examples"""
|
||||
|
||||
def __chromosomes_to_population(initialize):
|
||||
return chromosomes_to_population(initialize)
|
||||
def __genes_to_chromosome(initialize):
|
||||
return genes_to_chromosome(initialize)
|
||||
def __value_to_gene(initialize):
|
||||
return value_to_gene(initialize)
|
||||
|
||||
|
||||
@chromosomes_to_population
|
||||
@genes_to_chromosome
|
||||
@value_to_gene
|
||||
def random_initialization(ga):
|
||||
"""Takes the initialization inputs and
|
||||
- return a new population
|
||||
@ -10,21 +31,14 @@ class Initialization_Methods:
|
||||
|
||||
# Using the chromosome_impl to set every index inside of the chromosome
|
||||
if ga.chromosome_impl is not None:
|
||||
return ga.make_population([
|
||||
ga.make_chromosome([
|
||||
ga.make_gene(value)
|
||||
for value in ga.chromosome_impl()])
|
||||
for i in range(ga.population_size)])
|
||||
for value in ga.chromosome_impl():
|
||||
yield value
|
||||
|
||||
# Using the gene_impl to set every gene to be the same
|
||||
elif ga.gene_impl is not None:
|
||||
return ga.make_population([
|
||||
ga.make_chromosome([
|
||||
ga.make_gene(ga.gene_impl())
|
||||
for j in range(ga.chromosome_length)])
|
||||
for i in range(ga.population_size)])
|
||||
for _ in range(ga.population_size):
|
||||
yield ga.gene_impl()
|
||||
|
||||
# Exit because no gene creation method specified
|
||||
else:
|
||||
print("You did not specify any initialization constraints.")
|
||||
return None
|
||||
raise Exception("Did not specify any initialization constraints.")
|
||||
|
||||
Reference in New Issue
Block a user