Changed the way probabilities adapt work
This commit is contained in:
@ -131,43 +131,40 @@ class GA(Attributes):
|
||||
best_chromosome = self.population[0]
|
||||
tol = lambda i: self.dist(best_chromosome, self.population[i])
|
||||
|
||||
# Change rates with:
|
||||
multiplier = 1 + self.adapt_probability_rate
|
||||
|
||||
# Too few converged: cross more and mutate less
|
||||
if tol(amount_converged//2) > tol(amount_converged//4)*2:
|
||||
|
||||
self.selection_probability = min(
|
||||
self.max_selection_probability,
|
||||
self.selection_probability * multiplier
|
||||
self.selection_probability = sum(
|
||||
self.adapt_probability_rate * self.max_selection_probability,
|
||||
(1-self.adapt_probability_rate) * self.selection_probability
|
||||
)
|
||||
|
||||
self.chromosome_mutation_rate = max(
|
||||
self.min_chromosome_mutation_rate,
|
||||
self.chromosome_mutation_rate / multiplier
|
||||
self.chromosome_mutation_rate = sum(
|
||||
self.adapt_probability_rate * self.min_chromosome_mutation_rate,
|
||||
(1-self.adapt_probability_rate) * self.chromosome_mutation_rate
|
||||
)
|
||||
|
||||
self.gene_mutation_rate = max(
|
||||
self.min_gene_mutation_rate,
|
||||
self.gene_mutation_rate / multiplier
|
||||
self.gene_mutation_rate = sum(
|
||||
self.adapt_probability_rate * self.min_gene_mutation_rate,
|
||||
(1-self.adapt_probability_rate) * self.gene_mutation_rate
|
||||
)
|
||||
|
||||
# Too many converged: cross less and mutate more
|
||||
else:
|
||||
|
||||
self.selection_probability = max(
|
||||
self.min_selection_probability,
|
||||
self.selection_probability / multiplier
|
||||
self.selection_probability = sum(
|
||||
self.adapt_probability_rate * self.min_selection_probability,
|
||||
(1-self.adapt_probability_rate) * self.selection_probability
|
||||
)
|
||||
|
||||
self.chromosome_mutation_rate = min(
|
||||
self.max_chromosome_mutation_rate,
|
||||
self.chromosome_mutation_rate * multiplier
|
||||
self.chromosome_mutation_rate = sum(
|
||||
self.adapt_probability_rate * self.max_chromosome_mutation_rate,
|
||||
(1-self.adapt_probability_rate) * self.chromosome_mutation_rate
|
||||
)
|
||||
|
||||
self.gene_mutation_rate = min(
|
||||
self.max_gene_mutation_rate,
|
||||
self.gene_mutation_rate * multiplier
|
||||
self.gene_mutation_rate = sum(
|
||||
self.adapt_probability_rate * self.max_gene_mutation_rate,
|
||||
(1-self.adapt_probability_rate) * self.gene_mutation_rate
|
||||
)
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user