Beispiel #1
0
class Agent:
    def __init__(self, dna = -1):
        # Genetic
        if dna == -1:
            self.dna = DNA()
        else:
            self.dna = deepcopy(dna)
            self.dna.mutate()

        # Copying evaluation function
        m, b = self.dna.eval_data
        self.evaluate = lambda x: m * x + b > 0

        # Cultural
        self.meme = np.random.choice([0, 1], size = str_len)

    def fitness(self, goal):
        c       = self.dna.cultural
        guess   = self.meme if c else self.dna.guess
        m       = 1 - brain_cost if c else 1

        return hamming_fitness(guess, goal) * m

    def reproduce(self):
        return Agent(self.dna)

    def __repr__(self):
        return str(self.dna)

    def copies(self, copied, goal):
        fitness_diff = copied.fitness(goal) - self.fitness(goal)

        if fitness_diff > 0:
            self.meme = mutate_meme(deepcopy(copied.meme))

        '''
 def test_dna_mutation(self):
     dna = DNA("asdfghjkzxcvbnm")
     mutated_dna = dna.mutate(20, self.nucleotides)
     self.assertNotEqual(dna, mutated_dna)
     self.assertEquals(len(dna.structure), len(mutated_dna.structure))