File name changes to match the rest of framework. generation goal was setup twice in EasyGA.

This commit is contained in:
danielwilczak101
2020-10-08 15:53:35 -04:00
parent 3649293133
commit 88927f7415
19 changed files with 11 additions and 61 deletions

View File

@ -32,14 +32,13 @@ class GA:
# Termination variables # Termination variables
self.current_generation = 0 self.current_generation = 0
self.generation_goal = 50
self.current_fitness = 0 self.current_fitness = 0
self.generation_goal = 250 self.generation_goal = 250
self.fitness_goal = 9 self.fitness_goal = 9
# Mutation variables # Mutation variables
self.mutation_rate = 0.10 self.mutation_rate = 0.10
# Default EasyGA implimentation structure # Default EasyGA implimentation structure
self.initialization_impl = Initialization_Methods.random_initialization self.initialization_impl = Initialization_Methods.random_initialization
@ -52,7 +51,7 @@ class GA:
self.mutation_impl = Mutation_Methods.per_gene_mutation self.mutation_impl = Mutation_Methods.per_gene_mutation
# The type of termination to impliment # The type of termination to impliment
self.termination_impl = Termination_Methods.generation_based self.termination_impl = Termination_Methods.generation_based
def evolve_generation(self, number_of_generations = 1, consider_termination = True): def evolve_generation(self, number_of_generations = 1, consider_termination = True):
"""Evolves the ga the specified number of generations.""" """Evolves the ga the specified number of generations."""
@ -121,7 +120,7 @@ class GA:
else: else:
not_sorted_check += 1 not_sorted_check += 1
chromosome_set = chromosome_set_temp chromosome_set = chromosome_set_temp
return chromosome_set return chromosome_set

View File

@ -9,13 +9,13 @@ class Crossover_Methods:
""" """
def __init__(self): def __init__(self):
pass pass
def single_point_crossover(ga): def single_point_crossover(ga):
"""Single point crossover is when a "point" is selected and the genetic """Single point crossover is when a "point" is selected and the genetic
make up of the two parent chromosomes are "Crossed" or better known as swapped""" make up of the two parent chromosomes are "Crossed" or better known as swapped"""
crossover_pool = ga.population.mating_pool crossover_pool = ga.population.mating_pool
new_population = Population() new_population = Population()
for i in range(len(crossover_pool)): for i in range(len(crossover_pool)):
if i + 1 < len(crossover_pool): if i + 1 < len(crossover_pool):
@ -23,14 +23,14 @@ class Crossover_Methods:
parent_one = crossover_pool[i].get_genes() parent_one = crossover_pool[i].get_genes()
parent_two = crossover_pool[i+1].get_genes() parent_two = crossover_pool[i+1].get_genes()
#halfway_point = int(ga.chromosome_length/2) #halfway_point = int(ga.chromosome_length/2)
split_point = random.randint(0,ga.chromosome_length) split_point = random.randint(0,ga.chromosome_length)
new_gene_set.extend(parent_one[0:split_point]) new_gene_set.extend(parent_one[0:split_point])
new_gene_set.extend(parent_two[split_point:]) new_gene_set.extend(parent_two[split_point:])
new_chromosome = Chromosome(new_gene_set) new_chromosome = Chromosome(new_gene_set)
new_population.add_chromosome(new_chromosome) new_population.add_chromosome(new_chromosome)
return new_population return new_population
def multi_point_crossover(ga, number_of_points = 2): def multi_point_crossover(ga, number_of_points = 2):
"""Multi point crossover is when a specific number (More then one) of """Multi point crossover is when a specific number (More then one) of
"points" are created to merge the genetic makup of the chromosomes.""" "points" are created to merge the genetic makup of the chromosomes."""

View File

@ -1,3 +0,0 @@
class Crossover_methods:
"""Mutation examples will go here """
pass

View File

@ -1,16 +0,0 @@
class Fitness_methods:
"""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.gene_list:
# 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

View File

@ -1,12 +0,0 @@
class test_fitness_funciton:
def get_fitness(self, chromosome):
# For every gene in chromosome
for i in range(len(chromosome.genes)):
# If the gene has a five then add one to the fitness
# Example -> Chromosome = [5],[2],[2],[5],[5] then fitness = 3
if (chromosome.genes[i].get_value == 5):
# Add to the genes fitness
chromosome.genes[i].fitness += 1
# Add to the chromosomes fitness
chromosome.fitness += 1
return chromosome.fitness

View File

@ -1,3 +0,0 @@
class Mutation_methods:
"""Mutation examples will go here """
pass

View File

@ -1,2 +1,2 @@
# FROM (. means local) file_name IMPORT function_name # FROM (. means local) file_name IMPORT function_name
from .parent_selection import Parent_Selection from .parent_selection_methods import Parent_Selection

View File

@ -13,4 +13,5 @@ ga.gene_impl = [random.randrange,1,100]
ga.evolve() ga.evolve()
# Print the current population # Print the current population
print(f"Current Generation: {ga.current_generation}")
ga.population.print_all() ga.population.print_all()

View File

@ -1,2 +1,2 @@
# FROM (. means local) file_name IMPORT function_name # FROM (. means local) file_name IMPORT function_name
from .survivor_selection import Survivor_Selection from .survivor_selection_methods import Survivor_Selection

View File

@ -1,16 +0,0 @@
class Termination_methods:
"""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.fitness_goal):
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.generation_goal):
status = False
return status