Changed the way probabilities adapt work
This commit is contained in:
@ -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
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user