Ejemplo n.º 1
0
    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
Ejemplo n.º 2
0
    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)
Ejemplo n.º 3
0
    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