Split the process into function decorators

This commit is contained in:
SimpleArt
2020-11-20 09:16:30 -05:00
parent c212da2426
commit abcb19f8b0

View File

@ -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.")