Ejemplo n.º 1
0
 def test_create_lookup_table_keys(self):
     expected = [
         (C, C, C), (C, C, D), (C, D, C), (C, D, D),
         (D, C, C), (D, C, D), (D, D, C), (D, D, D)
     ]
     actual = create_lookup_table_keys(1, 1, 1)
     self.assertEqual(actual, expected)
Ejemplo n.º 2
0
    def __init__(self,
                 plays,
                 op_plays,
                 op_start_plays,
                 initial_actions=None,
                 mutation_rate=None,
                 table=None):
        self.PlayerClass = LookerUp
        self.plays = plays
        self.op_plays = op_plays
        self.op_start_plays = op_start_plays

        if not initial_actions:
            table_depth = max(self.plays, self.op_plays, self.op_start_plays)
            initial_actions = [choice(C, D) for _ in range(table_depth)]
        self.initial_actions = initial_actions

        if mutation_rate is None:
            keys = create_lookup_table_keys(plays, op_plays, op_start_plays)
            self.mutation_rate = 2 / len(keys)
        else:
            self.mutation_rate = mutation_rate
        if table is None:
            self.randomize()
        else:
            # Make sure to copy the lists
            self.table = dict(table)
Ejemplo n.º 3
0
 def parse_repr(cls, s):
     elements = s.split(':')
     plays, op_plays, op_start_plays = list(map(int, elements[:3]))
     initial_actions, pattern = elements[-2:]
     keys = create_lookup_table_keys(plays, op_plays, op_start_plays)
     table = dict(zip(keys, pattern))
     return cls(plays, op_plays, op_start_plays,
                initial_actions=initial_actions, table=table)
Ejemplo n.º 4
0
 def parse_repr(cls, s):
     elements = s.split(':')
     plays, op_plays, op_start_plays = list(map(int, elements[:3]))
     initial_actions, pattern = elements[-2:]
     keys = create_lookup_table_keys(plays, op_plays, op_start_plays)
     table = dict(zip(keys, pattern))
     return cls(plays,
                op_plays,
                op_start_plays,
                initial_actions=initial_actions,
                table=table)
Ejemplo n.º 5
0
    def test_vector_to_instance(self):
        plays, op_plays, op_start_plays = 1, 1, 1
        player = axl.EvolvableGambler(parameters=(plays, op_plays,
                                                  op_start_plays))

        vector = [random.random() for _ in range(8)]
        player.receive_vector(vector)
        keys = create_lookup_table_keys(player_depth=plays,
                                        op_depth=op_plays,
                                        op_openings_depth=op_start_plays)
        action_dict = dict(zip(keys, vector))
        self.assertEqual(player._lookup.dictionary, action_dict)
Ejemplo n.º 6
0
    def test_player(self):
        plays, op_plays, op_start_plays = 1, 1, 1
        pattern = [0 for _ in range(8)]
        gambler = GamblerParams(plays=plays, op_plays=op_plays,
                                op_start_plays=op_start_plays, pattern=pattern)

        player =  gambler.player()
        keys = create_lookup_table_keys(player_depth=plays, op_depth=op_plays,
                                        op_openings_depth=op_start_plays)

        action_dict = dict(zip(keys, pattern))
        self.assertEqual(player.lookup_dict, action_dict)
Ejemplo n.º 7
0
    def test_zero_tables(self):
        """Test the corner case where n=0."""
        pattern = "CD"
        lookup_table_keys = create_lookup_table_keys(
            plays=0, op_plays=2, op_start_plays=0)

        lookup_table = dict(zip(lookup_table_keys, pattern))
        player = axelrod.LookerUp(lookup_table)
        self.assertEqual(player.plays, 0)
        opp = axelrod.Cooperator()
        # This shouldn't throw an exception.
        for _ in range(5):
            player.play(opp)
Ejemplo n.º 8
0
    def test_zero_tables(self):
        """Test the corner case where n=0."""
        pattern = "CD"
        lookup_table_keys = create_lookup_table_keys(plays=0,
                                                     opponent_start_plays=1)

        lookup_table = dict(zip(lookup_table_keys, pattern))
        player = axelrod.LookerUp(lookup_table)
        self.assertEqual(player.plays, 0)
        opp = axelrod.Cooperator()
        # This shouldn't throw an exception.
        for _ in range(5):
            player.play(opp)
