Rewrote data_list to __iter__

This commit is contained in:
SimpleArt
2020-11-19 10:17:22 -05:00
parent 857e248034
commit 6e95ff5d9d
3 changed files with 25 additions and 22 deletions

View File

@ -69,9 +69,9 @@ class Crossover_Methods:
def int_random(ga, parent_1, parent_2): def int_random(ga, parent_1, parent_2):
"""Cross two parents by taking a random integer value between each of the genes.""" """Cross two parents by taking a random integer value between each of the genes."""
return ga.make_chromosome([ # Make a new chromosome return ga.make_chromosome([ # Make a new chromosome
ga.make_gene(random.randint(*sorted([data_1, data_2]))) # by randomly selecting integer genes between ga.make_gene(random.randint(*sorted([data_1, data_2]))) # by randomly selecting integer genes between
for data_1, data_2 in zip(parent_1.data_list(), parent_2.data_list())]) # each parents' genes for data_1, data_2 in zip(iter(parent_1), iter(parent_2))]) # each parents' genes
def int_weighted(ga, parent_1, parent_2): def int_weighted(ga, parent_1, parent_2):
@ -80,19 +80,19 @@ class Crossover_Methods:
# the percentage of genes taken from the first gene # the percentage of genes taken from the first gene
weight = 0.25 weight = 0.25
return ga.make_chromosome([ # Make a new chromosome return ga.make_chromosome([ # Make a new chromosome
ga.make_gene(int( # filled with new integer genes ga.make_gene(int( # filled with new integer genes
weight*data_1+(1-weight)*data_2 # with weight% from gene 1 and weight*data_1+(1-weight)*data_2 # with weight% from gene 1 and
)) # (100-weight)% from gene 2 )) # (100-weight)% from gene 2
for data_1, data_2 in zip(parent_1.data_list(), parent_2.data_list())]) # from each parents' genes for data_1, data_2 in zip(iter(parent_1), iter(parent_2))]) # from each parents' genes
def float_random(ga, parent_one, parent_two): def float_random(ga, parent_one, parent_two):
"""Cross two parents by taking a random numeric value between each of the genes.""" """Cross two parents by taking a random numeric value between each of the genes."""
return ga.make_chromosome([ # Make a new chromosome return ga.make_chromosome([ # Make a new chromosome
ga.make_gene(random.uniform([data_1, data_2])) # by randomly selecting integer genes between ga.make_gene(random.uniform([data_1, data_2])) # by randomly selecting integer genes between
for data_1, data_2 in zip(parent_1.data_list(), parent_2.data_list())]) # from each parents' genes for data_1, data_2 in zip(iter(parent_1), iter(parent_2))]) # from each parents' genes
def float_weighted(ga, parent_one, parent_two): def float_weighted(ga, parent_one, parent_two):
@ -101,8 +101,8 @@ class Crossover_Methods:
# the percentage of genes taken from the first gene # the percentage of genes taken from the first gene
weight = 0.25 weight = 0.25
return ga.make_chromosome([ # Make a new chromosome return ga.make_chromosome([ # Make a new chromosome
ga.make_gene( # filled with new float genes ga.make_gene( # filled with new float genes
weight*data_1+(1-weight)*data_2 # with weight% from gene 1 and weight*data_1+(1-weight)*data_2 # with weight% from gene 1 and
) # (100-weight)% from gene 2 ) # (100-weight)% from gene 2
for data_1, data_2 in zip(parent_1.data_list(), parent_2.data_list())]) # from each parents' genes for data_1, data_2 in zip(iter(parent_1), iter(parent_2))]) # from each parents' genes

View File

@ -53,9 +53,11 @@ class Chromosome:
"""Set the fitness value of the chromosome""" """Set the fitness value of the chromosome"""
self.fitness = fitness self.fitness = fitness
def data_list(self):
"""Returns a list of the gene values""" def __iter__(self):
return [gene.value for gene in self.gene_list] """Returns an iterable of the gene values"""
for gene in self.gene_list:
yeild gene.value
def __repr__(self): def __repr__(self):

View File

@ -149,9 +149,10 @@ class Population:
self.fitness = fitness self.fitness = fitness
def data_list(self): def __iter__(self):
"""Returns a list of chromosome data lists""" """Returns an iterable of chromosome iterables"""
return [chromosome.data_list() for chromosome in self.chromosome_list] for chromosome in self.chromosome_list:
yield iter(chromosome)
def __repr__(self): def __repr__(self):