Package Bio :: Package GA :: Package Crossover :: Module Uniform
[hide private]
[frames] | no frames]

Source Code for Module Bio.GA.Crossover.Uniform

 1  """Perform uniform crossovers between the genomes of two organisms. 
 2   
 3   
 4  genome 1 --       A B C D E F G 
 5                    .   . .   . 
 6  genome 2 --       a b c d e f g 
 7   
 8  After crossover: 
 9   
10  new genome 1 --  a B c d E f G 
11  new genome 2 --  A b C D e F g 
12   
13  Uniform Crossover is a standard crossover technique for 
14  rapid mutation-behavior.   
15  """ 
16  # standard modules 
17  import random 
18   
19 -class UniformCrossover:
20 """Perform single point crossover between genomes at some defined rates. 21 22 This performs a single crossover between two genomes at some 23 defined frequency. The location of the crossover is chosen randomly 24 if the crossover meets the probability to occur. 25 """
26 - def __init__(self, crossover_prob = .1, uniform_prob = 0.7):
27 """Initialize to do uniform crossover at the specified probability and frequency. 28 """ 29 self._crossover_prob = crossover_prob 30 self._uniform_prob = uniform_prob 31 return
32
33 - def do_crossover(self, org_1, org_2):
34 """Potentially do a crossover between the two organisms. 35 """ 36 new_org_1 = org_1.copy() 37 new_org_2 = org_2.copy() 38 39 # determine if we have a crossover 40 crossover_chance = random.random() 41 if crossover_chance <= self._crossover_prob: 42 minlen = min(len(new_org_1.genome),len(new_org_2.genome)) 43 for i in range( minlen ): 44 uniform_chance = random.random() 45 if uniform_chance <= self._uniform_prob: 46 # cycle element 47 temp = new_org_1.genome[i] 48 new_org_1.genome[i] = new_org_2.genome[i] 49 new_org_2.genome[i] = temp 50 51 return new_org_1, new_org_2
52