Skip to content
Snippets Groups Projects
Commit 92eddbce authored by Sepehr Madani's avatar Sepehr Madani
Browse files

Refactored some functions

parent ea9bbae2
No related branches found
No related tags found
No related merge requests found
...@@ -34,16 +34,14 @@ class GeneticAlgorithm(BaseAlgorithm): ...@@ -34,16 +34,14 @@ class GeneticAlgorithm(BaseAlgorithm):
self.mutation_factor = options.mutation_factor self.mutation_factor = options.mutation_factor
self.check_parameters() self.check_parameters()
self.chromosomes = [
Chromosome(self.N, self.bit_count) for i in range(self.sample_size)
]
self.update_fitness()
self.sort_fitness()
def check_parameters(self): def check_parameters(self):
super().check_parameters() super().check_parameters()
def solve(self): def solve(self):
self.intialize_sample()
self.update_fitness()
self.sort_fitness()
for generation in range(self.gen_to_repeat): for generation in range(self.gen_to_repeat):
for ii in range(self.sample_size // 2, self.sample_size - 1, 2): for ii in range(self.sample_size // 2, self.sample_size - 1, 2):
p1, p2 = random.sample(range(self.sample_size // 2), 2) p1, p2 = random.sample(range(self.sample_size // 2), 2)
...@@ -53,9 +51,7 @@ class GeneticAlgorithm(BaseAlgorithm): ...@@ -53,9 +51,7 @@ class GeneticAlgorithm(BaseAlgorithm):
self.sort_fitness() self.sort_fitness()
# print(["{:.2f}".format(x.fitness) for x in self.chromosomes[:15]]) # print(["{:.2f}".format(x.fitness) for x in self.chromosomes[:15]])
return [ return self.make_weights(self.chromosomes[0])
cmath.exp(1j * self.get_angle(bits)) for bits in self.chromosomes[0].gene
]
def mutate_sample(self): def mutate_sample(self):
for chromosome in self.chromosomes[1:]: # for all except the best chromosome for chromosome in self.chromosomes[1:]: # for all except the best chromosome
...@@ -70,9 +66,7 @@ class GeneticAlgorithm(BaseAlgorithm): ...@@ -70,9 +66,7 @@ class GeneticAlgorithm(BaseAlgorithm):
for x in compute_pattern( for x in compute_pattern(
N=self.N, N=self.N,
k=self.k, k=self.k,
weights=[ weights=self.make_weights(chromosome),
cmath.exp(1j * self.get_angle(bits)) for bits in chromosome.gene
],
degrees=self.null_degrees, degrees=self.null_degrees,
) )
] ]
...@@ -81,10 +75,12 @@ class GeneticAlgorithm(BaseAlgorithm): ...@@ -81,10 +75,12 @@ class GeneticAlgorithm(BaseAlgorithm):
def sort_fitness(self): def sort_fitness(self):
self.chromosomes.sort(key=lambda x: x.fitness, reverse=True) self.chromosomes.sort(key=lambda x: x.fitness, reverse=True)
def get_angle(self, bits): def make_weights(self, chromosome):
return ( weights = []
(bits - (2 ** self.bit_count - 1) / 2) * 2 * pi / (2 ** self.bit_resolution) for bits in chromosome.gene:
) angle = (bits - (2 ** self.bit_count - 1) / 2) * 2 * pi / (2 ** self.bit_resolution)
weights.append(cmath.exp(1j * angle))
return weights
def crossover(self, p1, p2, c1, c2): def crossover(self, p1, p2, c1, c2):
self.chromosomes[c1] = deepcopy(self.chromosomes[p1]) self.chromosomes[c1] = deepcopy(self.chromosomes[p1])
...@@ -95,3 +91,8 @@ class GeneticAlgorithm(BaseAlgorithm): ...@@ -95,3 +91,8 @@ class GeneticAlgorithm(BaseAlgorithm):
self.chromosomes[c1].gene[i], self.chromosomes[c1].gene[i],
self.chromosomes[c2].gene[i], self.chromosomes[c2].gene[i],
) )
def intialize_sample(self):
self.chromosomes = [
Chromosome(self.N, self.bit_count) for i in range(self.sample_size)
]
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment