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))