示例#1
0
    def test_has_no_cycles(self):
        test_range = 100
        player = AntiCycler()
        for _ in range(test_range):
            player.play(axelrod.Cooperator())

        contains_no_cycles = player.history
        for slice_at in range(1, len(contains_no_cycles) + 1):
            self.assertIsNone(detect_cycle(contains_no_cycles[:slice_at]))
示例#2
0
    def test_has_no_cycles(self):
        test_range = 100
        player = AntiCycler()
        for _ in range(test_range):
            player.play(axelrod.Cooperator())

        contains_no_cycles = player.history
        for slice_at in range(1, len(contains_no_cycles) + 1):
            self.assertIsNone(detect_cycle(contains_no_cycles[:slice_at]))
示例#3
0
 def strategy(self, opponent: Player) -> Action:
     if self.cycle:
         return D
     cycle = detect_cycle(opponent.history, min_size=3)
     if cycle:
         if len(set(cycle)) > 1:
             self.cycle = cycle
             return D
     return C
示例#4
0
 def strategy(self, opponent: Player) -> Action:
     if self.cycle:
         return D
     cycle = detect_cycle(opponent.history, min_size=3)
     if cycle:
         if len(set(cycle)) > 1:
             self.cycle = cycle
             return D
     return C
示例#5
0
    def test_has_no_cycles(self):
        player = axl.AntiCycler()
        opponent = axl.Cooperator()
        match = axl.Match((player, opponent), turns=100)
        match.play()

        contains_no_cycles = player.history
        for slice_at in range(1, len(contains_no_cycles) + 1):
            self.assertIsNone(detect_cycle(contains_no_cycles[:slice_at]))
示例#6
0
文件: hunter.py 项目: 314pe/Axelrod
 def strategy(opponent):
     if len(opponent.history) < 10:
         return C
     if len(opponent.history) == opponent.cooperations:
         return C
     if detect_cycle(opponent.history, offset=15):
         return D
     else:
         return C
示例#7
0
 def strategy(self, opponent: Player) -> Action:
     turn = len(self.history)
     if turn == 20:
         self.cycle = detect_cycle(opponent.history)
         return self.extended_strategy(opponent)
     if turn > 20:
         return self.extended_strategy(opponent)
     else:
         play = self.joss_instance.strategy(opponent)
         self.joss_instance.history.append(play)
         return play
示例#8
0
 def strategy(self, opponent):
     turn = len(self.history)
     if turn == 20:
         self.cycle = detect_cycle(opponent.history)
         return self.extended_strategy(opponent)
     if turn > 20:
         return self.extended_strategy(opponent)
     else:
         play = self.joss_instance.strategy(opponent)
         self.joss_instance.history.append(play)
         return play
示例#9
0
 def strategy(self, opponent: Player) -> None:
     if len(opponent.history) < 10:
         return C
     if len(opponent.history) == opponent.cooperations:
         return C
     if len(opponent.history) % 10 == 0:
         # recheck
         self.cycle = detect_cycle(opponent.history, offset=10, min_size=3)
     if self.cycle:
         return D
     else:
         return C
示例#10
0
    def test_edge_case_calculator_sees_cycles_of_size_ten(self):
        seed = 3
        ten_length_cycle = [C, D, C, C, D, C, C, C, D, C]
        self.assertEqual(detect_cycle((ten_length_cycle * 2)),
                         tuple(ten_length_cycle))

        ten_cycle_twenty_rounds = get_joss_strategy_actions(
            ten_length_cycle * 2, indices_to_flip=[16])
        opponent_actions = ten_length_cycle * 2 + [C, D, C]
        expected = ten_cycle_twenty_rounds + [(D, C), (D, D), (D, C)]
        self.versus_test(axelrod.MockPlayer(opponent_actions),
                         expected,
                         seed=seed)
示例#11
0
    def test_edge_case_calculator_sees_cycles_of_size_ten(self):
        seed = 3
        ten_length_cycle = [C, D, C, C, D, C, C, C, D, C]
        self.assertEqual(detect_cycle((ten_length_cycle * 2)), tuple(ten_length_cycle))

        ten_cycle_twenty_rounds = get_joss_strategy_actions(
            ten_length_cycle * 2, indices_to_flip=[16]
        )
        opponent_actions = ten_length_cycle * 2 + [C, D, C]
        expected = ten_cycle_twenty_rounds + [(D, C), (D, D), (D, C)]
        self.versus_test(
            axelrod.MockPlayer(actions=opponent_actions),
            expected_actions=expected,
            seed=seed,
        )
示例#12
0
    def test_edge_case_calculator_ignores_cycles_gt_len_ten(self):
        seed = 3
        eleven_length_cycle = [D, D, C, C, D, C, C, C, D, C, D]
        twenty_rounds_of_eleven_len_cycle = eleven_length_cycle + eleven_length_cycle[:
                                                                                      9]
        twenty_rounds = get_joss_strategy_actions(
            twenty_rounds_of_eleven_len_cycle, indices_to_flip=[19])

        opponent_actions = twenty_rounds_of_eleven_len_cycle[:-1] + [D] + [
            C, D
        ]
        self.assertEqual(detect_cycle(opponent_actions),
                         tuple(eleven_length_cycle))

        uses_tit_for_tat_after_twenty_rounds = twenty_rounds + [(D, C), (C, D)]
        self.versus_test(axelrod.MockPlayer(opponent_actions),
                         uses_tit_for_tat_after_twenty_rounds,
                         seed=seed)
