-
Notifications
You must be signed in to change notification settings - Fork 273
SteinAndRapoport Strategy #1012
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Changes from 1 commit
204d498
100e511
23840d8
dc0fb13
5a6cc56
9c03615
b72e03c
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -8,6 +8,8 @@ | |
from axelrod.player import Player | ||
from axelrod.random_ import random_choice | ||
from.memoryone import MemoryOnePlayer | ||
from axelrod.strategy_transformers import FinalTransformer | ||
from scipy.stats import chisquare | ||
|
||
from typing import List, Dict, Tuple | ||
|
||
|
@@ -487,3 +489,69 @@ class UnnamedStrategy(Player): | |
def strategy(opponent: Player) -> Action: | ||
r = random.uniform(3, 7) / 10 | ||
return random_choice(r) | ||
|
||
@FinalTransformer((D, D), name_prefix=None) | ||
class SteinAndRapoport(Player): | ||
""" | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. This isn't quite formatted correctly (see: http://axelrod.readthedocs.io/en/stable/tutorials/contributing/strategy/docstrings.html). Can you remove one indentation level for the description (it should be at the same level as the Then can you add:
|
||
A player who plays according to statistic methods. | ||
Begins by playing C for the first four (4) rounds , then it plays | ||
tit for tat and at the last 2 round it Defects. Every 15 turns it | ||
run a chi-squared test to check whether the opponent behaves randomly | ||
or not . In case the opponent behaves randomly then Stein_and_Rapoport | ||
Defects untill the next 15 round (where we check again), otherwise he | ||
still plays TitForTat. | ||
""" | ||
|
||
name = 'Stein and Rapoport' | ||
classifier = { | ||
'memory_depth': 15, | ||
'stochastic': False, | ||
'makes_use_of': set(), | ||
'long_run_time': False, | ||
'inspects_source': False, | ||
'manipulates_source': False, | ||
'manipulates_state': False | ||
} | ||
|
||
def __init__(self, alpha: float=0.05) -> None: | ||
""" | ||
Parameters | ||
---------- | ||
alpha, float | ||
The significant level of pvalue from chi-squared test | ||
0.05 by default according to literature | ||
""" | ||
super().__init__() | ||
self.alpha = alpha | ||
if (self.alpha > 1) or (self.alpha < 0): | ||
self.alpha = 0.05 | ||
|
||
def strategy(self , opponent: Player , chi_tests = [0]) -> Action: | ||
# chi-tests == 0 then we play TitForTat | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I think you can remove this inline comment. |
||
round_number = len(self.history) + 1 | ||
|
||
# First 4 moves | ||
if round_number < 5 : | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
|
||
return C | ||
|
||
# For first 15 rounds tit for tat as we dont know opponents strategy | ||
if round_number < 16 : | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
|
||
if opponent.history[-1] == 'D' : | ||
return D | ||
else : | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
|
||
return C | ||
|
||
if len(self.history) % 15 == 0 : | ||
if chisquare([opponent.cooperations, opponent.defections]).pvalue >= self.alpha : | ||
chi_tests.append(1) | ||
else : | ||
chi_tests.append(0) | ||
|
||
if chi_tests[-1] == 1 : | ||
# Defect if opponent plays randomly | ||
return D | ||
else : # TitForTatat if opponent plays not randomly | ||
if opponent.history[-1] == 'D' : | ||
return D | ||
else : | ||
return C |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Lines 7,8,9 of this file look like:
So you can remove this line and just add
SteinAndRapoport
to the list imported there.