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   
20 -class UniformCrossover(object):
21 """Perform single point crossover between genomes at some defined rates. 22 23 This performs a single crossover between two genomes at some 24 defined frequency. The location of the crossover is chosen randomly 25 if the crossover meets the probability to occur. 26 """
27 - def __init__(self, crossover_prob = .1, uniform_prob = 0.7):
28 """Initialize to do uniform crossover at the specified probability and frequency. 29 """ 30 self._crossover_prob = crossover_prob 31 self._uniform_prob = uniform_prob 32 return
33
34 - def do_crossover(self, org_1, org_2):
35 """Potentially do a crossover between the two organisms. 36 """ 37 new_org_1 = org_1.copy() 38 new_org_2 = org_2.copy() 39 40 # determine if we have a crossover 41 crossover_chance = random.random() 42 if crossover_chance <= self._crossover_prob: 43 minlen = min(len(new_org_1.genome),len(new_org_2.genome)) 44 for i in range( minlen ): 45 uniform_chance = random.random() 46 if uniform_chance <= self._uniform_prob: 47 # cycle element 48 temp = new_org_1.genome[i] 49 new_org_1.genome[i] = new_org_2.genome[i] 50 new_org_2.genome[i] = temp 51 52 return new_org_1, new_org_2
53