From 6e95ff5d9deded38de3a55735573998af9372623 Mon Sep 17 00:00:00 2001 From: SimpleArt <71458112+SimpleArt@users.noreply.github.com> Date: Thu, 19 Nov 2020 10:17:22 -0500 Subject: [PATCH] Rewrote data_list to __iter__ --- src/crossover/crossover_methods.py | 32 +++++++++++++++--------------- src/structure/chromosome.py | 8 +++++--- src/structure/population.py | 7 ++++--- 3 files changed, 25 insertions(+), 22 deletions(-) diff --git a/src/crossover/crossover_methods.py b/src/crossover/crossover_methods.py index d4696cc..fb02777 100644 --- a/src/crossover/crossover_methods.py +++ b/src/crossover/crossover_methods.py @@ -69,9 +69,9 @@ class Crossover_Methods: def int_random(ga, parent_1, parent_2): """Cross two parents by taking a random integer value between each of the genes.""" - return ga.make_chromosome([ # Make a new chromosome - 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 + return ga.make_chromosome([ # Make a new chromosome + ga.make_gene(random.randint(*sorted([data_1, data_2]))) # by randomly selecting integer genes between + for data_1, data_2 in zip(iter(parent_1), iter(parent_2))]) # each parents' genes def int_weighted(ga, parent_1, parent_2): @@ -80,19 +80,19 @@ class Crossover_Methods: # the percentage of genes taken from the first gene weight = 0.25 - return ga.make_chromosome([ # Make a new chromosome - ga.make_gene(int( # filled with new integer genes - weight*data_1+(1-weight)*data_2 # with weight% from gene 1 and - )) # (100-weight)% from gene 2 - for data_1, data_2 in zip(parent_1.data_list(), parent_2.data_list())]) # from each parents' genes + return ga.make_chromosome([ # Make a new chromosome + ga.make_gene(int( # filled with new integer genes + weight*data_1+(1-weight)*data_2 # with weight% from gene 1 and + )) # (100-weight)% from gene 2 + 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): """Cross two parents by taking a random numeric value between each of the genes.""" - return ga.make_chromosome([ # Make a new chromosome - 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 + return ga.make_chromosome([ # Make a new chromosome + ga.make_gene(random.uniform([data_1, data_2])) # by randomly selecting integer genes between + 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): @@ -101,8 +101,8 @@ class Crossover_Methods: # the percentage of genes taken from the first gene weight = 0.25 - return ga.make_chromosome([ # Make a new chromosome - ga.make_gene( # filled with new float genes - weight*data_1+(1-weight)*data_2 # with weight% from gene 1 and - ) # (100-weight)% from gene 2 - for data_1, data_2 in zip(parent_1.data_list(), parent_2.data_list())]) # from each parents' genes + return ga.make_chromosome([ # Make a new chromosome + ga.make_gene( # filled with new float genes + weight*data_1+(1-weight)*data_2 # with weight% from gene 1 and + ) # (100-weight)% from gene 2 + for data_1, data_2 in zip(iter(parent_1), iter(parent_2))]) # from each parents' genes diff --git a/src/structure/chromosome.py b/src/structure/chromosome.py index 9801874..26ce253 100644 --- a/src/structure/chromosome.py +++ b/src/structure/chromosome.py @@ -53,9 +53,11 @@ class Chromosome: """Set the fitness value of the chromosome""" self.fitness = fitness - def data_list(self): - """Returns a list of the gene values""" - return [gene.value for gene in self.gene_list] + + def __iter__(self): + """Returns an iterable of the gene values""" + for gene in self.gene_list: + yeild gene.value def __repr__(self): diff --git a/src/structure/population.py b/src/structure/population.py index d96699d..a65a7a4 100644 --- a/src/structure/population.py +++ b/src/structure/population.py @@ -149,9 +149,10 @@ class Population: self.fitness = fitness - def data_list(self): - """Returns a list of chromosome data lists""" - return [chromosome.data_list() for chromosome in self.chromosome_list] + def __iter__(self): + """Returns an iterable of chromosome iterables""" + for chromosome in self.chromosome_list: + yield iter(chromosome) def __repr__(self):