示例#13
0
    def test_edge_case_calculator_ignores_cycles_gt_len_ten(self):
        seed = 3
        eleven_length_cycle = [D, D, C, C, D, C, C, C, D, C, D]
        twenty_rounds_of_eleven_len_cycle = (
            eleven_length_cycle + eleven_length_cycle[:9]
        )
        twenty_rounds = get_joss_strategy_actions(
            twenty_rounds_of_eleven_len_cycle, indices_to_flip=[19]
        )

        opponent_actions = twenty_rounds_of_eleven_len_cycle[:-1] + [D] + [C, D]
        self.assertEqual(detect_cycle(opponent_actions), tuple(eleven_length_cycle))

        uses_tit_for_tat_after_twenty_rounds = twenty_rounds + [(D, C), (C, D)]
        self.versus_test(
            axelrod.MockPlayer(actions=opponent_actions),
            expected_actions=uses_tit_for_tat_after_twenty_rounds,
            seed=seed,
        )
示例#14
0
 def test_regression_test_can_detect_cycle_that_is_repeated_exactly_once(self):
     self.assertEqual(detect_cycle([C, D, C, D]), (C, D))
     self.assertEqual(detect_cycle([C, D, C, D, C]), (C, D))
示例#15
0
 def test_cycle_will_be_at_least_min_size(self):
     self.assertEqual(detect_cycle([C, C, C, C], min_size=1), (C, ))
     self.assertEqual(detect_cycle([C, C, C, C], min_size=2), (C, C))
示例#16
0
 def test_finds_cycle(self, cycle, period):
     history = cycle * period
     detected = detect_cycle(history)
     self.assertIsNotNone(detected)
     self.assertIn(''.join(map(str, detected)),
                   ''.join(map(str, (cycle))))
示例#17
0
    def test_no_cycle(self):
        history = [C, D, C, C]
        self.assertIsNone(detect_cycle(history))

        history = [D, D, C, C, C]
        self.assertIsNone(detect_cycle(history))
示例#18
0
 def test_regression_test_can_detect_cycle_that_is_repeated_exactly_once(self):
     self.assertEqual(detect_cycle([C, D, C, D]), (C, D))
     self.assertEqual(detect_cycle([C, D, C, D, C]), (C, D))
示例#19
0
 def test_finds_cycle(self, cycle, period):
     history = cycle * period
     detected = detect_cycle(history)
     self.assertIsNotNone(detected)
     self.assertIn("".join(map(str, detected)), "".join(map(str, (cycle))))
示例#20
0
 def test_cycle_will_be_at_least_min_size(self):
     self.assertEqual(detect_cycle([C, C, C, C], min_size=1), (C,))
     self.assertEqual(detect_cycle([C, C, C, C], min_size=2), (C, C))
示例#21
0
 def test_finds_cycle(self, cycle, period):
     history = cycle * period
     self.assertIsNotNone(detect_cycle(history))
示例#22
0
 def test_min_size_greater_than_two_times_history_tail_returns_none(self):
     self.assertIsNone(detect_cycle([C, C, C], min_size=2))
示例#23
0
 def test_cycle_that_never_fully_repeats_returns_none(self):
     cycle = [C, D, D]
     to_test = cycle + cycle[:-1]
     self.assertIsNone(detect_cycle(to_test))
示例#24
0
 def test_min_size_greater_than_two_times_max_size_has_no_effect(self):
     self.assertEqual(
         detect_cycle([C, C, C, C, C, C, C, C], min_size=2, max_size=3), (C, C)
     )
示例#25
0
 def test_cycle_greater_than_max_size_returns_none(self):
     self.assertEqual(detect_cycle([C, C, D] * 2, min_size=1, max_size=3), (C, C, D))
     self.assertIsNone(detect_cycle([C, C, D] * 2, min_size=1, max_size=2))
示例#26
0
 def test_min_size_greater_than_two_times_max_size_has_no_effect(self):
     self.assertEqual(detect_cycle([C, C, C, C, C, C, C, C], min_size=2, max_size=3), (C, C))
示例#27
0
 def test_cycle_that_never_fully_repeats_returns_none(self):
     cycle = [C, D, D]
     to_test = cycle + cycle[:-1]
     self.assertIsNone(detect_cycle(to_test))
示例#28
0
 def test_finds_cycle(self, cycle, period):
     history = cycle * period
     self.assertIsNotNone(detect_cycle(history))
示例#29
0
 def test_min_size_greater_than_two_times_history_tail_returns_none(self):
     self.assertIsNone(detect_cycle([C, C, C], min_size=2))
示例#30
0
    def test_no_cycle(self):
        history = [C, D, C, C]
        self.assertIsNone(detect_cycle(history))

        history = [D, D, C, C, C]
        self.assertIsNone(detect_cycle(history))
示例#31
0
 def test_cycle_greater_than_max_size_returns_none(self):
     self.assertEqual(detect_cycle([C, C, D] * 2, min_size=1, max_size=3), (C, C, D))
     self.assertIsNone(detect_cycle([C, C, D] * 2, min_size=1, max_size=2))
示例#32
0
文件: hunter.py 项目: 314pe/Axelrod
 def strategy(opponent):
     cycle = detect_cycle(opponent.history, min_size=2)
     if cycle:
         if len(set(cycle)) > 1:
             return D
     return C