Ejemplo n.º 9
0
 def test_create_lookup_table_keys(self):
     expected = [
         Plays((C, C), (C, ), ()),
         Plays((C, C), (D, ), ()),
         Plays((C, D), (C, ), ()),
         Plays((C, D), (D, ), ()),
         Plays((D, C), (C, ), ()),
         Plays((D, C), (D, ), ()),
         Plays((D, D), (C, ), ()),
         Plays((D, D), (D, ), ()),
     ]
     actual = create_lookup_table_keys(player_depth=2,
                                       op_depth=1,
                                       op_openings_depth=0)
     self.assertEqual(actual, expected)
     self.assertIsInstance(actual[0], Plays)
Ejemplo n.º 10
0
 def test_create_lookup_table_keys(self):
     expected = [
         Plays((C, C), (C,), ()),
         Plays((C, C), (D,), ()),
         Plays((C, D), (C,), ()),
         Plays((C, D), (D,), ()),
         Plays((D, C), (C,), ()),
         Plays((D, C), (D,), ()),
         Plays((D, D), (C,), ()),
         Plays((D, D), (D,), ()),
     ]
     actual = create_lookup_table_keys(
         player_depth=2, op_depth=1, op_openings_depth=0
     )
     self.assertEqual(actual, expected)
     self.assertIsInstance(actual[0], Plays)
Ejemplo n.º 11
0
    def test_vector_to_instance(self):
        plays, op_plays, op_start_plays = 1, 1, 1

        gambler_params = GamblerParams(plays=plays, op_plays=op_plays,
                                       op_start_plays=op_start_plays)

        vector = [random.random() for _ in range(8)]
        gambler_params.receive_vector(vector)
        instance = gambler_params.player()

        keys = create_lookup_table_keys(player_depth=plays, op_depth=op_plays,
                                        op_openings_depth=op_start_plays)

        action_dict = dict(zip(keys, vector))

        self.assertIsInstance(instance, axl.Gambler)
        self.assertEqual(instance.lookup_dict, action_dict)
Ejemplo n.º 12
0
    def __init__(self, plays, op_plays, op_start_plays, initial_actions=None,
                 mutation_probability=None, table=None):
        self.PlayerClass = LookerUp
        self.plays = plays
        self.op_plays = op_plays
        self.op_start_plays = op_start_plays

        if not initial_actions:
            table_depth = max(self.plays, self.op_plays, self.op_start_plays)
            initial_actions = [random.choice([C, D]) for _ in range(table_depth)]
        self.initial_actions = initial_actions

        if mutation_probability is None:
            keys = create_lookup_table_keys(plays, op_plays, op_start_plays)
            self.mutation_probability = 2 / len(keys)
        else:
            self.mutation_probability = mutation_probability
        if table is None:
            self.randomize()
        else:
            # Make sure to copy the lists
            self.table = dict(table)
Ejemplo n.º 13
0
 def random_params(plays, op_plays, op_start_plays):
     keys = create_lookup_table_keys(plays, op_plays, op_start_plays)
     # To get a pattern, we just randomly pick between C and D for each key
     pattern = ''.join([random.choice([C, D]) for _ in keys])
     table = dict(zip(keys, pattern))
     return table
Ejemplo n.º 14
0
    def random_params(plays, op_plays, op_start_plays):
        keys = create_lookup_table_keys(plays, op_plays, op_start_plays)

        pattern = [random.random() for _ in keys]
        return pattern
Ejemplo n.º 15
0
    def random_params(plays, op_plays, op_start_plays):
        keys = create_lookup_table_keys(plays, op_plays, op_start_plays)

        pattern = [random.random() for _ in keys]
        return pattern
Ejemplo n.º 16
0
 def random_params(plays, op_plays, op_start_plays):
     keys = create_lookup_table_keys(plays, op_plays, op_start_plays)
     # To get a pattern, we just randomly pick between C and D for each key
     pattern = [random.choice([C, D]) for _ in keys]
     table = dict(zip(keys, pattern))
     return table