Added iterable features
This commit is contained in:
@ -43,14 +43,14 @@ class Crossover_Methods:
|
||||
class Individual:
|
||||
"""Methods for crossing parents."""
|
||||
|
||||
def single_point(ga, parent_one, parent_two):
|
||||
def single_point(ga, parent_1, parent_2):
|
||||
"""Cross two parents by swapping genes at one random point."""
|
||||
|
||||
swap_index = random.randint(0, parent_one.size()-1)
|
||||
return ga.make_chromosome(parent_one.get_gene_list()[:swap_index] + parent_two.get_gene_list()[swap_index:])
|
||||
swap_index = random.randint(0, len(parent_1)-1)
|
||||
return ga.make_chromosome(parent_1[:swap_index] + parent_2[swap_index:])
|
||||
|
||||
|
||||
def multi_point(ga, parent_one, parent_two):
|
||||
def multi_point(ga, parent_1, parent_2):
|
||||
"""Cross two parents by swapping genes at multiple points."""
|
||||
pass
|
||||
|
||||
@ -58,9 +58,9 @@ class Crossover_Methods:
|
||||
def uniform(ga, parent_1, parent_2):
|
||||
"""Cross two parents by swapping all genes randomly."""
|
||||
|
||||
return ga.make_chromosome([ # Make a new chromosome
|
||||
random.choice([gene_1, gene_2]) # by randomly selecting genes
|
||||
for gene_1, gene_2 in zip(parent_1.gene_list, parent_2.gene_list)]) # from each parent
|
||||
return ga.make_chromosome([ # Make a new chromosome
|
||||
random.choice([gene_1, gene_2]) # by randomly selecting genes
|
||||
for gene_1, gene_2 in zip(parent_1, parent_2)]) # from each parent
|
||||
|
||||
|
||||
class Arithmetic:
|
||||
@ -69,9 +69,12 @@ class Crossover_Methods:
|
||||
def int_random(ga, parent_1, parent_2):
|
||||
"""Cross two parents by taking a random integer value between each of the genes."""
|
||||
|
||||
return ga.make_chromosome([ # Make a new chromosome
|
||||
ga.make_gene(random.randint(*sorted([data_1, data_2]))) # by randomly selecting integer genes between
|
||||
for data_1, data_2 in zip(iter(parent_1), iter(parent_2))]) # each parents' genes
|
||||
value_list_1 = parent_1.gene_value_list
|
||||
value_list_2 = parent_2.gene_value_list
|
||||
|
||||
return ga.make_chromosome([ # Make a new chromosome
|
||||
ga.make_gene(random.randint(*sorted([value_1, value_2]))) # by randomly selecting integer genes between
|
||||
for value_1, value_2 in zip(value_list_1, value_list_2)]) # each parents' genes
|
||||
|
||||
|
||||
def int_weighted(ga, parent_1, parent_2):
|
||||
@ -80,19 +83,25 @@ class Crossover_Methods:
|
||||
# the percentage of genes taken from the first gene
|
||||
weight = 0.25
|
||||
|
||||
return ga.make_chromosome([ # Make a new chromosome
|
||||
ga.make_gene(int( # filled with new integer genes
|
||||
weight*data_1+(1-weight)*data_2 # with weight% from gene 1 and
|
||||
)) # (100-weight)% from gene 2
|
||||
for data_1, data_2 in zip(iter(parent_1), iter(parent_2))]) # from each parents' genes
|
||||
value_list_1 = parent_1.gene_value_list
|
||||
value_list_2 = parent_2.gene_value_list
|
||||
|
||||
return ga.make_chromosome([ # Make a new chromosome
|
||||
ga.make_gene(int( # filled with new integer genes
|
||||
weight*value_1+(1-weight)*value_2 # with weight% from gene 1 and
|
||||
)) # (100-weight)% from gene 2
|
||||
for value_1, value_2 in zip(value_list_1, value_list_2)]) # from each parents' genes
|
||||
|
||||
|
||||
def float_random(ga, parent_one, parent_two):
|
||||
"""Cross two parents by taking a random numeric value between each of the genes."""
|
||||
|
||||
return ga.make_chromosome([ # Make a new chromosome
|
||||
ga.make_gene(random.uniform([data_1, data_2])) # by randomly selecting integer genes between
|
||||
for data_1, data_2 in zip(iter(parent_1), iter(parent_2))]) # from each parents' genes
|
||||
value_list_1 = parent_1.gene_value_list
|
||||
value_list_2 = parent_2.gene_value_list
|
||||
|
||||
return ga.make_chromosome([ # Make a new chromosome
|
||||
ga.make_gene(random.uniform([value_1, value_2])) # by randomly selecting integer genes between
|
||||
for value_1, value_2 in zip(value_list_1, value_list_2)]) # from each parents' genes
|
||||
|
||||
|
||||
def float_weighted(ga, parent_one, parent_two):
|
||||
@ -101,8 +110,11 @@ class Crossover_Methods:
|
||||
# the percentage of genes taken from the first gene
|
||||
weight = 0.25
|
||||
|
||||
return ga.make_chromosome([ # Make a new chromosome
|
||||
ga.make_gene( # filled with new float genes
|
||||
weight*data_1+(1-weight)*data_2 # with weight% from gene 1 and
|
||||
) # (100-weight)% from gene 2
|
||||
for data_1, data_2 in zip(iter(parent_1), iter(parent_2))]) # from each parents' genes
|
||||
value_list_1 = parent_1.gene_value_list
|
||||
value_list_2 = parent_2.gene_value_list
|
||||
|
||||
return ga.make_chromosome([ # Make a new chromosome
|
||||
ga.make_gene( # filled with new float genes
|
||||
weight*value_1+(1-weight)*value_2 # with weight% from gene 1 and
|
||||
) # (100-weight)% from gene 2
|
||||
for value_1, value_2 in zip(value_list_1, value_list_2)]) # from each parents' genes
|
||||
|
||||
Reference in New Issue
Block a user