def breed(self, generation): splicer = GeneSplicer() children = [] for count in range(0, int(self.expected_children)): if count == 0: mum = copy.deepcopy(self.member_organisms[count]) else: mum = copy.deepcopy(self.member_organisms[random.randint(0, len(self.member_organisms) - 1)]) if random.random() < MATE_PROBABILITY: dad = copy.deepcopy(self.member_organisms[random.randint(0, len(self.member_organisms) - 1)]) junior = splicer.mate(mum, dad) junior["reproduction"] = "Mate" else: junior = mum splicer.mutate(junior) junior["reproduction"] = "Mutate" junior["parent"] = mum["id"] junior["id"] = ControlPanel.next_organism_number() junior["generation"] = generation junior["species"] = self.id children.append(junior) mutants = [] for child in children: if splicer.compatibility_scan(self.representative, child) < COMPATIBILITY_THRESHOLD: self.member_organisms.append(child) else: mutants.append(child) return mutants
def test_mating(self): genome1 = self.read_genome('CryogenicStorage/xor_genome.json') genome2 = self.read_genome('CryogenicStorage/xor_genome.json') del genome1["synapses"][2] del genome2["synapses"][6:9] genome2["synapses"][3]["weight"] = 1.5 splicer = GeneSplicer() print json.dumps(splicer.mate(genome1, genome2),indent=2)
def breed(self, generation): splicer = GeneSplicer() children = [] for count in range(0, int(self.expected_children)): if count == 0: mum = copy.deepcopy(self.member_organisms[count]) else: mum = copy.deepcopy(self.member_organisms[random.randint( 0, len(self.member_organisms) - 1)]) if random.random() < MATE_PROBABILITY: dad = copy.deepcopy(self.member_organisms[random.randint( 0, len(self.member_organisms) - 1)]) junior = splicer.mate(mum, dad) junior["reproduction"] = "Mate" else: junior = mum splicer.mutate(junior) junior["reproduction"] = "Mutate" junior["parent"] = mum["id"] junior["id"] = ControlPanel.next_organism_number() junior["generation"] = generation junior["species"] = self.id children.append(junior) mutants = [] for child in children: if splicer.compatibility_scan(self.representative, child) < COMPATIBILITY_THRESHOLD: self.member_organisms.append(child) else: mutants.append(child) return mutants