From aa0c5320c8f4f6c5f24673fd9dfd24d7cf982db2 Mon Sep 17 00:00:00 2001 From: danielwilczak101 <44122838+danielwilczak101@users.noreply.github.com> Date: Wed, 30 Sep 2020 23:25:44 -0400 Subject: [PATCH] Requested file name changes --- src/EasyGA.py | 21 ++++++------ src/crossover/__init__.py | 3 +- src/crossover/examples.py | 3 ++ .../{test_crossover.py => test_examples.py} | 0 src/fitness_function/__init__.py | 4 +-- src/fitness_function/example_is_it_5.py | 13 -------- src/fitness_function/examples.py | 16 +++++++++ ...t_fitness_function.py => test_examples.py} | 0 src/initialization/__init__.py | 2 +- src/initialization/examples.py | 33 +++++++++++++++++++ src/initialization/random_initialization.py | 30 ----------------- .../test_examples.py} | 0 src/mutation/__init__.py | 2 ++ src/mutation/examples.py | 3 ++ src/mutation/test_examples.py | 0 src/selection/__init__.py | 2 ++ src/selection/examples.py | 3 ++ src/selection/test_examples.py | 0 src/termination_point/__init__.py | 5 ++- src/termination_point/examples.py | 16 +++++++++ src/termination_point/fitness_based.py | 5 --- src/termination_point/generation_based.py | 7 ---- src/termination_point/test_examples.py | 0 23 files changed, 96 insertions(+), 72 deletions(-) create mode 100644 src/crossover/examples.py rename src/crossover/{test_crossover.py => test_examples.py} (100%) delete mode 100644 src/fitness_function/example_is_it_5.py create mode 100644 src/fitness_function/examples.py rename src/fitness_function/{test_fitness_function.py => test_examples.py} (100%) create mode 100644 src/initialization/examples.py delete mode 100644 src/initialization/random_initialization.py rename src/{mutation/test_mutation.py => initialization/test_examples.py} (100%) create mode 100644 src/mutation/examples.py create mode 100644 src/mutation/test_examples.py create mode 100644 src/selection/examples.py create mode 100644 src/selection/test_examples.py create mode 100644 src/termination_point/examples.py delete mode 100644 src/termination_point/fitness_based.py delete mode 100644 src/termination_point/generation_based.py create mode 100644 src/termination_point/test_examples.py diff --git a/src/EasyGA.py b/src/EasyGA.py index 6a3590d..b920c82 100644 --- a/src/EasyGA.py +++ b/src/EasyGA.py @@ -4,13 +4,14 @@ import random from initialization import population as create_population from initialization import chromosome as create_chromosome from initialization import gene as create_gene -# Import the default fitness function -from fitness_function import example_is_it_5 -# Import default termination points -from termination_point import generation_based -from termination_point import fitness_based -# Import functionality defaults -from initialization import random_initialization +# +from fitness_function import fitness_examples +# Import example classes +from initialization import initialization_examples +from termination_point import termination_examples +from selection import selection_examples +from crossover import crossover_examples +from mutation import mutation_examples class GA: def __init__(self): @@ -31,12 +32,12 @@ class GA: # Defualt EastGA implimentation structure - self.initialization_impl = random_initialization - self.fitness_funciton_impl = example_is_it_5 + self.initialization_impl = initialization_examples.random_initialization + self.fitness_funciton_impl = fitness_examples.is_it_5 #self.mutation_impl = PerGeneMutation(Mutation_rate) #self.selection_impl = TournamentSelection() #self.crossover_impl = FastSinglePointCrossover() - self.termination_impl = generation_based + self.termination_impl = termination_examples.generation_based # If we want the fitnesses to be updated by the computer self.update_fitness = True diff --git a/src/crossover/__init__.py b/src/crossover/__init__.py index 23b04b2..f9697e1 100644 --- a/src/crossover/__init__.py +++ b/src/crossover/__init__.py @@ -1 +1,2 @@ -# From file name import function name +# FROM (. means local) file_name IMPORT function_name +from .examples import crossover_examples diff --git a/src/crossover/examples.py b/src/crossover/examples.py new file mode 100644 index 0000000..25d91c8 --- /dev/null +++ b/src/crossover/examples.py @@ -0,0 +1,3 @@ +class crossover_examples: + """Crossover examples will go here """ + pass diff --git a/src/crossover/test_crossover.py b/src/crossover/test_examples.py similarity index 100% rename from src/crossover/test_crossover.py rename to src/crossover/test_examples.py diff --git a/src/fitness_function/__init__.py b/src/fitness_function/__init__.py index 100b611..f6294c2 100644 --- a/src/fitness_function/__init__.py +++ b/src/fitness_function/__init__.py @@ -1,2 +1,2 @@ -# FROM (. means local) file_name IMPORT function_name -from .example_is_it_5 import example_is_it_5 +# FROM (. means local) file_name IMPORT class name +from .examples import fitness_examples diff --git a/src/fitness_function/example_is_it_5.py b/src/fitness_function/example_is_it_5.py deleted file mode 100644 index 3546373..0000000 --- a/src/fitness_function/example_is_it_5.py +++ /dev/null @@ -1,13 +0,0 @@ -def example_is_it_5(chromosome): - """A very simple case test function - If the chromosomes gene value is a 5 add one - to the chromosomes overall fitness value.""" - # Overall fitness value - fitness = 0 - # For each gene in the chromosome - for gene in chromosome.genes: - # Check if its value = 5 - if(gene.value == 5): - # If its value is 5 then add one to - # the overal fitness of the chromosome. - fitness += 1 - return fitness diff --git a/src/fitness_function/examples.py b/src/fitness_function/examples.py new file mode 100644 index 0000000..ab964e8 --- /dev/null +++ b/src/fitness_function/examples.py @@ -0,0 +1,16 @@ +class fitness_examples: + """Fitness function examples used""" + + def is_it_5(chromosome): + """A very simple case test function - If the chromosomes gene value is a 5 add one + to the chromosomes overall fitness value.""" + # Overall fitness value + fitness = 0 + # For each gene in the chromosome + for gene in chromosome.genes: + # Check if its value = 5 + if(gene.value == 5): + # If its value is 5 then add one to + # the overal fitness of the chromosome. + fitness += 1 + return fitness diff --git a/src/fitness_function/test_fitness_function.py b/src/fitness_function/test_examples.py similarity index 100% rename from src/fitness_function/test_fitness_function.py rename to src/fitness_function/test_examples.py diff --git a/src/initialization/__init__.py b/src/initialization/__init__.py index 13ed666..c4790d1 100644 --- a/src/initialization/__init__.py +++ b/src/initialization/__init__.py @@ -1,5 +1,5 @@ # FROM (. means local) file_name IMPORT function_name -from .random_initialization import random_initialization +from .examples import initialization_examples from .population_structure.population import population from .chromosome_structure.chromosome import chromosome from .gene_structure.gene import gene diff --git a/src/initialization/examples.py b/src/initialization/examples.py new file mode 100644 index 0000000..9257b44 --- /dev/null +++ b/src/initialization/examples.py @@ -0,0 +1,33 @@ +# Import the data structure +from .population_structure.population import population as create_population +from .chromosome_structure.chromosome import chromosome as create_chromosome +from .gene_structure.gene import gene as create_gene + +class initialization_examples: + """Initialization examples that are used as defaults and examples""" + + def random_initialization(population_size, chromosome_length, chromosome_impl, gene_impl): + """Takes the initialization inputs and choregraphs them to output the type of population + with the given parameters.""" + # Create the population object + population = create_population() + + # Fill the population with chromosomes + for i in range(population_size): + chromosome = create_chromosome() + #Fill the Chromosome with genes + for j in range(chromosome_length): + # Using the chromosome_impl to set every index inside of the chromosome + if chromosome_impl != None: + # Each chromosome location is specified with its own function + chromosome.add_gene(create_gene(chromosome_impl(j))) + # Will break if chromosome_length != len(lists) in domain + elif gene_impl != None: + # gene_impl = [range function,lowerbound,upperbound] + function = gene_impl[0] + chromosome.add_gene(create_gene(function(*gene_impl[1:]))) + else: + #Exit because either were not specified + print("Your domain or range were not specified") + population.add_chromosome(chromosome) + return population diff --git a/src/initialization/random_initialization.py b/src/initialization/random_initialization.py deleted file mode 100644 index 9c6c942..0000000 --- a/src/initialization/random_initialization.py +++ /dev/null @@ -1,30 +0,0 @@ -# Import the data structure -from .population_structure.population import population as create_population -from .chromosome_structure.chromosome import chromosome as create_chromosome -from .gene_structure.gene import gene as create_gene - -def random_initialization(population_size, chromosome_length, chromosome_impl, gene_impl): - """Takes the initialization inputs and choregraphs them to output the type of population - with the given parameters.""" - # Create the population object - population = create_population() - - # Fill the population with chromosomes - for i in range(population_size): - chromosome = create_chromosome() - #Fill the Chromosome with genes - for j in range(chromosome_length): - # Using the chromosome_impl to set every index inside of the chromosome - if chromosome_impl != None: - # Each chromosome location is specified with its own function - chromosome.add_gene(create_gene(chromosome_impl(j))) - # Will break if chromosome_length != len(lists) in domain - elif gene_impl != None: - # gene_impl = [range function,lowerbound,upperbound] - function = gene_impl[0] - chromosome.add_gene(create_gene(function(*gene_impl[1:]))) - else: - #Exit because either were not specified - print("Your domain or range were not specified") - population.add_chromosome(chromosome) - return population diff --git a/src/mutation/test_mutation.py b/src/initialization/test_examples.py similarity index 100% rename from src/mutation/test_mutation.py rename to src/initialization/test_examples.py diff --git a/src/mutation/__init__.py b/src/mutation/__init__.py index e69de29..c7e2fa1 100644 --- a/src/mutation/__init__.py +++ b/src/mutation/__init__.py @@ -0,0 +1,2 @@ +# FROM (. means local) file_name IMPORT function_name +from .examples import mutation_examples diff --git a/src/mutation/examples.py b/src/mutation/examples.py new file mode 100644 index 0000000..e97b9ff --- /dev/null +++ b/src/mutation/examples.py @@ -0,0 +1,3 @@ +class mutation_examples: + """Selection examples will go here """ + pass diff --git a/src/mutation/test_examples.py b/src/mutation/test_examples.py new file mode 100644 index 0000000..e69de29 diff --git a/src/selection/__init__.py b/src/selection/__init__.py index e69de29..b5f82e4 100644 --- a/src/selection/__init__.py +++ b/src/selection/__init__.py @@ -0,0 +1,2 @@ +# FROM (. means local) file_name IMPORT function_name +from .examples import selection_examples diff --git a/src/selection/examples.py b/src/selection/examples.py new file mode 100644 index 0000000..8920f7d --- /dev/null +++ b/src/selection/examples.py @@ -0,0 +1,3 @@ +class selection_examples: + """Selection examples will go here """ + pass diff --git a/src/selection/test_examples.py b/src/selection/test_examples.py new file mode 100644 index 0000000..e69de29 diff --git a/src/termination_point/__init__.py b/src/termination_point/__init__.py index acd51c7..55fe7e1 100644 --- a/src/termination_point/__init__.py +++ b/src/termination_point/__init__.py @@ -1,3 +1,2 @@ -# FROM (. means local) file_name IMPORT function_name -from .generation_based import generation_based -from .fitness_based import fitness_based +# FROM (. means local) file_name IMPORT class name +from .examples import termination_examples diff --git a/src/termination_point/examples.py b/src/termination_point/examples.py new file mode 100644 index 0000000..81d31f1 --- /dev/null +++ b/src/termination_point/examples.py @@ -0,0 +1,16 @@ +class termination_examples: + """Example functions that can be used to terminate the the algorithms loop""" + + def fitness_based(ga): + """Fitness based approach to terminate when the goal fitness has been reached""" + status = True + if(ga.current_fitness > ga.goal_fitness): + status = False + return status + + def generation_based(ga): + """Generation based approach to terminate when the goal generation has been reached""" + status = True + if(ga.current_generation > ga.max_generations): + status = False + return status diff --git a/src/termination_point/fitness_based.py b/src/termination_point/fitness_based.py deleted file mode 100644 index a809130..0000000 --- a/src/termination_point/fitness_based.py +++ /dev/null @@ -1,5 +0,0 @@ -def fitness_based(ga): - status = True - if(ga.current_fitness > ga.goal_fitness): - status = False - return status diff --git a/src/termination_point/generation_based.py b/src/termination_point/generation_based.py deleted file mode 100644 index 11df411..0000000 --- a/src/termination_point/generation_based.py +++ /dev/null @@ -1,7 +0,0 @@ -def generation_based(ga): - """Generation based approach to termination - If the current generation is - less then the """ - status = True - if(ga.current_generation > ga.max_generations): - status = False - return status diff --git a/src/termination_point/test_examples.py b/src/termination_point/test_examples.py new file mode 100644 index 0000000..e69de29