This commit is contained in:
danielwilczak101
2020-11-03 13:29:30 -05:00
2 changed files with 73 additions and 36 deletions

View File

@ -17,10 +17,10 @@ from mutation import Mutation_Methods
from crossover import Crossover_Methods from crossover import Crossover_Methods
# Default Attributes for the GA # Default Attributes for the GA
from attributes import attributes from attributes import Attributes
class GA(attributes): class GA(Attributes):
"""GA is the main class in EasyGA. Everything is run through the ga """GA is the main class in EasyGA. Everything is run through the ga
class. The GA class inherites all the default ga attributes from the class. The GA class inherites all the default ga attributes from the
attributes class. attributes class.
@ -29,9 +29,8 @@ class GA(attributes):
https://github.com/danielwilczak101/EasyGA/wiki https://github.com/danielwilczak101/EasyGA/wiki
""" """
# Inhert all the ga attributes from the attributes class. def __init__(self, attributes = None):
def __init__(self): super(GA, self).__init__({} if attributes is None else attributes)
super(GA, self).__init__()
def evolve_generation(self, number_of_generations = 1, consider_termination = True): def evolve_generation(self, number_of_generations = 1, consider_termination = True):

View File

@ -18,57 +18,95 @@ from survivor_selection import Survivor_Selection
from mutation import Mutation_Methods from mutation import Mutation_Methods
from crossover import Crossover_Methods from crossover import Crossover_Methods
class attributes: class Attributes:
"""Default GA attributes can be found here. If any attributes have not """Default GA attributes can be found here. If any attributes have not
been set then they will fall back onto the default attribute. All been set then they will fall back onto the default attribute. All
attributes have been catigorized to explain sections in the ga process.""" attributes have been catigorized to explain sections in the ga process."""
def __init__(self): def __init__(self, attributes):
# Default settings for the GA
default_attributes = {
'chromosome_length' : 10,
'population_size' : 10,
'chromosome_impl' : None,
'gene_impl' : lambda: random.randint(1, 10),
'population' : None,
'target_fitness_type' : 'max',
'update_fitness' : True,
'parent_ratio' : 0.10,
'selection_probability' : 0.50,
'tournament_size_ratio' : 0.10,
'current_generation' : 0,
'current_fitness' : 0,
'generation_goal' : 15,
'fitness_goal' : None,
'chromosome_mutation_rate' : 0.15,
'gene_mutation_rate' : 0.03,
'initialization_impl' : Initialization_Methods.random_initialization,
'fitness_function_impl' : Fitness_Examples.is_it_5,
'make_population' : create_population,
'make_chromosome' : create_chromosome,
'make_gene' : create_gene,
'parent_selection_impl' : Parent_Selection.Rank.tournament,
'crossover_individual_impl' : Crossover_Methods.Individual.single_point,
'crossover_population_impl' : Crossover_Methods.Population.sequential_selection,
'survivor_selection_impl' : Survivor_Selection.fill_in_best,
'mutation_individual_impl' : Mutation_Methods.Individual.single_gene,
'mutation_population_impl' : Mutation_Methods.Population.random_selection,
'termination_impl' : Termination_Methods.fitness_and_generation_based,
'database_name' : 'database.db'
}
# Filling in the default settings
for attribute in default_attributes.keys():
if attribute not in attributes.keys():
attributes[attribute] = default_attributes[attribute]
# Initilization variables # Initilization variables
self.chromosome_length = 10 self.chromosome_length = attributes['chromosome_length']
self.population_size = 10 self.population_size = attributes['population_size']
self.chromosome_impl = None self.chromosome_impl = attributes['chromosome_impl']
self.gene_impl = lambda: random.randint(1, 10) self.gene_impl = attributes['gene_impl']
self.population = None self.population = attributes['population']
self.target_fitness_type = 'max' self.target_fitness_type = attributes['target_fitness_type']
self.update_fitness = True self.update_fitness = attributes['update_fitness']
# Selection variables # Selection variables
self.parent_ratio = 0.1 self.parent_ratio = attributes['parent_ratio']
self.selection_probability = 0.75 self.selection_probability = attributes['selection_probability']
self.tournament_size_ratio = 0.1 self.tournament_size_ratio = attributes['tournament_size_ratio']
# Termination variables # Termination variables
self.current_generation = 0 self.current_generation = attributes['current_generation']
self.current_fitness = 0 self.current_fitness = attributes['current_fitness']
self.generation_goal = 15 self.generation_goal = attributes['generation_goal']
self.fitness_goal = None self.fitness_goal = attributes['fitness_goal']
# Mutation variables # Mutation variables
self.gene_mutation_rate = 0.03 self.chromosome_mutation_rate = attributes['chromosome_mutation_rate']
self.chromosome_mutation_rate = 0.15 self.gene_mutation_rate = attributes['gene_mutation_rate']
# Default EasyGA implimentation structure # Default EasyGA implimentation structure
self.initialization_impl = Initialization_Methods.random_initialization self.initialization_impl = attributes['initialization_impl']
self.fitness_function_impl = Fitness_Examples.is_it_5 self.fitness_function_impl = attributes['fitness_function_impl']
self.make_population = create_population self.make_population = attributes['make_population']
self.make_chromosome = create_chromosome self.make_chromosome = attributes['make_chromosome']
self.make_gene = create_gene self.make_gene = attributes['make_gene']
# Methods for accomplishing Parent-Selection -> Crossover -> Survivor_Selection -> Mutation # Methods for accomplishing Parent-Selection -> Crossover -> Survivor_Selection -> Mutation
self.parent_selection_impl = Parent_Selection.Rank.tournament self.parent_selection_impl = attributes['parent_selection_impl']
self.crossover_individual_impl = Crossover_Methods.Individual.single_point self.crossover_individual_impl = attributes['crossover_individual_impl']
self.crossover_population_impl = Crossover_Methods.Population.sequential_selection self.crossover_population_impl = attributes['crossover_population_impl']
self.survivor_selection_impl = Survivor_Selection.fill_in_best self.survivor_selection_impl = attributes['survivor_selection_impl']
self.mutation_individual_impl = Mutation_Methods.Individual.single_gene self.mutation_individual_impl = attributes['mutation_individual_impl']
self.mutation_population_impl = Mutation_Methods.Population.random_selection self.mutation_population_impl = attributes['mutation_population_impl']
# The type of termination to impliment # The type of termination to impliment
self.termination_impl = Termination_Methods.fitness_and_generation_based self.termination_impl = attributes['termination_impl']
# Database varibles # Database varibles
self.database_name = "database.db" self.database_name = attributes['database_name']
# Getter and setters for all required varibles # Getter and setters for all required varibles
@property @property