diff --git a/src/EasyGA.py b/src/EasyGA.py index ef9dff8..98a3f7a 100644 --- a/src/EasyGA.py +++ b/src/EasyGA.py @@ -12,6 +12,7 @@ from initialization.random_initialization import random_initialization class GA: def __init__(self): # Default variables + self.domain = range(1, 100) self.population = None self.generations = 3 self.chromosome_length = 4 @@ -27,13 +28,15 @@ class GA: #self.termination_impl = GenerationTermination(Total_generations) #self.evaluation_impl = TestEvaluation() - def initialize(self): + if isinstance(self.domain, range): + self.domain = [x/float(100) for x in range(int(min(self.domain)*100), int(max(self.domain)*100))] # Create the first population self.population = self.initialization_impl( self.population_size, self.chromosome_length, - self.gene_function_impl) + self.gene_function_impl, + self.domain) def evolve(): # If you just want to evolve through all generations diff --git a/src/initialization/gene_function/gene_random.py b/src/initialization/gene_function/gene_random.py index dbcc874..8d75556 100644 --- a/src/initialization/gene_function/gene_random.py +++ b/src/initialization/gene_function/gene_random.py @@ -1,13 +1,5 @@ # Imported library import random -def check_values(low,high): - #Check to make sure its not less then zero - assert low > 0 , "The random gene low can not be less then zero" - # Check to make sure the high value is not - # lower than or equal to low and not 0. - assert high > low , "High value can not be smaller then low value" - assert high != 0, "High value can not be zero" - -def random_gene(): - return random.randint(1,100) +def random_gene(domain): + return domain[random.randint(0, len(domain)-1)] diff --git a/src/initialization/population_structure/population.py b/src/initialization/population_structure/population.py index 2aaf699..f2167bc 100644 --- a/src/initialization/population_structure/population.py +++ b/src/initialization/population_structure/population.py @@ -36,8 +36,7 @@ class population: self.fitness = fitness def __repr__(self): - for index in range(len(self.chromosomes)): - return f'{self.chromosomes[index]}' + return ''.join([chromosome.__repr__() for chromosome in self.chromosomes]) def print_all(self): # Ex .Current population diff --git a/src/initialization/random_initialization.py b/src/initialization/random_initialization.py index cdef3ef..1e82457 100644 --- a/src/initialization/random_initialization.py +++ b/src/initialization/random_initialization.py @@ -3,7 +3,7 @@ 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(chromosome_length,population_size,gene_function): +def random_initialization(chromosome_length, population_size, gene_function, domain): # Create the population object population = create_population() # Fill the population with chromosomes @@ -11,6 +11,6 @@ def random_initialization(chromosome_length,population_size,gene_function): chromosome = create_chromosome() #Fill the Chromosome with genes for j in range(chromosome_length): - chromosome.add_gene(create_gene(gene_function())) + chromosome.add_gene(create_gene(gene_function(domain))) population.add_chromosome(chromosome) return population diff --git a/src/run_testing.py b/src/run_testing.py index 7259af4..fa2e265 100644 --- a/src/run_testing.py +++ b/src/run_testing.py @@ -3,18 +3,12 @@ import EasyGA # Create the Genetic algorithm ga = EasyGA.GA() -#Creating a gene with no fitness -gene1 = ga.make_gene("Im a gene") -gene2 = ga.make_gene("Im also a gene") -#Creating a Chromosome with no genes -chromosome = ga.make_chromosome() -chromosome.add_gene(gene1) -chromosome.add_gene(gene2) -# Creating a populaiton -populaiton = ga.make_population() -populaiton.add_chromosome(chromosome) +# input domain +#ga.domain = range(3, 10) +ga.domain = ['left', 'right'] -print(gene1) -print(chromosome) -print(populaiton) -populaiton.print_all() +# initialize random population +ga.initialize() + +# Print population +ga.population.print_all()