You may have missed some details in your code
623637719 opened this issue · 1 comments
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.