def test_copy(self): g = Genome(2, 2) # Test to make sure the copy is the same as the original msg = 'Copy is different from the original!' g.add_connection(0, 2) g.add_connection(0, 3) g.add_node(0) gc = g.copy() self.assertEqual(len(g.get_nodes()), len(gc.get_nodes()), msg) self.assertEqual(len(g.get_connections()), len(gc.get_connections()), msg) for i in range(len(g.get_connections())): self.assertEqual(g.get_connections()[i].weight, gc.get_connections()[i].weight, msg) # Test to make sure the copy doesn't change when the original does msg = 'Copy changes when original changes!' g.add_node(1) g.get_connections()[0].weight = 50 self.assertNotEqual(len(g.get_nodes()), len(gc.get_nodes()), msg) self.assertNotEqual(len(g.get_connections()), len(gc.get_connections()), msg) self.assertNotEqual(g.get_connections()[0].weight, gc.get_connections()[0].weight, msg)
def test_kill_percentage(self): e = Ecosystem(dc=1.0, ec=1.0, wc=0.4) # Create genomes g = Genome(2, 2, ecosystem=e) g2 = Genome(2, 2, ecosystem=e) g3 = Genome(2, 2, ecosystem=e) # Add connections and/or nodes g.add_connection(0, 2, weight=1.0) g.add_connection(0, 3, weight=1.0) g.add_connection(1, 2, weight=1.0) g2.add_connection(0, 2, weight=0.9) g2.add_connection(0, 3, weight=1.0) g2.add_connection(1, 2, weight=1.0) g2.add_connection(1, 3, weight=1.0) g3.add_connection(0, 2, weight=0.1) g3.add_connection(0, 3, weight=1.0) g3.add_connection(1, 2, weight=1.0) g3.add_connection(1, 3, weight=1.0) g3.add_node(0) g3.add_node(1) g3.add_node(2) g3.add_connection(0, 6, weight=1.0) g3.add_connection(1, 5, weight=1.0) g.add_node(1) # Test to make sure the correct amount are killed msg = 'Incorrect percentage killed!' for i in range(10): g_copy = g.copy() g2_copy = g2.copy() g3_copy = g3.copy() g_copy.fitness = random.randrange(0, 200) g2_copy.fitness = random.randrange(0, 200) g3_copy.fitness = random.randrange(0, 200) e.add_genome(g_copy) e.add_genome(g2_copy) e.add_genome(g3_copy) e.kill_percentage(50) for s in e.species: self.assertAlmostEqual(len(s), 5, msg=msg, delta=1) self.assertAlmostEqual(len(e.get_population()), 15, msg=msg, delta=1) for i in range(5): g_copy = g.copy() g2_copy = g2.copy() g3_copy = g3.copy() g_copy.fitness = random.randrange(0, 200) g2_copy.fitness = random.randrange(0, 200) g3_copy.fitness = random.randrange(0, 200) e.add_genome(g_copy) e.add_genome(g2_copy) e.add_genome(g3_copy) e.kill_percentage(25) for s in e.species: self.assertAlmostEqual(len(s), 8, msg=msg, delta=1) self.assertAlmostEqual(len(e.get_population()), 24, msg=msg, delta=1) for i in range(2): g_copy = g.copy() g2_copy = g2.copy() g3_copy = g3.copy() g_copy.fitness = random.randrange(0, 200) g2_copy.fitness = random.randrange(0, 200) g3_copy.fitness = random.randrange(0, 200) e.add_genome(g_copy) e.add_genome(g2_copy) e.add_genome(g3_copy) e.kill_percentage(75) for s in e.species: self.assertAlmostEqual(len(s), 3, msg=msg, delta=1) self.assertAlmostEqual(len(e.get_population()), 9, msg=msg, delta=1) e.kill_percentage(12) for s in e.species: self.assertAlmostEqual(len(s), 3, msg=msg, delta=1) self.assertAlmostEqual(len(e.get_population()), 9, msg=msg, delta=1) # Test with a larger population e.create_initial_population(100, parent_genome=g) e.add_genome(g2.copy()) e.add_genome(g3.copy()) e.kill_percentage(90) self.assertAlmostEqual(len(e.get_population()), 12, msg=msg, delta=3)