Axelrod-Python/Axelrod

You may have missed some details in your code

623637719 opened this issue · 1 comments

You may have missed some details in your code

The strategy shown in the image mentions defection in the last two rounds, but it doesn't appear in your code, nor does it when I run your code.

092450edd9f875e16f096189cce81b4

Thanks for the comment, always good to have someone check/question the accuracy of the code base.

On line 905 you'll see the application of a transformer to ensure the strategy defects on the last two plays.

There are a couple of reasons it is implemented like this (essentially knowing when the last two rounds happen is not always straightforward).

You can see in the tests specifically here: https://github.com/Axelrod-Python/Axelrod/blob/dev/axelrod/tests/strategies/test_axelrod_first.py#L664 that the strategy does act as intended.

        opponent = axl.Cooperator()
        actions = [(C, C), (C, C), (D, C), (D, C)]
        self.versus_test(opponent, expected_actions=actions)

        # Cooperator Test does noot defect if game length is unknown
        opponent = axl.Cooperator()
        actions = [(C, C), (C, C), (C, C), (C, C)]
        self.versus_test(
            opponent,
            expected_actions=actions,
            match_attributes={"length": float("inf")},
        )

The first versus_test ensures the last two interactions are (D,C), (D, C) so that the player in question defects the last two turns.

The second versus_test shows that when the length of a match is unknown the player in question just cooperates.