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] best_chromosome = self.population[0]
tol = lambda i: self.dist(best_chromosome, self.population[i]) 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 # Too few converged: cross more and mutate less
if tol(amount_converged//2) > tol(amount_converged//4)*2: if tol(amount_converged//2) > tol(amount_converged//4)*2:
self.selection_probability = min( self.selection_probability = sum(
self.max_selection_probability, self.adapt_probability_rate * self.max_selection_probability,
self.selection_probability * multiplier (1-self.adapt_probability_rate) * self.selection_probability
) )
self.chromosome_mutation_rate = max( self.chromosome_mutation_rate = sum(
self.min_chromosome_mutation_rate, self.adapt_probability_rate * self.min_chromosome_mutation_rate,
self.chromosome_mutation_rate / multiplier (1-self.adapt_probability_rate) * self.chromosome_mutation_rate
) )
self.gene_mutation_rate = max( self.gene_mutation_rate = sum(
self.min_gene_mutation_rate, self.adapt_probability_rate * self.min_gene_mutation_rate,
self.gene_mutation_rate / multiplier (1-self.adapt_probability_rate) * self.gene_mutation_rate
) )
# Too many converged: cross less and mutate more # Too many converged: cross less and mutate more
else: else:
self.selection_probability = max( self.selection_probability = sum(
self.min_selection_probability, self.adapt_probability_rate * self.min_selection_probability,
self.selection_probability / multiplier (1-self.adapt_probability_rate) * self.selection_probability
) )
self.chromosome_mutation_rate = min( self.chromosome_mutation_rate = sum(
self.max_chromosome_mutation_rate, self.adapt_probability_rate * self.max_chromosome_mutation_rate,
self.chromosome_mutation_rate * multiplier (1-self.adapt_probability_rate) * self.chromosome_mutation_rate
) )
self.gene_mutation_rate = min( self.gene_mutation_rate = sum(
self.max_gene_mutation_rate, self.adapt_probability_rate * self.max_gene_mutation_rate,
self.gene_mutation_rate * multiplier (1-self.adapt_probability_rate) * self.gene_mutation_rate
) )