Added extrapolation method
This commit is contained in:
@ -173,7 +173,7 @@ class Crossover_Methods:
|
|||||||
@genes_to_chromosome
|
@genes_to_chromosome
|
||||||
@values_to_genes
|
@values_to_genes
|
||||||
def average(ga, parent_1, parent_2):
|
def average(ga, parent_1, parent_2):
|
||||||
"""Cross two parents by taking a a weighted average of the genes."""
|
"""Cross two parents by taking the average of the genes."""
|
||||||
|
|
||||||
value_iter_1 = parent_1.gene_value_iter
|
value_iter_1 = parent_1.gene_value_iter
|
||||||
value_iter_2 = parent_2.gene_value_iter
|
value_iter_2 = parent_2.gene_value_iter
|
||||||
@ -186,3 +186,29 @@ class Crossover_Methods:
|
|||||||
yield (value_1+value_2)/2
|
yield (value_1+value_2)/2
|
||||||
except:
|
except:
|
||||||
raise ValueError("Could not take the average of the gene values. Use integer or float genes.")
|
raise ValueError("Could not take the average of the gene values. Use integer or float genes.")
|
||||||
|
|
||||||
|
|
||||||
|
@genes_to_chromosome
|
||||||
|
@values_to_genes
|
||||||
|
def extrapolate(ga, parent_1, parent_2):
|
||||||
|
"""Cross two parents by extrapolating towards the better parent.
|
||||||
|
May result in gene values outside the expected domain.
|
||||||
|
"""
|
||||||
|
|
||||||
|
# Swap so that parent 1 is the better parent.
|
||||||
|
if ga.target_fitness_type == 'min' and parent_1.fitness > parent_2.fitness:
|
||||||
|
parent_1, parent_2 = parent_2, parent_1
|
||||||
|
if ga.target_fitness_type == 'max' and parent_1.fitness < parent_2.fitness:
|
||||||
|
parent_1, parent_2 = parent_2, parent_1
|
||||||
|
|
||||||
|
value_iter_1 = parent_1.gene_value_iter
|
||||||
|
value_iter_2 = parent_2.gene_value_iter
|
||||||
|
|
||||||
|
for value_1, value_2 in zip(value_iter_1, value_iter_2):
|
||||||
|
if type(value_1) == type(value_2) == int:
|
||||||
|
yield value_1 + (value_1-value_2)//4
|
||||||
|
else:
|
||||||
|
try:
|
||||||
|
yield value_1 + (value_1-value_2)/4
|
||||||
|
except:
|
||||||
|
raise ValueError("Could not take the average of the gene values. Use integer or float genes.")
|
||||||
|
|||||||
Reference in New Issue
Block a user