Source code for axelrod.strategies.averagecopier

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

C, D = Action.C, Action.D


[docs]class AverageCopier(Player): """ The player will cooperate with probability p if the opponent's cooperation ratio is p. Starts with random decision. Names: - Average Copier: Original name by Geraint Palmer """ name = "Average Copier" 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] def strategy(self, opponent: Player) -> Action: if len(opponent.history) == 0: # Randomly picks a strategy (not affected by history). return random_choice(0.5) p = opponent.cooperations / len(opponent.history) return random_choice(p)
[docs]class NiceAverageCopier(Player): """ Same as Average Copier, but always starts by cooperating. Names: - Average Copier: Original name by Owen Campbell """ name = "Nice Average Copier" 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] def strategy(self, opponent: Player) -> Action: if len(opponent.history) == 0: return C p = opponent.cooperations / len(opponent.history) return random_choice(p)