def test_mutate(self): """Test to trigger random lines in mutate""" for seed in [18, 22]: player = axl.EvolvableFSMPlayer(num_states=4, mutation_probability=0.5, seed=seed) player.mutate()
def test_init(self): transitions = [[0, C, 1, D], [0, D, 0, D], [1, C, 1, C], [1, D, 1, D]] player = axl.EvolvableFSMPlayer(transitions=transitions, initial_action=D, initial_state=1) self.assertEqual(player.num_states, 2) self.assertEqual(player.fsm.transitions(), transitions) self.assertEqual(player.initial_action, D) self.assertEqual(player.initial_state, 1)
def test_vector_to_instance(self): num_states = 4 vector = [random.random() for _ in range(num_states * 4 + 1)] player = axelrod.EvolvableFSMPlayer(num_states=num_states) player.receive_vector(vector) self.assertIsInstance(player, axelrod.EvolvableFSMPlayer) serialized = player.serialize_parameters() deserialized_player = player.__class__.deserialize_parameters(serialized) self.assertEqual(player, deserialized_player) self.assertEqual(deserialized_player, deserialized_player.clone())
def test_atomic_mutation_fsm(self): axelrod.seed(12) players = [axelrod.EvolvableFSMPlayer(num_states=2, initial_state=1, initial_action=C) for _ in range(5)] mp = MoranProcess(players, turns=10, mutation_method="atomic") population = mp.play() self.assertEqual( mp.winning_strategy_name, 'EvolvableFSMPlayer: ((0, C, 1, D), (0, D, 1, C), (1, C, 0, D), (1, D, 1, C)), 1, C, 2, 0.1') self.assertEqual(len(mp.populations), 31) self.assertTrue(mp.fixated)
def test_init(self): transitions = [[0, C, 1, D], [0, D, 0, D], [1, C, 1, C], [1, D, 1, D]] player = axl.EvolvableFSMPlayer( transitions=transitions, initial_action=D, initial_state=1, seed=1, # To prevent exception from unset seed. ) self.assertEqual(player.num_states, 2) self.assertEqual(player.fsm.transitions(), transitions) self.assertEqual(player.initial_action, D) self.assertEqual(player.initial_state, 1)
def test_atomic_mutation_fsm(self): players = [ axl.EvolvableFSMPlayer(num_states=2, initial_state=1, initial_action=C, seed=4) for _ in range(5) ] mp = MoranProcess(players, turns=10, mutation_method="atomic", seed=12) rounds = 10 for _ in range(rounds): next(mp) self.assertEqual( list(sorted(mp.populations[-1].items()))[0][0], 'EvolvableFSMPlayer: ((0, C, 0, C), (0, D, 1, C), (1, C, 1, D), (1, D, 1, D)), 0, D, 2, 0.1, 2240802643' ) self.assertEqual(len(mp.populations), 11) self.assertFalse(mp.fixated)
def test_create_vector_bounds(self): num_states = 4 player = axl.EvolvableFSMPlayer(num_states=num_states) lb, ub = player.create_vector_bounds() self.assertEqual(lb, [0] * (4 * num_states + 1)) self.assertEqual(ub, [1] * (4 * num_states + 1))