Changed the way probabilities adapt work

This commit is contained in:
SimpleArt
2020-12-09 10:35:09 -05:00
parent f94a7ec9a8
commit a404eba685

View File

@ -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
)