Files
EasyGA/src/initialization/initialization_methods.py
2020-11-22 15:49:57 -05:00

54 lines
1.8 KiB
Python

def chromosomes_to_population(initialize):
"""Makes a population from chromosomes."""
return lambda ga:\
ga.make_population(
[initialize(ga) for _ in range(ga.population_size)]
)
def genes_to_chromosome(initialize):
"""Converts a collection of genes to a chromosome."""
return lambda ga:\
ga.make_chromosome(
list(initialize(ga))
)
def values_to_genes(initialize):
"""Converts a collection of values to genes."""
return lambda ga:\
(ga.make_gene(value) for value in initialize(ga))
class Initialization_Methods:
"""Initialization examples that are used as defaults and examples"""
# Private method decorators, see above.
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
@values_to_genes
def random_initialization(ga):
"""Takes the initialization inputs and returns a collection of values.
Method decorators convert them to a GA population object.
"""
# Using the chromosome_impl to set every index inside of the chromosome
if ga.chromosome_impl is not None:
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:
for _ in range(ga.chromosome_length):
yield ga.gene_impl()
# Exit because no gene creation method specified
else:
raise Exception("Did not specify any initialization constraints.")