Source code for axelrod.strategies.inverse

from axelrod.action import Action
from axelrod.player import Player
from axelrod.random_ import random_choice

C, D = Action.C, Action.D

[docs]class Inverse(Player): """A player who defects with a probability that diminishes relative to how long ago the opponent defected. Names: - Inverse: Original Name by Karol Langner """ name = "Inverse" classifier = { "memory_depth": float("inf"), # Long memory "stochastic": True, "makes_use_of": set(), "long_run_time": False, "inspects_source": False, "manipulates_source": False, "manipulates_state": False, }
[docs] @staticmethod def strategy(opponent: Player) -> Action: """Looks at opponent history to see if they have defected. If so, player defection is inversely proportional to when this occurred. """ # calculate how many turns ago the opponent defected index = next( ( index for index, value in enumerate(opponent.history[::-1], start=1) if value == D ), None, ) if index is None: return C return random_choice(1 - 1 / abs(index))