From bcd3e595a2cf5a64bab8b7d17101b021053e3ca7 Mon Sep 17 00:00:00 2001 From: Denis Date: Thu, 2 Nov 2017 12:44:06 +0100 Subject: [PATCH 01/24] added MemoryDecay draft (no test) --- axelrod/strategies/.memory_decay.py.swp | Bin 0 -> 12288 bytes axelrod/strategies/_strategies.py | 3 +- axelrod/strategies/memory_decay.py | 68 ++++++++++++++++++++++++ docs/reference/all_strategies.rst | 3 ++ 4 files changed, 73 insertions(+), 1 deletion(-) create mode 100644 axelrod/strategies/.memory_decay.py.swp create mode 100644 axelrod/strategies/memory_decay.py diff --git a/axelrod/strategies/.memory_decay.py.swp b/axelrod/strategies/.memory_decay.py.swp new file mode 100644 index 0000000000000000000000000000000000000000..c49d712ada9d006a902780184285b77e16c63886 GIT binary patch literal 12288 zcmeHN&u<(x7LoRKc@7voo`$&AG@Uz4ea${C%IFKigTw zgXLGZF4D8XGQsmCA@jFxzV(jW4WO@eH4oN3?g74Qn&O@XnF7SEm_E2q15sXsUW zEIs-3D|hSR+q?o^0k42pz$@St@CtYZyaHZ<|Cs_hnL@fB*mb1R>u6UjkQw zw}1h_fKA{$aN}`8z5p%&f1M!Y8t^&r8E^r(i8};80zUxPfNy{gfJ5MQ;053*;Krkb z`~mz9dv5ja zbyBbAvEsc(jcF~Y8;u4LQ8i9lipNnfiltKh0~U|DYSS0#a?^(6Fp>5xPv@<6!<6x1 zIk=aGOKCCJe1-vMIZKB!X~F!eBWL~TH8#_u>9S#x#hTChysJgqp)z>8Dup7uLT}1^ zm+4kJD6ZE{S~AOIiW_*<7~w1Csgr77D2=;!My2kV%7uwHV@eV8#XS5dh>5w12 zl;<*Ua!a{jDqva0)8W)_P`J3f*xjpQ(D}q!7;;RUy9zk5A$4dOagSb#*@Wk9x_F+h zg<8n8M~DpvA9a_R%v#~T6d`Y6UPipN+^L4>rlpO?_B9S`6Kl-0|J&?ktNR`;CfM02 zDuXB%SuHCp70lzKXawO>VK#e^r)*bK(Z`utlR>{PQlb0(+SJnWaRcko7;DBTxre+d+ooj|caKJ~ zWQMtTx>Fl;Rp0H{{zl)aU!!GbHq5Haahcv-k;Z~xK_bNhF}w#?7Z+j1L>9<8^#!3jl;4s9xP>gI7sTTqdWV@an$?PfDFPmJD5LA>914YPg${Tq6Rwc;FnNG|gdXr*v2$SDX4M+o-RCs3 zyVHVl8IOz1R7MoL-E;#(Q|Up`eRja%)SVmHCs+zETEev(6b!CQi7Ye|KMk3^jj4IH_%vYsDPVu|`5%!3-HYI3{fbI4I50 zgTs0>u@$B<5;<0PnN5(QFzP}ynQ2qG$V!{Et>T!%DYD){3au80Re(2lYz6qG9py49 qXI~_l%yseBac71j6u0AP!I+-tjn<%;>w@ImHyO+xm!%mO1^E{|u`SL3 literal 0 HcmV?d00001 diff --git a/axelrod/strategies/_strategies.py b/axelrod/strategies/_strategies.py index e5c906452..d9fb86119 100644 --- a/axelrod/strategies/_strategies.py +++ b/axelrod/strategies/_strategies.py @@ -49,6 +49,7 @@ EvolvedLookerUp1_1_1, EvolvedLookerUp2_2_2, Winner12, Winner21) from .mathematicalconstants import Golden, Pi, e +from .memory_decay import MemoryDecay from .memoryone import ( MemoryOnePlayer, ALLCorALLD, FirmButFair, GTFT, SoftJoss, StochasticCooperator, StochasticWSLS, WinStayLoseShift, WinShiftLoseStay, @@ -193,7 +194,7 @@ MathConstantHunter, NaiveProber, MEM2, - Michaelos, + MemoryDecay, MindBender, MindController, MindReader, diff --git a/axelrod/strategies/memory_decay.py b/axelrod/strategies/memory_decay.py new file mode 100644 index 000000000..6c7b26dd2 --- /dev/null +++ b/axelrod/strategies/memory_decay.py @@ -0,0 +1,68 @@ +from axelrod.action import Action +from axelrod.player import Player +from axelrod import TitForTat +from random import random,choice + +C, D = Action.C, Action.D + +class MemoryDecay(Player): + """ + A player utilizes the Tit for Tat stretegy for the first (default) 15 turns, + at the same time memorizing the opponent's decisions. After the 15 turns have + passed, the player calculates a 'net cooperation score' (NCS) for his opponent, + weighing decisions to Cooperate as (default) 1, and to Defect as (default) + -2. If the opponent's NCS is 0 or below, the player Defects; otherwise, + he Cooperates. + + The player's memories of his opponent's decisions have a random chance to be + altered (i.e., a C decision becomes D or vice versa; default probability + is 0.03) or deleted (default probability is 0.1). + + Name: Memory Decay + """ + name = 'Memory Decay' + classifier = { + 'stochastic' : True, + 'inspects_source' : False, + 'manipulates_source' : False, + 'manipulates_state' : False + } + + def __init__(self, p_memory_delete: float = 0.03, p_memory_alter: float = 0.1, + loss_value: float = -2, gain_value: float = 1, + memory: list = []): + super().__init__() + self.p_memory_delete = p_memory_delete + self.p_memory_alter = p_memory_alter + self.loss_value = loss_value + self.gain_value = gain_value + self.memory = memory + + def gain_loss_tr(self): + self.gloss_values = [*map(lambda x: self.loss_value if x == D else + self.gain_value, self.memory)] + + def mem_alter(self): + alter = choice(range(0, len(self.memory))) + self.memory[alter] = self.memory[alter].flip() + + def mem_delete(self): + self.memory.pop(choice(range(0, len(self.memory)))) + + def strategy(self, opponent: Player) -> Action: + try: + self.memory.append(opponent.history[-1]) + except IndexError: + pass + if len(self.history) < 15: + return TitForTat().strategy(opponent) + else: + if random() <= self.p_memory_alter: + self.mem_alter() + if random() <= self.p_memory_delete: + self.mem_delete() + self.gain_loss_tr() + if sum(self.gloss_values) < 0: + return D + else: + return C diff --git a/docs/reference/all_strategies.rst b/docs/reference/all_strategies.rst index 746b643eb..fa9e08e95 100644 --- a/docs/reference/all_strategies.rst +++ b/docs/reference/all_strategies.rst @@ -102,6 +102,9 @@ Here are the docstrings of all the strategies in the library. .. automodule:: axelrod.strategies.mathematicalconstants :members: :undoc-members: +.. automodule:: axelrod.strategies.memorydecay + :members: + :undoc-members: .. automodule:: axelrod.strategies.memorytwo :members: :undoc-members: From 56026052b5de5917d96218af1c46ba48964d0691 Mon Sep 17 00:00:00 2001 From: Denis Date: Thu, 2 Nov 2017 12:50:38 +0100 Subject: [PATCH 02/24] added no. of turns param --- axelrod/strategies/.memory_decay.py.swp | Bin 12288 -> 12288 bytes axelrod/strategies/memory_decay.py | 4 ++-- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/axelrod/strategies/.memory_decay.py.swp b/axelrod/strategies/.memory_decay.py.swp index c49d712ada9d006a902780184285b77e16c63886..f30389139191636db7fad338449f09d9a89f6078 100644 GIT binary patch delta 269 zcmZojXh;xEG6?hZRj|-AU;qLE28Lv|-;v8UioTa;Rc2*i@Sn`7&|lBZ&A{-1i-F-F z5KjT(d?5A$VqGBC0b&6lKFZ0!Pz%I0K%5N320;9igMr}(5Z?phML@g|h;xBB0f@DM zSOAFsvokOp0^$ik+yulyKx_!a3_yI3je%hw8v{SXWFVsoh% Action: self.memory.append(opponent.history[-1]) except IndexError: pass - if len(self.history) < 15: + if len(self.history) < self.start_strategy_duration: return TitForTat().strategy(opponent) else: if random() <= self.p_memory_alter: From 3f5426dcb151cb66019128a002df3e943c01352b Mon Sep 17 00:00:00 2001 From: Denis Date: Thu, 2 Nov 2017 14:03:29 +0100 Subject: [PATCH 03/24] fixed list in __init__ --- axelrod/strategies/.memory_decay.py.swp | Bin 12288 -> 0 bytes axelrod/strategies/memory_decay.py | 12 ++++++++---- 2 files changed, 8 insertions(+), 4 deletions(-) delete mode 100644 axelrod/strategies/.memory_decay.py.swp diff --git a/axelrod/strategies/.memory_decay.py.swp b/axelrod/strategies/.memory_decay.py.swp deleted file mode 100644 index f30389139191636db7fad338449f09d9a89f6078..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12288 zcmeHNO^X~w7_JqJA2AyB50sn3&gg9KOhPbB+`zKyh6ssbRzbru*7Q`*6m)krT{XKq zF;Vd7Nr(qU5ESv0pCE!?e zzJ2L3Jr{Hdu9Jj>$NqljTSAuho+4z#Q=!cJBd(!{gXJ1U~~m0k?r~fRBNF;9cNl;921AaYB9r zeg$p;SApZe?@to)1Mn#zf!BalpaYx)et81ifEz#vbb&t~2N&QD@HOxikO1!iF99ck ze;y;`N8l6SBj8P-2N2*6bod^)1zZOvfYs(999vJ>E8rFI3jBu((1k1KdYY$nlhohy zSn+=2jcF}Rw;By1qH3D76py1|980AJdn}%E)uyk|ZqtXeVImz^JDs=M4Ob?HwZYLc zoGXjD<_i`Gma}vulNQ{sJL7CHKZ#~~G($FAvRL!Qn1_0_9V&Bkhd^mW8Ug^s^r~(wQORP_0%qFAcE_A>D zL_(`bb)WXmqO{8H^Lv$ApGL7{#@XuWPED8UeXnEtn<1D}GjewpGpV|CgYKDHv(>5I z3YXUBP5WtBtt2cJ*)+ysTZL5tw-wr_+pH{rdu`-24=W?b(OQXAWjxey^FR|UMd5@g zEkYAzC!ccHKa8>9h)D1pdc04JyObpy4=b1L>0i2KPXDghmgVJTd%psUKCQRAXx9f5a(+gn#u@@PS_qtP`Bw|DPbw1 zXo=7+DLCAe5`}68$}wI&9neb=)o3c0O}MGVGkYMyt)=>>qs8h#aywbY+G#S5mHNSma|A zR-w#MR4uS?(+Je-Lb)2jTrsICQx{s`!_G-@-LPKJU@mJwHzI7sw!L?jnlB(uYRht? z7$Z8>D2VGAA>#*otYv^**6dE$>Blqs!Zb!A#{y7R6Qn4dI*O(;Z7CO3X^Xa1>}1$z zHajSx^3CXL%)bsaT7zP&3nLf4X~FD{ JTDoy8$iG4rL}>s3 diff --git a/axelrod/strategies/memory_decay.py b/axelrod/strategies/memory_decay.py index 5e385b714..35c9dc774 100644 --- a/axelrod/strategies/memory_decay.py +++ b/axelrod/strategies/memory_decay.py @@ -1,6 +1,6 @@ from axelrod.action import Action from axelrod.player import Player -from axelrod import TitForTat +from .titfortat import TitForTat from random import random,choice C, D = Action.C, Action.D @@ -11,7 +11,7 @@ class MemoryDecay(Player): at the same time memorizing the opponent's decisions. After the 15 turns have passed, the player calculates a 'net cooperation score' (NCS) for his opponent, weighing decisions to Cooperate as (default) 1, and to Defect as (default) - -2. If the opponent's NCS is 0 or below, the player Defects; otherwise, + -2. If the opponent's NCS is below 0, the player Defects; otherwise, he Cooperates. The player's memories of his opponent's decisions have a random chance to be @@ -22,7 +22,10 @@ class MemoryDecay(Player): """ name = 'Memory Decay' classifier = { + 'memory_depth' : float('inf'), + 'long_run_time' : False, 'stochastic' : True, + 'makes_use_of' : set(), 'inspects_source' : False, 'manipulates_source' : False, 'manipulates_state' : False @@ -30,13 +33,14 @@ class MemoryDecay(Player): def __init__(self, p_memory_delete: float = 0.03, p_memory_alter: float = 0.1, loss_value: float = -2, gain_value: float = 1, - memory: list = [], start_strategy_duration = int: 15): + memory: list = None, start_strategy_duration: int = 15): super().__init__() self.p_memory_delete = p_memory_delete self.p_memory_alter = p_memory_alter self.loss_value = loss_value self.gain_value = gain_value - self.memory = memory + self.memory = [] if memory == None else memory + self.start_strategy_duration = start_strategy_duration def gain_loss_tr(self): self.gloss_values = [*map(lambda x: self.loss_value if x == D else From 0ce447fa2e899cdb8c602580e61b92e6a27e24d5 Mon Sep 17 00:00:00 2001 From: vdeni <30746378+vdeni@users.noreply.github.com> Date: Thu, 2 Nov 2017 20:07:16 +0100 Subject: [PATCH 04/24] Update writing_test_for_the_new_strategy.rst --- .../contributing/strategy/writing_test_for_the_new_strategy.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/tutorials/contributing/strategy/writing_test_for_the_new_strategy.rst b/docs/tutorials/contributing/strategy/writing_test_for_the_new_strategy.rst index 10af266b3..c5b3287cd 100644 --- a/docs/tutorials/contributing/strategy/writing_test_for_the_new_strategy.rst +++ b/docs/tutorials/contributing/strategy/writing_test_for_the_new_strategy.rst @@ -23,7 +23,7 @@ argument :code:`seed` (useful and necessary for stochastic strategies, expected_actions=[(D, C), (C, D), (C, C)], seed=None) In this case the player is tested against an opponent that will cycle through -:code:`C, D`. The :code:`expected_actions` are the actions player by both +:code:`C, D`. The :code:`expected_actions` are the actions played by both the tested player and the opponent in the match. In this case we see that the player is expected to play :code:`D, C, C` against :code:`C, D, C`. From 43a8a0d295ec95b828ce5bf3425cc0a791eaf106 Mon Sep 17 00:00:00 2001 From: vdeni <30746378+vdeni@users.noreply.github.com> Date: Fri, 3 Nov 2017 10:46:10 +0100 Subject: [PATCH 05/24] fixed typo --- .../contributing/strategy/writing_test_for_the_new_strategy.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/tutorials/contributing/strategy/writing_test_for_the_new_strategy.rst b/docs/tutorials/contributing/strategy/writing_test_for_the_new_strategy.rst index c5b3287cd..b72c48e23 100644 --- a/docs/tutorials/contributing/strategy/writing_test_for_the_new_strategy.rst +++ b/docs/tutorials/contributing/strategy/writing_test_for_the_new_strategy.rst @@ -52,7 +52,7 @@ assumes that players do not know the length of the match:: The function :code:`versus_test` also accepts a dictionary parameter of keyword arguments that dictate how the player is initiated. For example this -test how the player plays when initialised with :code:`p=1`:: +tests how the player plays when initialised with :code:`p=1`:: actions = [(C, C), (C, D), (C, C), (C, D)] self.versus_test(axelrod.Alternator(), expected_actions=actions, From 404148ec5d39f07c9eecdc2c67e25e4aefb5b678 Mon Sep 17 00:00:00 2001 From: Denis Date: Fri, 3 Nov 2017 13:04:10 +0100 Subject: [PATCH 06/24] updated memdecay code --- axelrod/strategies/.memory_decay.py.swp | Bin 0 -> 12288 bytes axelrod/strategies/.titfortat.py.swp | Bin 0 -> 16384 bytes axelrod/strategies/memory_decay.py | 9 +++-- .../strategies/.test_memory_decay.py.swp | Bin 0 -> 12288 bytes .../tests/strategies/.test_memorytwo.py.swp | Bin 0 -> 12288 bytes .../tests/strategies/.test_titfortat.py.swp | Bin 0 -> 16384 bytes axelrod/tests/strategies/test_memory_decay.py | 34 ++++++++++++++++++ 7 files changed, 40 insertions(+), 3 deletions(-) create mode 100644 axelrod/strategies/.memory_decay.py.swp create mode 100644 axelrod/strategies/.titfortat.py.swp create mode 100644 axelrod/tests/strategies/.test_memory_decay.py.swp create mode 100644 axelrod/tests/strategies/.test_memorytwo.py.swp create mode 100644 axelrod/tests/strategies/.test_titfortat.py.swp create mode 100644 axelrod/tests/strategies/test_memory_decay.py diff --git a/axelrod/strategies/.memory_decay.py.swp b/axelrod/strategies/.memory_decay.py.swp new file mode 100644 index 0000000000000000000000000000000000000000..0d8adb237466b305dd0166501a3898c7d233caa2 GIT binary patch literal 12288 zcmeHNJ8T?97#@c=B!Ci8Q7{;!yMy!koG4OsiIFUupa><36!VhhoW^^zcO&+8Ry%XH zFA+&aLq(a0h9U)zG^C~iDjG@(M3ATubVxKP1>el<-tL|gyP*NiN}ty|^UweI=G&RI zJX@W&&z+~If)2s;EFnAR@4a{V5SiO}nUFqDgfi_1Tw5ZR1DUY{%*ZwCaB)qB;}K7^ zT3p%XaVGnVEWazAG0g{ptHlu?$!yZ=^N>w~baIeu-|rdl4D83iSVs$|j*t__m+Y(l z()^3`*wMH48{zvr1D*lTfM>un;2H1?cm_NJo`L@v13H}}*HP1un;2H1?cm_NJo&nE*XTUSy8So5v2L6K#us$K5K19fG4%cYORp5^&3Hc0Az`H;Txc3AhKLU4vtH2rHF!0Ocgxm$b0d{~zAOM~N zetnFPFM%(BkAZdI67T|W6!`g3j03&`G|&Q`2mW}3kne$;zz*;Z&<2hHbAaLPC*Tfn z%W&u~&wyuOUk2#EdSzUXvssU(akj1YY)2(@l~h}Kta!K9VtRAawOWUWs2Y!&ipNnf zh^11!Z5EHYYSA;aQ}^L)m`HloPG`+l&6SB^ZE)rZ2cBZC`HTgEWi08-Q4{W$opIWm z9+5I5>LF_`S*-bN%zZuD0j0yetmKT?q{}l~8~HQKbT4n6YzD<|O_`=L!LhHhcq9?? z#Bn$jO5?znq3=F!di^m@h6$OJS(y@3rW7&1n2Ya*Jk|7E(&xLcXPM0Ewgtlo60kJo zNq?GAkO$vbSlTSJ)7iv%=yS}qJDE1I$+l@xOP5}Z*@R~;y6_rZ30;Q7rh^~Vkf}_Y z;ZTZ@H!+n1-t4r?;@wQPaM`gYU_}eYO{+`p=XS$R)h5j~;r!%{K@^L$A|z`H%Y(D1 zCE?UFn**xb|FX3YjOguq(XNuw+9btbXI6QCkl@BEBbGK}Hrnbly4!UlOA`v&?9%0B zx<-vMtt-Qr4OYBiv-#RMN>`<6NUJr}lPYx$!>f(;v+E7orRzeUmDxJe&DICA_EqOo z!S0DN?WqrUQ)jB*GzAuq%k%g6GT>< zP)J8-=(Cg8-s_^IqD!M#GUI3Ac)P-5*}mk)8=*~0F`{bER$dP21WT1(OKY{WbE56u z=~76I5lcimj&TT9VF|^}Xzna4WNwPD+sJVimPTcb4UwpnhZ=4kXfk5&Bg|Owo{UT! z#i8no3oOXtkSQ%ftNd)tE1j`S2EA;Y^t2e=Hvu<4*w0cuG~+G7P2?3d@*rW1o5_rzc?}ZYJ!!J^f49%<12T?U|pSxAzOM=+bJxBT*>Y2|6cQRA$skuuq$qEjErd zO*6U0a7tO|3AKhxt-yM-lfq#s0v@y}qpKJk3Wc49Zt+l#xWY06m)lsl={C<4I}M9H zUahnBA*ZR`4jRh6tT@O_Wkj*POm_@)6%iC2vTcr_Zg0oJ%o0S=5}{pDaJVWZULYd~ zm+`{!fS!w}Mpv;3!R3Y3OQx_b9?KnyoyBy!RKQ_mba0wVG-f+O<+HfM#b79sK_wkT zo`$1LP5En42pQiWCN<}-)@zG5TQTp~B8Myvot9B!BjK8cc`=4w70L|4X(II&jX-gg zB_}kzkfso2L}6r>lX}HuJww2h(}1o-_}sDmOD8El4HL(+&2pt+WvrowE0`YR2aCGR z0L!{rG4M4tnAir>8Ho%FOd%yukvnxM8d+K$=aRIFZRQ^Z*t1vL(9d%IX%OJaeIx{H zghZJf6;m%psmyf#)OI_xGYGWMUAzq C1I;x6 literal 0 HcmV?d00001 diff --git a/axelrod/strategies/.titfortat.py.swp b/axelrod/strategies/.titfortat.py.swp new file mode 100644 index 0000000000000000000000000000000000000000..9eebd964912eb87056441a69e3977298b9fa6970 GIT binary patch literal 16384 zcmeI2O^h7H701hgwG$h{N0dt>q?g^`okcTa??M9E$PtbgJ17Agvn+}hYgE%yvs3YO zSF5UK#uH+25JW;EAD85ipj?0xNJwx&;y?}&vZ9DH$qj*!l1qpZ2?-43U)9y~v18-q zzyYY%{-$U9Rlllw_3HKOnra^0xbrT$t$vWAak)jGh#*;vi3*pk8=u+p}bw%pe9;pOy3d9*;Z zz)mc1HM@Cb*-!O_`ESzKuD@?5H^nm10?`7|0?`7|0?`7|0?`7|0?`7W6ARdU4|^DW z`BLc5xp3aK?fg+V9t+ohu}%JAkmuq0?x3L5^Ffe58szhU;4|apM_A&MfcoO^`{0?w%E0_m!;GMmU{RR99 zJPyu)0qBEGuoqnT3S;kscfh~FdGKrSOYj(wU<1s9Iq>$E8G98x4ITy$fDLdTI0C*7 z{;`L#zk}Do%fNsHG{OB~1JuEOa3k0Q{hqo4(T0B!*9%|QuN2NBFQq>pCU2BOpg=s+Zkvu$@CDsjwZ@V*b)u z|B3r(G3A-edtL1RFb!8wEUwZ~-Zh2Z*&?c^lTn%KSdYw1E)okRmnzX!*;YgMvWAuE z#WbY+G}_QJqM_Pogb}u~G*N-ED(P^8ojOpW(i%FdG_7;HSQu`8e!l2(jV@Jk zm5yt~cY!7VRaa7vIjhCxn^dR_pmjpBMiBr88_PNaAV^~wj3Iap&LSs zAO^5);kjJriYugmDN)uFdOKIuj8WgY?Xp;s(qgh zdy{;AXP%D@pT^Xi-#+E$r>9(PJSQCRtEr0j6TTV4*C)C&{i+KYd*@3HR zk$15f&N;o{N$J_nDeXW7ANxekReI{QUmZF`n`>2Ciyk%=+doAQlh()c74JPW{&jCx z4G0?`UBGoCO?Vu_$7aI$NuK>wW|G!;5eVU#6F2S5F-IOzhOQmBrH_DxMRcE#KloVMTJLmh07n^{W3|@>ckm6v;U| zT&u{6oW&Ms9gk#;f)>>0TB@FL=?L-<>!PTiO&FwdbY{Z3_f$CQR5(9~aPE}X=p@fo zjy=gpib@qTC4JG!ObWR!S~Tb=O669^Qd3YSFuN6<7(#~R%PAl5VI7Sx9I1t*nS5Tw zE%FOWcm|i$eRRwazKb(F&Aa1%xQ-R|Dl6cIxXbxsqFN&K8G6eWJ5L>GX)Tf%BpRIB zTx!hVzR*pyw6IBdn4zO>pWa&xlFK18TcK@H=-=&>Kqf{bUE-K2k==-6^WJFRpnQD$RGx!c% z2V*@MlaAmS2q!Eur#k)%-`0wjt!ti~{$Y`j;d^Fa_f+UA-hq&0Ph44IZLLxYyV~oe zWg6JsUfzU=kvd+b#Eo!s#^yx%_${s7K`4yb@#;7t_zD|iX~77RciI34$Zcti_C z3q%V<3q%V<3q%V<3q%V<3q%V<3w#kQ;MOzT5mwhm@ADJucE$U2QLOl!S@A1{el1QK z{G{f7)bWc%?l(79%H7%hE;3%HD Action: except IndexError: pass if len(self.history) < self.start_strategy_duration: - return TitForTat().strategy(opponent) + return self.strategies[self.start_strategy].strategy(opponent) else: if random() <= self.p_memory_alter: self.mem_alter() diff --git a/axelrod/tests/strategies/.test_memory_decay.py.swp b/axelrod/tests/strategies/.test_memory_decay.py.swp new file mode 100644 index 0000000000000000000000000000000000000000..954c1ec63b153b57594a105e082a18f59236e569 GIT binary patch literal 12288 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 literal 0 HcmV?d00001 diff --git a/axelrod/tests/strategies/test_memory_decay.py b/axelrod/tests/strategies/test_memory_decay.py new file mode 100644 index 000000000..c9c1a9fec --- /dev/null +++ b/axelrod/tests/strategies/test_memory_decay.py @@ -0,0 +1,34 @@ +"""Tests for the Memory Decay strategy""" + +from inspect import getargspec +import axelrod +from axelrod.tests.strategies.test_player import TestPlayer + +C, D = axelrod.Action.C, axelrod.Action.D + +class TestMemoryDecay(TestPlayer): + + name = 'MemoryDecay' + player = axelrod.MemoryDecay + expected_classifier = { + 'memory_depth': float('inf'), + 'stochastic': True, + 'makes_use_of': set(), + 'long_run_time': False, + 'inspects_source': False, + 'manipulates_source': False, + 'manipulates_state': False + } + + def test_strategy(self): + """Test TitForTat behavior in first 15 turns""" + opponent = axelrod.MockPlayer(actions = [C, C]) + actions = [(C, C), (C, C), (C, C), (C, C)] + self.versus_test(opponent, expected_actions = actions) + + opponent = axelrod.MockPlayer(actions = [D, D]) + actions = [(C, D), (D, D), (D, D), (D, D)] + self.versus_test(opponent, expected_actions = actions) + +t = TestMemoryDecay() +t.test_strategy() From e318b9a2678368af46fd280369f53fe9610bcd26 Mon Sep 17 00:00:00 2001 From: Denis Date: Fri, 3 Nov 2017 19:25:15 +0100 Subject: [PATCH 07/24] switching MemoryDecay to MetaPlayer class --- axelrod/strategies/.memory_decay.py.swp | Bin 12288 -> 0 bytes axelrod/strategies/.titfortat.py.swp | Bin 16384 -> 0 bytes axelrod/strategies/_strategies.py | 2 -- axelrod/strategies/memory_decay.py | 20 ++++++++++++------ .../strategies/.test_memory_decay.py.swp | Bin 12288 -> 0 bytes .../tests/strategies/.test_memorytwo.py.swp | Bin 12288 -> 0 bytes .../tests/strategies/.test_titfortat.py.swp | Bin 16384 -> 0 bytes 7 files changed, 14 insertions(+), 8 deletions(-) delete mode 100644 axelrod/strategies/.memory_decay.py.swp delete mode 100644 axelrod/strategies/.titfortat.py.swp delete mode 100644 axelrod/tests/strategies/.test_memory_decay.py.swp delete mode 100644 axelrod/tests/strategies/.test_memorytwo.py.swp delete mode 100644 axelrod/tests/strategies/.test_titfortat.py.swp diff --git a/axelrod/strategies/.memory_decay.py.swp b/axelrod/strategies/.memory_decay.py.swp deleted file mode 100644 index 0d8adb237466b305dd0166501a3898c7d233caa2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12288 zcmeHNJ8T?97#@c=B!Ci8Q7{;!yMy!koG4OsiIFUupa><36!VhhoW^^zcO&+8Ry%XH zFA+&aLq(a0h9U)zG^C~iDjG@(M3ATubVxKP1>el<-tL|gyP*NiN}ty|^UweI=G&RI zJX@W&&z+~If)2s;EFnAR@4a{V5SiO}nUFqDgfi_1Tw5ZR1DUY{%*ZwCaB)qB;}K7^ zT3p%XaVGnVEWazAG0g{ptHlu?$!yZ=^N>w~baIeu-|rdl4D83iSVs$|j*t__m+Y(l z()^3`*wMH48{zvr1D*lTfM>un;2H1?cm_NJo`L@v13H}}*HP1un;2H1?cm_NJo&nE*XTUSy8So5v2L6K#us$K5K19fG4%cYORp5^&3Hc0Az`H;Txc3AhKLU4vtH2rHF!0Ocgxm$b0d{~zAOM~N zetnFPFM%(BkAZdI67T|W6!`g3j03&`G|&Q`2mW}3kne$;zz*;Z&<2hHbAaLPC*Tfn z%W&u~&wyuOUk2#EdSzUXvssU(akj1YY)2(@l~h}Kta!K9VtRAawOWUWs2Y!&ipNnf zh^11!Z5EHYYSA;aQ}^L)m`HloPG`+l&6SB^ZE)rZ2cBZC`HTgEWi08-Q4{W$opIWm z9+5I5>LF_`S*-bN%zZuD0j0yetmKT?q{}l~8~HQKbT4n6YzD<|O_`=L!LhHhcq9?? z#Bn$jO5?znq3=F!di^m@h6$OJS(y@3rW7&1n2Ya*Jk|7E(&xLcXPM0Ewgtlo60kJo zNq?GAkO$vbSlTSJ)7iv%=yS}qJDE1I$+l@xOP5}Z*@R~;y6_rZ30;Q7rh^~Vkf}_Y z;ZTZ@H!+n1-t4r?;@wQPaM`gYU_}eYO{+`p=XS$R)h5j~;r!%{K@^L$A|z`H%Y(D1 zCE?UFn**xb|FX3YjOguq(XNuw+9btbXI6QCkl@BEBbGK}Hrnbly4!UlOA`v&?9%0B zx<-vMtt-Qr4OYBiv-#RMN>`<6NUJr}lPYx$!>f(;v+E7orRzeUmDxJe&DICA_EqOo z!S0DN?WqrUQ)jB*GzAuq%k%g6GT>< zP)J8-=(Cg8-s_^IqD!M#GUI3Ac)P-5*}mk)8=*~0F`{bER$dP21WT1(OKY{WbE56u z=~76I5lcimj&TT9VF|^}Xzna4WNwPD+sJVimPTcb4UwpnhZ=4kXfk5&Bg|Owo{UT! z#i8no3oOXtkSQ%ftNd)tE1j`S2EA;Y^t2e=Hvu<4*w0cuG~+G7P2?3d@*rW1o5_rzc?}ZYJ!!J^f49%<12T?U|pSxAzOM=+bJxBT*>Y2|6cQRA$skuuq$qEjErd zO*6U0a7tO|3AKhxt-yM-lfq#s0v@y}qpKJk3Wc49Zt+l#xWY06m)lsl={C<4I}M9H zUahnBA*ZR`4jRh6tT@O_Wkj*POm_@)6%iC2vTcr_Zg0oJ%o0S=5}{pDaJVWZULYd~ zm+`{!fS!w}Mpv;3!R3Y3OQx_b9?KnyoyBy!RKQ_mba0wVG-f+O<+HfM#b79sK_wkT zo`$1LP5En42pQiWCN<}-)@zG5TQTp~B8Myvot9B!BjK8cc`=4w70L|4X(II&jX-gg zB_}kzkfso2L}6r>lX}HuJww2h(}1o-_}sDmOD8El4HL(+&2pt+WvrowE0`YR2aCGR z0L!{rG4M4tnAir>8Ho%FOd%yukvnxM8d+K$=aRIFZRQ^Z*t1vL(9d%IX%OJaeIx{H zghZJf6;m%psmyf#)OI_xGYGWMUAzq C1I;x6 diff --git a/axelrod/strategies/.titfortat.py.swp b/axelrod/strategies/.titfortat.py.swp deleted file mode 100644 index 9eebd964912eb87056441a69e3977298b9fa6970..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16384 zcmeI2O^h7H701hgwG$h{N0dt>q?g^`okcTa??M9E$PtbgJ17Agvn+}hYgE%yvs3YO zSF5UK#uH+25JW;EAD85ipj?0xNJwx&;y?}&vZ9DH$qj*!l1qpZ2?-43U)9y~v18-q zzyYY%{-$U9Rlllw_3HKOnra^0xbrT$t$vWAak)jGh#*;vi3*pk8=u+p}bw%pe9;pOy3d9*;Z zz)mc1HM@Cb*-!O_`ESzKuD@?5H^nm10?`7|0?`7|0?`7|0?`7|0?`7W6ARdU4|^DW z`BLc5xp3aK?fg+V9t+ohu}%JAkmuq0?x3L5^Ffe58szhU;4|apM_A&MfcoO^`{0?w%E0_m!;GMmU{RR99 zJPyu)0qBEGuoqnT3S;kscfh~FdGKrSOYj(wU<1s9Iq>$E8G98x4ITy$fDLdTI0C*7 z{;`L#zk}Do%fNsHG{OB~1JuEOa3k0Q{hqo4(T0B!*9%|QuN2NBFQq>pCU2BOpg=s+Zkvu$@CDsjwZ@V*b)u z|B3r(G3A-edtL1RFb!8wEUwZ~-Zh2Z*&?c^lTn%KSdYw1E)okRmnzX!*;YgMvWAuE z#WbY+G}_QJqM_Pogb}u~G*N-ED(P^8ojOpW(i%FdG_7;HSQu`8e!l2(jV@Jk zm5yt~cY!7VRaa7vIjhCxn^dR_pmjpBMiBr88_PNaAV^~wj3Iap&LSs zAO^5);kjJriYugmDN)uFdOKIuj8WgY?Xp;s(qgh zdy{;AXP%D@pT^Xi-#+E$r>9(PJSQCRtEr0j6TTV4*C)C&{i+KYd*@3HR zk$15f&N;o{N$J_nDeXW7ANxekReI{QUmZF`n`>2Ciyk%=+doAQlh()c74JPW{&jCx z4G0?`UBGoCO?Vu_$7aI$NuK>wW|G!;5eVU#6F2S5F-IOzhOQmBrH_DxMRcE#KloVMTJLmh07n^{W3|@>ckm6v;U| zT&u{6oW&Ms9gk#;f)>>0TB@FL=?L-<>!PTiO&FwdbY{Z3_f$CQR5(9~aPE}X=p@fo zjy=gpib@qTC4JG!ObWR!S~Tb=O669^Qd3YSFuN6<7(#~R%PAl5VI7Sx9I1t*nS5Tw zE%FOWcm|i$eRRwazKb(F&Aa1%xQ-R|Dl6cIxXbxsqFN&K8G6eWJ5L>GX)Tf%BpRIB zTx!hVzR*pyw6IBdn4zO>pWa&xlFK18TcK@H=-=&>Kqf{bUE-K2k==-6^WJFRpnQD$RGx!c% z2V*@MlaAmS2q!Eur#k)%-`0wjt!ti~{$Y`j;d^Fa_f+UA-hq&0Ph44IZLLxYyV~oe zWg6JsUfzU=kvd+b#Eo!s#^yx%_${s7K`4yb@#;7t_zD|iX~77RciI34$Zcti_C z3q%V<3q%V<3q%V<3q%V<3q%V<3w#kQ;MOzT5mwhm@ADJucE$U2QLOl!S@A1{el1QK z{G{f7)bWc%?l(79%H7%hE;3%HD 1: + pass #de napravi nešto def gain_loss_tr(self): self.gloss_values = [*map(lambda x: self.loss_value if x == D else diff --git a/axelrod/tests/strategies/.test_memory_decay.py.swp b/axelrod/tests/strategies/.test_memory_decay.py.swp deleted file mode 100644 index 954c1ec63b153b57594a105e082a18f59236e569..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12288 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 From 119187a71d6ac1875d009608e439607019a81b03 Mon Sep 17 00:00:00 2001 From: Denis Date: Tue, 7 Nov 2017 17:34:39 +0100 Subject: [PATCH 08/24] fixing strategy code --- axelrod/strategies/.meta.py.swp | Bin 0 -> 16384 bytes axelrod/strategies/memory_decay.py | 78 ++++++++++++++++++++++++----- 2 files changed, 65 insertions(+), 13 deletions(-) create mode 100644 axelrod/strategies/.meta.py.swp diff --git a/axelrod/strategies/.meta.py.swp b/axelrod/strategies/.meta.py.swp new file mode 100644 index 0000000000000000000000000000000000000000..4c5ee9cfe4ddc8146278833a0f75b8409947814b GIT binary patch literal 16384 zcmeI2O^h5z701g2^WhK&fwl z8g*6gdc1Z5%88F$LXd)T2?#_032sOrMS%knL42415(4pYfFn|X*jz}$|5a7@bkC0C zY={AgZt1tPTV4I?)qAgA*Q=f8O&`5|h2LDiiQ#%ZW8cvK`1t3qVtXF^2xDy_BTem> zxtdX|x+)1T(~aG01!4lg(^GHfZ@dnRyt*n2R2HZ#P+6d|KxKi-0+j_S3se^Pzp;QB>}B_1 zwy*FrPW|VevCrrIrF{G5*!}1H{jcn5g; zb&UNIJO(}my5NK0ZQurQJ-Bc+W4{5P2JZ)N1^d8X_CZhZ5a@v}xE}oYwU7tC3QmJN zz!9(?JpLNS9svd%0UZ3|)r>s_z6}IugQH*u{Nz=T2fhx@f-X1=ZUBFU@y>&vf&0NJ z@ILTfuopb>O2$3|&VV5}4L%002K&JCIQV!DJPE!Jz6ZVnz6?GIHo!gL2;ksp9Mt?4 z{0KY=eh3}|>)>v%23Emaz;)ma;39lW{(Z)usX!7g8TJKV;8QF3rUhS#q)H+)oO1W3 zrlxG41H5#1p06cQHy_OxRY?H)=0HuR`d);v-;A!5@FIr z@}<0?(72p8Mjdq2X>4@8rBZ2X%QO7ev8E-+rH9+1!%3Tl|9;A_<{zEqYA{d|-(~SV zKcG!$q82*$RC}b7P6r~X&D0x>NJgg7s2LIV7wE@KK0tm?i?}n(ZI4yRrn!+4Wp{-q zU&viy;%>jp{_=zF)?fay7wxaLO_3x~TOddx%{!@VnMg?z9j={Gn;< z+)NoaItiQRi(IEo7wNjEQq1*astu_|(+c@kh?S#Y2Box{=GY8JAx8qe>h*9i5VBpP z>AHBMn{+t?)L~|$lHm*YL#puI^Hq=sKeN*CqoWevi`-?+LV@g-5p~Kuu)xRDQsJi4-Rq>!_q-8vfJqP0*{4svZ%4RloK&Xu*_+kZ2gj6blI`3kE2c` zlJ%e;o)Wr|YSB=gV56Q6+V~D!&D1a5XQT|-+l-l-*t2TXqxK*BDK{E zHIi&W&@^AASBU9_1`EHBSZ=h%!1Orshg62^s6UAPOD8;C?t)OGd_f*8F2xg+dtAU{ zV7!weqix5LTQubn+iaiBr)6zU@?hw7Q=74?qU@z&?B9-8LIfMy*B_~pkIG>QuUJ{Q z^wKB9AKA04z=Yu`%*ig1&hkyo%-WahG50<#>bHXUL|#e+-x9p7WMDXgl|slRS*I?H zqj5 zLhMc`f?-%|aO{poMuM%wC=Q!3Mro#od?R5f>g^aWmLMANv zd43qP80lT^;uf**Gg|UHmif*ev69^eEZ86u2J`$xl8S;Vj1 zM7@6jd<}dNJPJMm?gL%$W^fU;{ZruQfX)KG1l9qa0UQHsU@v$U_5DA=@4@fD4}by3 z!5pZA1Au|=qUQe&_!jsk5MTq`1L$1fR&XQu73T8}6%(>dIY*P;t@m6JL{JM=40VeOr<7yCR9Qjvta* z^ijbV9-2@iu7pX8-xek)U|eam8sh&e?pIWLmzKH};RGx@+oH3ok#5|T6Z!vDNOgA? ziq}Zw3eL}+nwgfibj)nM8=ovJl&b6hs(Wlz?`FCS{}i6Oq7EvIGs#1A+v)ytyXcnx p9S 1: - pass #de napravi nešto + if self.strategy_search != 'Tit For Tat': + try: + self.strat_ind = strats_list.index(self.strategy_search) + self.start_strategy = self.team[self.strat_ind] + except: + print('Strategy not found. Starting strategy set to Tit For Tat.') + self.strat_ind = strats_list.index('Tit For Tat') + self.start_strategy = self.team[self.strat_ind] + else: + self.strat_ind = strats_list.index('Tit For Tat') + self.start_strategy = self.team[self.strat_ind] + # translates the actions (D and C) to numeric values (loss_value and + # gain_value) def gain_loss_tr(self): self.gloss_values = [*map(lambda x: self.loss_value if x == D else self.gain_value, self.memory)] + # alters memory entry, i.e. puts C if there's a D and vice versa def mem_alter(self): alter = choice(range(0, len(self.memory))) self.memory[alter] = self.memory[alter].flip() + # deletes memory entry def mem_delete(self): self.memory.pop(choice(range(0, len(self.memory)))) - def strategy(self, opponent: Player) -> Action: + def strategy(self, opponent): try: self.memory.append(opponent.history[-1]) except IndexError: pass if len(self.history) < self.start_strategy_duration: - return self.strategies[self.start_strategy].strategy(opponent) + play = self.start_strategy.strategy(opponent) + #self.history.append(play) + self.start_strategy.history.append(play) + return play else: if random() <= self.p_memory_alter: self.mem_alter() @@ -78,6 +93,43 @@ def strategy(self, opponent: Player) -> Action: self.mem_delete() self.gain_loss_tr() if sum(self.gloss_values) < 0: + #self.history.append(D) return D else: + #self.history.append(C) return C + + # plays (default) TFT for first 15 turns before switching to the NCS +# def meta_strategy(self, opponent): +# if len(self.history) < self.start_strategy_duration: +# return self.start_strategy.strategy(opponent) +# else: +# if random() <= self.p_memory_alter: +# self.mem_alter() +# if random() <= self.p_memory_delete: +# self.mem_delete() +# self.gain_loss_tr() +# if sum(self.gloss_values) < 0: +# return D +# else: +# return C + +# def strategy(self, opponent: Player) -> Action: +# MetaPlayer.strategy(opponent) +# try: +# self.memory.append(opponent.history[-1]) +# except IndexError: +# pass +# if len(self.history) < self.start_strategy_duration: +# return self.team[self.strat_ind].strategy(opponent) +# else: +# if random() <= self.p_memory_alter: +# self.mem_alter() +# if random() <= self.p_memory_delete: +# self.mem_delete() +# self.gain_loss_tr() +# if sum(self.gloss_values) < 0: +# return D +# else: +# return C + From e05efafd34b47fb7653f5de9432d64b904f63e47 Mon Sep 17 00:00:00 2001 From: Denis Date: Thu, 9 Nov 2017 13:21:26 +0100 Subject: [PATCH 09/24] added mem_decay to meta.py, expanded tests --- axelrod/strategies/.meta.py.swp | Bin 16384 -> 16384 bytes axelrod/strategies/memory_decay.py | 135 ------------------ axelrod/strategies/meta.py | 92 ++++++++++++ .../strategies/.test_memory_decay.py.swp | Bin 0 -> 12288 bytes axelrod/tests/strategies/.test_meta.py.swp | Bin 0 -> 16384 bytes axelrod/tests/strategies/test_memory_decay.py | 60 ++++++-- 6 files changed, 141 insertions(+), 146 deletions(-) delete mode 100644 axelrod/strategies/memory_decay.py create mode 100644 axelrod/tests/strategies/.test_memory_decay.py.swp create mode 100644 axelrod/tests/strategies/.test_meta.py.swp diff --git a/axelrod/strategies/.meta.py.swp b/axelrod/strategies/.meta.py.swp index 4c5ee9cfe4ddc8146278833a0f75b8409947814b..785074b6db14dda397ae674bf1cfe5f4bc2ea969 100644 GIT binary patch delta 2260 zcmbW%UuYaf90%~ZG^R;v%xNu!hT3ULbG!MoUIV4(+B~JEwBn12)_R6>b2quH-P_&n z%%vA!E}|Gj@WDm=gQ)0(DgFsH526qCNkJ*r`scAtQ9&ydEC@|SjNjSW`?En%T=?AX z?au7{e)F5zg@wezLSn~s`k|xu(|e3G!I327xwV!@s)Qu^dd}|nrMtV0;16k$4{?a# z_T;V(PyHd~U?h1U@nmo+xqbN0b#++LvmX-bB07;x(S1ES-`BG8YI3~$1=?C|#jW3D zJB%)($5*-u`4rBRRNyq&a1usfAEaS> z7xHVx#f4i5S%F2Eg>l#oe{CUT4Q{}9@G)3$7yQvl$W=HG=YYcz7>64jguDxj@C+P> ze$e4sJCcGYV4@xKtK(vQGa(l#mYqt>cH7vsiFb&6G z8{7#$VR~PO$KeD#49DRB{EDhvb?|c;F2NGK32(sD@Dw}-hu|RSu#UxW0X~5bo&DC>0y%d1MelI;DytH(E;f?J|i$#Z={)xW{~tZU_2uzL62Y8$5MbC7F7 zkJiNdsQpP8fSs_4n!gQi!3j7518@c9d>LMX2SC=l4P=SG0$Ju)U55$I|Z@Mj$>iPrXxb{ZYQm%TfKpZo6!e(c>= zmG`U}%F88qO^KCq1!gnB zHnhNCYHl^Wezd4sdpWds{rRX%e9YK8O^s!6&G}f+ zVZdCNzQ}Rmn}QYRgH3&U^&jpVwFa8&d9K48(a0ZR*vwJWIBRi%d}N9$p7`r?g)+vm zTqmBXXL4STj7?PX%oFseQ(%>Qec$!tjce14VGPsrm{X|7WJJSfhxSc1;uHRSCOFeK zsPa-1Zg{SzsYR}#EJdcJ2OC+aHadmV*Ghh&!s8W ztXY*MoTAahs1Dh%OjE{;ZFx-#CcKN5{~lp1K($C>@rAckc>8Pd4N}Ws2KCB<(=oXV z#4Ph!ic^ywruZ7rIqZEp$9!%Q671Ht25GHzBkZ6syQ16_;l3GEH=@a#icdoG{z78e z{*viwwpp4kn6#2nJsVq4234V>qlkyuoYj*I2U9yR?}sa{UWi5_zJF-PcXBT4JRPn89B=-G%}_* z;?HC^xy5+S#tt#inpL#aq$TLM>(fb7q;$De!_QLGvw2(o=TZOH$l>(Lp7dDwOR48u nj?hvQ(N}>wuAnn+*(n%wLVhnS2OqH7L(YVp%BEzDlurHzUpqe? delta 2134 zcmc)KTWB0r9LMpqZDO0$Bx}K5BG}_Bx>==Z3SMgLDipeC>?YNqwM~{V*__=Sot>#O z6YbXGuJp-EAIwxx`cg${YoRIu!9uA%2)48us|8WKJSg}gR&C;ox9{1>LMoLuKInnZ z?sDeLx%|$bt<_?+TC8)l=fQija$R?ipv8qa?Ekv;g@qzE@xWW1-*+r(7FGHeglpr= zLm7{^xOy1vvGDfzZL!_qqw(cS7e-y;=GpIWW0ObYnU3e*loPV4+Dz|sj1MLspB?c{ zhY(-m81`TgH{ohbwF|KqAto@0cARe$;urjk&oG6T@FMo$Ic&rIxDV@aeH+_9ccl=Y z;vk+z5gV`yE3pF8ON96w&)_axgI4^|%0{slB^0p&r&^c~2e1S8q7UsjwpfUL2++5f z_#{6*StP_6ybXmhY(fgBuV6yFj$J4sgO&J+_@?j?cH!EgNOFK28oe%7~sC zhEX52TJ~Fc#dB_Ti{&`VlN%jhl}ByesVCPj^~wRyDzYIvns&4zv!<7qcbndJ{=g0Dsuua7&w;4fI}V$nwfE){;* co49dUuij{X|99{MH(xUSz{)3c|Dx{2UmDR0VgLXD diff --git a/axelrod/strategies/memory_decay.py b/axelrod/strategies/memory_decay.py deleted file mode 100644 index 2ff6a2b97..000000000 --- a/axelrod/strategies/memory_decay.py +++ /dev/null @@ -1,135 +0,0 @@ -from axelrod.action import Action -from random import random,choice -from axelrod.player import Player -from axelrod.strategies.meta import MetaPlayer - -C, D = Action.C, Action.D - -class MemoryDecay(MetaPlayer): - """ - A player utilizes the (default) Tit for Tat stretegy for the first (default) 15 turns, - at the same time memorizing the opponent's decisions. After the 15 turns have - passed, the player calculates a 'net cooperation score' (NCS) for his opponent, - weighing decisions to Cooperate as (default) 1, and to Defect as (default) - -2. If the opponent's NCS is below 0, the player Defects; otherwise, - he Cooperates. - - The player's memories of his opponent's decisions have a random chance to be - altered (i.e., a C decision becomes D or vice versa; default probability - is 0.03) or deleted (default probability is 0.1). - - It's necessary to specify EXACT name of the starting strategy if changing - the default. Possible strategies can be accessed with the .team attribute. - - Name: Memory Decay - """ - name = 'Memory Decay' - classifier = { - 'memory_depth' : float('inf'), - 'long_run_time' : False, - 'stochastic' : True, - 'makes_use_of' : set(), - 'inspects_source' : False, - 'manipulates_source' : False, - 'manipulates_state' : False - } - - def __init__(self, p_memory_delete: float = 0.1, p_memory_alter: float = 0.03, - loss_value: float = -2, gain_value: float = 1, - memory: list = None, start_strategy: str = 'Tit For Tat', - start_strategy_duration: int = 15, team=None): - super().__init__() - self.p_memory_delete = p_memory_delete - self.p_memory_alter = p_memory_alter - self.loss_value = loss_value - self.gain_value = gain_value - self.memory = [] if memory == None else memory - self.start_strategy_duration = start_strategy_duration - - # searches for the specified start_strategy - self.strategy_search = start_strategy - strats_list = [str(strategy) for strategy in self.team] - if self.strategy_search != 'Tit For Tat': - try: - self.strat_ind = strats_list.index(self.strategy_search) - self.start_strategy = self.team[self.strat_ind] - except: - print('Strategy not found. Starting strategy set to Tit For Tat.') - self.strat_ind = strats_list.index('Tit For Tat') - self.start_strategy = self.team[self.strat_ind] - else: - self.strat_ind = strats_list.index('Tit For Tat') - self.start_strategy = self.team[self.strat_ind] - - # translates the actions (D and C) to numeric values (loss_value and - # gain_value) - def gain_loss_tr(self): - self.gloss_values = [*map(lambda x: self.loss_value if x == D else - self.gain_value, self.memory)] - - # alters memory entry, i.e. puts C if there's a D and vice versa - def mem_alter(self): - alter = choice(range(0, len(self.memory))) - self.memory[alter] = self.memory[alter].flip() - - # deletes memory entry - def mem_delete(self): - self.memory.pop(choice(range(0, len(self.memory)))) - - def strategy(self, opponent): - try: - self.memory.append(opponent.history[-1]) - except IndexError: - pass - if len(self.history) < self.start_strategy_duration: - play = self.start_strategy.strategy(opponent) - #self.history.append(play) - self.start_strategy.history.append(play) - return play - else: - if random() <= self.p_memory_alter: - self.mem_alter() - if random() <= self.p_memory_delete: - self.mem_delete() - self.gain_loss_tr() - if sum(self.gloss_values) < 0: - #self.history.append(D) - return D - else: - #self.history.append(C) - return C - - # plays (default) TFT for first 15 turns before switching to the NCS -# def meta_strategy(self, opponent): -# if len(self.history) < self.start_strategy_duration: -# return self.start_strategy.strategy(opponent) -# else: -# if random() <= self.p_memory_alter: -# self.mem_alter() -# if random() <= self.p_memory_delete: -# self.mem_delete() -# self.gain_loss_tr() -# if sum(self.gloss_values) < 0: -# return D -# else: -# return C - -# def strategy(self, opponent: Player) -> Action: -# MetaPlayer.strategy(opponent) -# try: -# self.memory.append(opponent.history[-1]) -# except IndexError: -# pass -# if len(self.history) < self.start_strategy_duration: -# return self.team[self.strat_ind].strategy(opponent) -# else: -# if random() <= self.p_memory_alter: -# self.mem_alter() -# if random() <= self.p_memory_delete: -# self.mem_delete() -# self.gain_loss_tr() -# if sum(self.gloss_values) < 0: -# return D -# else: -# return C - diff --git a/axelrod/strategies/meta.py b/axelrod/strategies/meta.py index 59f32870e..a1e6d78d3 100644 --- a/axelrod/strategies/meta.py +++ b/axelrod/strategies/meta.py @@ -1,4 +1,5 @@ from numpy.random import choice +from random import random,choice from axelrod.action import Action from axelrod.player import Player, obey_axelrod @@ -533,3 +534,94 @@ def __init__(self): <= 1] super().__init__(team=team) self.classifier["long_run_time"] = False + +class MemoryDecay(MetaPlayer): + """ + A player utilizes the (default) Tit for Tat stretegy for the first (default) 15 turns, + at the same time memorizing the opponent's decisions. After the 15 turns have + passed, the player calculates a 'net cooperation score' (NCS) for his opponent, + weighing decisions to Cooperate as (default) 1, and to Defect as (default) + -2. If the opponent's NCS is below 0, the player Defects; otherwise, + he Cooperates. + + The player's memories of his opponent's decisions have a random chance to be + altered (i.e., a C decision becomes D or vice versa; default probability + is 0.03) or deleted (default probability is 0.1). + + It's necessary to specify EXACT name of the starting strategy if changing + the default. Possible strategies can be accessed with the .team attribute. + + Name: Memory Decay + """ + name = 'Memory Decay' + classifier = { + 'memory_depth' : float('inf'), + 'long_run_time' : False, + 'stochastic' : True, + 'makes_use_of' : set(), + 'inspects_source' : False, + 'manipulates_source' : False, + 'manipulates_state' : False + } + + def __init__(self, p_memory_delete: float = 0.1, p_memory_alter: float = 0.03, + loss_value: float = -2, gain_value: float = 1, + memory: list = None, start_strategy: str = 'Tit For Tat', + start_strategy_duration: int = 15, team=None): + super().__init__() + self.p_memory_delete = p_memory_delete + self.p_memory_alter = p_memory_alter + self.loss_value = loss_value + self.gain_value = gain_value + self.memory = [] if memory == None else memory + self.start_strategy_duration = start_strategy_duration + + # searches for the specified start_strategy + self.strategy_search = start_strategy + strats_list = [str(strategy) for strategy in self.team] + if self.strategy_search != 'Tit For Tat': + try: + self.strat_ind = strats_list.index(self.strategy_search) + self.start_strategy = self.team[self.strat_ind] + except: + print('Strategy not found. Starting strategy set to Tit For Tat.') + self.strat_ind = strats_list.index('Tit For Tat') + self.start_strategy = self.team[self.strat_ind] + else: + self.strat_ind = strats_list.index('Tit For Tat') + self.start_strategy = self.team[self.strat_ind] + + # translates the actions (D and C) to numeric values (loss_value and + # gain_value) + def gain_loss_tr(self): + self.gloss_values = [*map(lambda x: self.loss_value if x == D else + self.gain_value, self.memory)] + + # alters memory entry, i.e. puts C if there's a D and vice versa + def mem_alter(self): + alter = choice(range(0, len(self.memory))) + self.memory[alter] = self.memory[alter].flip() + + # deletes memory entry + def mem_delete(self): + self.memory.pop(choice(range(0, len(self.memory)))) + + def strategy(self, opponent): + try: + self.memory.append(opponent.history[-1]) + except IndexError: + pass + if len(self.history) <= self.start_strategy_duration: + play = self.start_strategy.strategy(opponent) + self.start_strategy.history.append(play) + return play + else: + if random() <= self.p_memory_alter: + self.mem_alter() + if random() <= self.p_memory_delete: + self.mem_delete() + self.gain_loss_tr() + if sum(self.gloss_values) < 0: + return D + else: + return C diff --git a/axelrod/tests/strategies/.test_memory_decay.py.swp b/axelrod/tests/strategies/.test_memory_decay.py.swp new file mode 100644 index 0000000000000000000000000000000000000000..f54f5b31a952862b9d96526b012db678dd84030c GIT binary patch literal 12288 zcmeI2&2QX97{(_=<-36RkbrU+62W@g?Ir=rM}R}Ls{n@}1OXwUl{@R5O@`PWOW<;A+Mg{D?;~9r`^UuwgS9?)4UT-zne}*j<6cE`JkRylSJpTV*{QkduHzAk6 zSKuu82%H2ycmX^QrT_s~?jqz%a2}im0ayT!fZq=j@(cJGTmt988SplE2s{XWyOWTM z;A3zOFfaptx`U7(!37||W8jC|3E2XlgHOOq;OcFJ{0Y7RTi_g61Xpi`9efAA02&+x zb#MrLeG4IA|g=uh;H(OFB z9Gk0T>Q#PC)0kiUOiL7WgN5&68&~1-j&iTaGbggh=Vt%w&~qtD-}e>zGWr2=>*Ik{ z2I?PIflN8|UTwWmr(LEXKenC;m354WsTy<@e{X<}qk53W*dVt&oon~dFBDk{LN0e3K9Y~Zm zv^)b$NOLDjcMmM4Ht%E59#FrHc2?&fL{xOjbe7r7CYRXYG|N2^ui~WGURh=C_03JQ z)nu|Q^V)S}8s?;;Y?n!fc2=i50;hLP?&BaXQ4@BZ&0xzcC1}ze% zu+*zZN9tilT`_?mw(KuIDJ`RRb3Qh_B^j*07P28vy;8d!9+aVPzhk}FmkXH}WlR5> zh~*k&mLC(U?ectC8auaC^WK4Ut#ze?MX?%6?Rq|xo+?!+^t9_^F{BT~rE8s}s6Fx_ zy)5*iOqZFaUB1RPgiI;cq`pY8kl`C3Uy;lcJ>I9;_UU4|@l2Q3=ksxNn%GupEn=}q z1|hawD=bYYYV&lFg^G`s}ah0)lUbpuSK+53lUp~4+F)0 z*@qK~Yp*`?0;OfJ#*`KTZZ4+-K60wX%8;-Yqo{*6DtUrQlc+-icUY3 z#h7H{&*nhHHES+qTh7~N$9YyGW)a8z+K9b|-?^qKYG&FIyJxQR5pBdaBf_@4kbT@W zVKLug_Nq-tKb4U&nXT|m(`Bkz&C!{`w;qZpk*Ut!n7@Hoi+!3hWg5aS^QkH0hN6As ShhF0}caUZg6)V6Hwa8yl*oj>L literal 0 HcmV?d00001 diff --git a/axelrod/tests/strategies/.test_meta.py.swp b/axelrod/tests/strategies/.test_meta.py.swp new file mode 100644 index 0000000000000000000000000000000000000000..12872d913b6b31d832c270b8782cac824c851c2d GIT binary patch literal 16384 zcmeI2ON#MK7Dtp_?ht~DcyVENPuImXo#D9DE*U%Db@v!YD)(H&V+E7(Hj$9Am}jKR)yZnt`C0+3z{CnP zkvmtl%cb6&SW0ia;lYWE>s+mXRzNGD70?Q31+)TM0j+>m;D4onSDs7uU_`Uks4R7# zRd@eOT}72{*X94I@&{D*r!PEDJ7MMf=S zyW^T(wUzE-beCBw(X48R(IRtM8uOtp&Pw^T!8voio*fmVltL%f2Orf`|0;BvkS zwp0dXWFbgLn!ZL=? zMuoGClSd;X$%0|AWGhWVjDlB8j>c*$Id&oAR_u&tqD%+f;#OEJn|n^SXmHQWj?J?e z?4X*-u`=rHp!t$xc&Vgm=aW#GHq(u$n)-!g@7b{EH_K(RC77_8H<=6RM`T_&6M=EW zr(c$^F$NS*hzuGSMuHGo8Qp?Uo#KzAf`ooK_rgR%1^<~vG)*rcmr&>mCR{X=_qQuD z)hn~;;l~U+@@(`Z6L z!GSBc3}2BP8HJY`rM?pw8BM11j%&f0NXr)szZGuZurl1-jX#q-Nlo!0P$~2t+D;i9 zDNQC@qLmQkchdT|KDYh-9LQW3S_&3uQR`@F9`NhO>BW&<(8G24W=vQ9NwNO zFRpG~naB!6U7lNw8W3IfM2FSbgqg&8T+?p+1viM7Py7`}M9sk!drHhRilz*^TH8gL z(Wv!tjG#flFc=LZXj$Cx&aDjzutpkqqG+yT(>9Qdz2c)1(SR_PoSF4vVVW--(i^Xt z=+O*99e)wGV#4Du|5ymnxyi9v5W-!4-yMs&F47;@SYH@T#bc^xz zrt55MJWP+~UB^Pc$^9DW_6ql?!D-d0&|M0~RrGErI_y+9m4RpUb-h$m?EhC|4_m?TCjbLoU@16{eg3!LI5-9l zgWX^)SOgY=Ch$G>`bWWQ;7QOA?gBS~pRw=%6ub`hfGQXU1Au}v*!Ld>?}2y0USNUs zAPxS&p8quX2)qQUU<+sm%fTI>2^@ni2Y}EgFErAZRzNGD70?Q31*Wcmh-eyKVen+g zAb@wOdldi67Dos8cQ@;IzHYFj^>i%(c~_E(w}Z6(PJe7>Kak263B_9HA>f74W zCpTgD+x{_W5b=r}L}cOsk|Hk=3mj`6n&=!bnCkF;Wv!{kx@MF$H9k3>zFp0fvt?l+ z;&9rxAGzdf>`ES7` Date: Thu, 9 Nov 2017 16:19:48 +0100 Subject: [PATCH 10/24] finishing unit tests --- axelrod/strategies/.meta.py.swp | Bin 16384 -> 32768 bytes axelrod/strategies/meta.py | 4 ++-- .../strategies/.test_memory_decay.py.swp | Bin 12288 -> 12288 bytes axelrod/tests/strategies/.test_meta.py.swp | Bin 16384 -> 0 bytes axelrod/tests/strategies/test_memory_decay.py | 12 +++++++++--- 5 files changed, 11 insertions(+), 5 deletions(-) delete mode 100644 axelrod/tests/strategies/.test_meta.py.swp diff --git a/axelrod/strategies/.meta.py.swp b/axelrod/strategies/.meta.py.swp index 785074b6db14dda397ae674bf1cfe5f4bc2ea969..dfedf1ad94567780bc311d81ee276401bd69473b 100644 GIT binary patch literal 32768 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 delta 183 zcmZo@U}|V!6iqS+^Ym4)&@*5F0s#hw?jKB1^&3U6Fi$jK-TaQ(iihJr6ihY{kl^?S z;{*UXe_@;gAmDCcHI77otI=N$z$U$?x*$Y{HHt#vR90H~5e7ytkO diff --git a/axelrod/strategies/meta.py b/axelrod/strategies/meta.py index a1e6d78d3..70d18a203 100644 --- a/axelrod/strategies/meta.py +++ b/axelrod/strategies/meta.py @@ -567,7 +567,7 @@ class MemoryDecay(MetaPlayer): def __init__(self, p_memory_delete: float = 0.1, p_memory_alter: float = 0.03, loss_value: float = -2, gain_value: float = 1, memory: list = None, start_strategy: str = 'Tit For Tat', - start_strategy_duration: int = 15, team=None): + start_strategy_duration: int = 15): super().__init__() self.p_memory_delete = p_memory_delete self.p_memory_alter = p_memory_alter @@ -611,7 +611,7 @@ def strategy(self, opponent): self.memory.append(opponent.history[-1]) except IndexError: pass - if len(self.history) <= self.start_strategy_duration: + if len(self.history) < self.start_strategy_duration: play = self.start_strategy.strategy(opponent) self.start_strategy.history.append(play) return play diff --git a/axelrod/tests/strategies/.test_memory_decay.py.swp b/axelrod/tests/strategies/.test_memory_decay.py.swp index f54f5b31a952862b9d96526b012db678dd84030c..41ec44ec0773fcccdf66f3356c4a6388091208c0 100644 GIT binary patch delta 319 zcmZojXh;xEG6?hZRj|-AU;qLE1_qx(mMFiCqF0z%OH0ypEjGVnR^nmw+bk&XnV+|Y ziGkq)GejLwNI{rU>jNtT!%-lv0b&y%HU?rrAb!fiz%U1hq6#qiF!C zQ+G*COHD4xFH+ZmsCUp1o@}Sa&EXuYprv4Fq%%2D)t%8~@nv>6|NloU}6`9Pb$u}9ITY$#|qyS=s;p9RM$H@y+^(UWF)1LfSLu<30 H+96H=wRBM< delta 158 zcmZojXh;xEG6?hZRj|-AU;qLE28K#z=BR{?qF0zF8nAAD$E?J|=&@N);4?q(eP#v* zX;z3Lppb$vqu4JX_Zkqd2I3?j21!e?Zf0b8$UOO!vgBkvH3e=n1#N|B=U4?T13$iOi9qO#;>J+(`m06efKumAu6 diff --git a/axelrod/tests/strategies/.test_meta.py.swp b/axelrod/tests/strategies/.test_meta.py.swp deleted file mode 100644 index 12872d913b6b31d832c270b8782cac824c851c2d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16384 zcmeI2ON#MK7Dtp_?ht~DcyVENPuImXo#D9DE*U%Db@v!YD)(H&V+E7(Hj$9Am}jKR)yZnt`C0+3z{CnP zkvmtl%cb6&SW0ia;lYWE>s+mXRzNGD70?Q31+)TM0j+>m;D4onSDs7uU_`Uks4R7# zRd@eOT}72{*X94I@&{D*r!PEDJ7MMf=S zyW^T(wUzE-beCBw(X48R(IRtM8uOtp&Pw^T!8voio*fmVltL%f2Orf`|0;BvkS zwp0dXWFbgLn!ZL=? zMuoGClSd;X$%0|AWGhWVjDlB8j>c*$Id&oAR_u&tqD%+f;#OEJn|n^SXmHQWj?J?e z?4X*-u`=rHp!t$xc&Vgm=aW#GHq(u$n)-!g@7b{EH_K(RC77_8H<=6RM`T_&6M=EW zr(c$^F$NS*hzuGSMuHGo8Qp?Uo#KzAf`ooK_rgR%1^<~vG)*rcmr&>mCR{X=_qQuD z)hn~;;l~U+@@(`Z6L z!GSBc3}2BP8HJY`rM?pw8BM11j%&f0NXr)szZGuZurl1-jX#q-Nlo!0P$~2t+D;i9 zDNQC@qLmQkchdT|KDYh-9LQW3S_&3uQR`@F9`NhO>BW&<(8G24W=vQ9NwNO zFRpG~naB!6U7lNw8W3IfM2FSbgqg&8T+?p+1viM7Py7`}M9sk!drHhRilz*^TH8gL z(Wv!tjG#flFc=LZXj$Cx&aDjzutpkqqG+yT(>9Qdz2c)1(SR_PoSF4vVVW--(i^Xt z=+O*99e)wGV#4Du|5ymnxyi9v5W-!4-yMs&F47;@SYH@T#bc^xz zrt55MJWP+~UB^Pc$^9DW_6ql?!D-d0&|M0~RrGErI_y+9m4RpUb-h$m?EhC|4_m?TCjbLoU@16{eg3!LI5-9l zgWX^)SOgY=Ch$G>`bWWQ;7QOA?gBS~pRw=%6ub`hfGQXU1Au}v*!Ld>?}2y0USNUs zAPxS&p8quX2)qQUU<+sm%fTI>2^@ni2Y}EgFErAZRzNGD70?Q31*Wcmh-eyKVen+g zAb@wOdldi67Dos8cQ@;IzHYFj^>i%(c~_E(w}Z6(PJe7>Kak263B_9HA>f74W zCpTgD+x{_W5b=r}L}cOsk|Hk=3mj`6n&=!bnCkF;Wv!{kx@MF$H9k3>zFp0fvt?l+ z;&9rxAGzdf>`ES7` Date: Thu, 2 Nov 2017 12:44:06 +0100 Subject: [PATCH 11/24] added MemoryDecay draft (no test) added no. of turns param fixed list in __init__ updated memdecay code Update writing_test_for_the_new_strategy.rst fixed typo switching MemoryDecay to MetaPlayer class fixing strategy code added mem_decay to meta.py, expanded tests finishing unit tests --- axelrod/strategies/.meta.py.swp | Bin 0 -> 32768 bytes axelrod/strategies/_strategies.py | 1 - axelrod/strategies/meta.py | 92 ++++++++++++++++++ .../strategies/.test_memory_decay.py.swp | Bin 0 -> 12288 bytes axelrod/tests/strategies/test_memory_decay.py | 78 +++++++++++++++ docs/reference/all_strategies.rst | 3 + .../writing_test_for_the_new_strategy.rst | 4 +- 7 files changed, 175 insertions(+), 3 deletions(-) create mode 100644 axelrod/strategies/.meta.py.swp create mode 100644 axelrod/tests/strategies/.test_memory_decay.py.swp create mode 100644 axelrod/tests/strategies/test_memory_decay.py diff --git a/axelrod/strategies/.meta.py.swp b/axelrod/strategies/.meta.py.swp new file mode 100644 index 0000000000000000000000000000000000000000..dfedf1ad94567780bc311d81ee276401bd69473b GIT binary patch literal 32768 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 literal 0 HcmV?d00001 diff --git a/axelrod/strategies/_strategies.py b/axelrod/strategies/_strategies.py index e5c906452..468c94dce 100644 --- a/axelrod/strategies/_strategies.py +++ b/axelrod/strategies/_strategies.py @@ -193,7 +193,6 @@ MathConstantHunter, NaiveProber, MEM2, - Michaelos, MindBender, MindController, MindReader, diff --git a/axelrod/strategies/meta.py b/axelrod/strategies/meta.py index 59f32870e..70d18a203 100644 --- a/axelrod/strategies/meta.py +++ b/axelrod/strategies/meta.py @@ -1,4 +1,5 @@ from numpy.random import choice +from random import random,choice from axelrod.action import Action from axelrod.player import Player, obey_axelrod @@ -533,3 +534,94 @@ def __init__(self): <= 1] super().__init__(team=team) self.classifier["long_run_time"] = False + +class MemoryDecay(MetaPlayer): + """ + A player utilizes the (default) Tit for Tat stretegy for the first (default) 15 turns, + at the same time memorizing the opponent's decisions. After the 15 turns have + passed, the player calculates a 'net cooperation score' (NCS) for his opponent, + weighing decisions to Cooperate as (default) 1, and to Defect as (default) + -2. If the opponent's NCS is below 0, the player Defects; otherwise, + he Cooperates. + + The player's memories of his opponent's decisions have a random chance to be + altered (i.e., a C decision becomes D or vice versa; default probability + is 0.03) or deleted (default probability is 0.1). + + It's necessary to specify EXACT name of the starting strategy if changing + the default. Possible strategies can be accessed with the .team attribute. + + Name: Memory Decay + """ + name = 'Memory Decay' + classifier = { + 'memory_depth' : float('inf'), + 'long_run_time' : False, + 'stochastic' : True, + 'makes_use_of' : set(), + 'inspects_source' : False, + 'manipulates_source' : False, + 'manipulates_state' : False + } + + def __init__(self, p_memory_delete: float = 0.1, p_memory_alter: float = 0.03, + loss_value: float = -2, gain_value: float = 1, + memory: list = None, start_strategy: str = 'Tit For Tat', + start_strategy_duration: int = 15): + super().__init__() + self.p_memory_delete = p_memory_delete + self.p_memory_alter = p_memory_alter + self.loss_value = loss_value + self.gain_value = gain_value + self.memory = [] if memory == None else memory + self.start_strategy_duration = start_strategy_duration + + # searches for the specified start_strategy + self.strategy_search = start_strategy + strats_list = [str(strategy) for strategy in self.team] + if self.strategy_search != 'Tit For Tat': + try: + self.strat_ind = strats_list.index(self.strategy_search) + self.start_strategy = self.team[self.strat_ind] + except: + print('Strategy not found. Starting strategy set to Tit For Tat.') + self.strat_ind = strats_list.index('Tit For Tat') + self.start_strategy = self.team[self.strat_ind] + else: + self.strat_ind = strats_list.index('Tit For Tat') + self.start_strategy = self.team[self.strat_ind] + + # translates the actions (D and C) to numeric values (loss_value and + # gain_value) + def gain_loss_tr(self): + self.gloss_values = [*map(lambda x: self.loss_value if x == D else + self.gain_value, self.memory)] + + # alters memory entry, i.e. puts C if there's a D and vice versa + def mem_alter(self): + alter = choice(range(0, len(self.memory))) + self.memory[alter] = self.memory[alter].flip() + + # deletes memory entry + def mem_delete(self): + self.memory.pop(choice(range(0, len(self.memory)))) + + def strategy(self, opponent): + try: + self.memory.append(opponent.history[-1]) + except IndexError: + pass + if len(self.history) < self.start_strategy_duration: + play = self.start_strategy.strategy(opponent) + self.start_strategy.history.append(play) + return play + else: + if random() <= self.p_memory_alter: + self.mem_alter() + if random() <= self.p_memory_delete: + self.mem_delete() + self.gain_loss_tr() + if sum(self.gloss_values) < 0: + return D + else: + return C diff --git a/axelrod/tests/strategies/.test_memory_decay.py.swp b/axelrod/tests/strategies/.test_memory_decay.py.swp new file mode 100644 index 0000000000000000000000000000000000000000..41ec44ec0773fcccdf66f3356c4a6388091208c0 GIT binary patch literal 12288 zcmeI2&2Jnv7{(oF`7Yl`MQ|{wU}oFRCflZ>3UG*a6@)}81OXwUXmDn|iIv^)cI*iW z{Xn8B2M+uNoOaTB|Nryv z{~sSA?f2+o5L%z|gZUk3>J9sCBafQ#T9co#ek z4uU@)BIFzJ3Ag|lm;~1zB;;3c2?+2!_~ijYE`u+?r{Gm^{eD9J2H%0p-~yNf*Y86) z_z8RoG&l?@U_bcwUP3+tP0#>;+(XC@;1XB@Pk|@Fwf(RUoB`9|7})b&&0~!S0#_n{I@RJUTBbdec_+t4bB;EnH8R4V9G^{YI5GE2gIx=@Gi<`%QCQSt=~f`!FqT@LKMZUm-=6 zA&qX}RMT`dZMsU`tM_TVJOAn<{cBkN>c_2v@E6yG?E~&Lr0j7-fQ)zLpzSJkus?|Y zZw}@IcW438L?f;z!pwif(1Z$Q%&C8}@m7T{Gld|+)-$1Oc!`LrWLfc33Br%+B#y8_ zE^lt=JQxrEo^y7t%yu-7BO|=G>xd`}8HjTe2S;c}VCF2EIB!&{)Wko^D`o-|&)u4! z*uu*)y!OP)%(c>``tiN@DPIxx(jz-qc93@HQ67S6WV0-|#5$*TR7A9bANlsmGIDn} zL8r=eF%Wr86KQs3P0wZIr4g9lzro7%CW~6K+rKK^l(AcxXv5}1(esgf@&r<)`6S3o zD&?bn^^g`8O}rs%*uV5gQPN*-eve#u=ViF|Mu%UYA9p zmvpe@TH$pNCvS$%v5w*+s>mb`i#p}IhbJOs-o?P@bM6Ank-|H*)@SSU#qUIf5MjFo5`PtynRKj zp~Oyr^r}fnJCW5 TeCSn9Qv<2>D9-?!s73w(U31|P literal 0 HcmV?d00001 diff --git a/axelrod/tests/strategies/test_memory_decay.py b/axelrod/tests/strategies/test_memory_decay.py new file mode 100644 index 000000000..adcd0e4e6 --- /dev/null +++ b/axelrod/tests/strategies/test_memory_decay.py @@ -0,0 +1,78 @@ +"""Tests for the Memory Decay strategy""" + +import axelrod as axe +from axelrod.tests.strategies.test_player import TestPlayer + +C, D = axe.Action.C, axe.Action.D + +class TestMemoryDecay(TestPlayer): + + name = 'MemoryDecay' + player = axe.meta.MemoryDecay + expected_classifier = { + 'memory_depth': float('inf'), + 'stochastic': True, + 'makes_use_of': set(), + 'long_run_time': False, + 'inspects_source': False, + 'manipulates_source': False, + 'manipulates_state': False + } + + def test_strategy(self): + #Test TitForTat behavior in first 15 turns + opponent = axe.Cooperator() + actions = list([(C, C)]) * 15 + self.versus_test(opponent, expected_actions = actions) + + opponent = axe.Defector() + actions = [(C, D)] + list([(D, D)]) * 14 + self.versus_test(opponent, expected_actions = actions) + + opponent = axe.Alternator() + actions = [(C, C)] + [(C, D), (D, C)] * 7 + self.versus_test(opponent, expected_actions = actions) + + opponent_actions = [C, D, D, C, D, C, C, D, C, D, D, C, C, D, D] + opponent = axe.MockPlayer(actions =opponent_actions) + mem_actions = [C, C, D, D, C, D, C, C, D, C, D, D, C, C, D] + actions = list(zip(mem_actions, opponent_actions)) + self.versus_test(opponent, expected_actions = actions) + + opponent = axe.Random() + actions = [(C, D), (D, D), (D, C), (C, C), (C, D), (D, C)] + self.versus_test(opponent, expected_actions = actions, seed = 0) + + #Test alternative starting strategies + opponent = axe.Cooperator() + actions = list([(D, C)]) * 15 + self.versus_test(opponent, expected_actions = actions, + init_kwargs = {'start_strategy' : 'Defector'}) + + opponent = axe.Cooperator() + actions = list([(C, C)]) * 15 + self.versus_test(opponent, expected_actions = actions, + init_kwargs = {'start_strategy' : 'Cooperator'}) + + opponent = axe.Cooperator() + actions = [(C, C)] + list([(D, C), (C, C)]) * 7 + self.versus_test(opponent, expected_actions = actions, + init_kwargs = {'start_strategy' : 'Alternator'}) + + #Test net-cooperation-score (NCS) based decisions in subsequent turns + opponent = axe.Cooperator() + actions = [(C, C)] * 15 + [(C, C)] + self.versus_test(opponent, expected_actions = actions, seed = 1, + init_kwargs = {'memory' : [D] * 5 + [C] * 10}) + + opponent = axe.Cooperator() + actions = [(C, C)] * 15 + [(C, C)] + self.versus_test(opponent, expected_actions = actions, seed = 1, + init_kwargs = {'memory' : [D] * 4 + [C] * 11}) + + opponent = axe.Defector() + actions = [(C, D)] * 7 + [((D, D))] + self.versus_test(opponent, expected_actions = actions, seed = 4, + init_kwargs = {'memory' : [C] * 12, + 'start_strategy' : 'Defector', + 'start_strategy_duration' : 0}) diff --git a/docs/reference/all_strategies.rst b/docs/reference/all_strategies.rst index 746b643eb..fa9e08e95 100644 --- a/docs/reference/all_strategies.rst +++ b/docs/reference/all_strategies.rst @@ -102,6 +102,9 @@ Here are the docstrings of all the strategies in the library. .. automodule:: axelrod.strategies.mathematicalconstants :members: :undoc-members: +.. automodule:: axelrod.strategies.memorydecay + :members: + :undoc-members: .. automodule:: axelrod.strategies.memorytwo :members: :undoc-members: diff --git a/docs/tutorials/contributing/strategy/writing_test_for_the_new_strategy.rst b/docs/tutorials/contributing/strategy/writing_test_for_the_new_strategy.rst index 10af266b3..b72c48e23 100644 --- a/docs/tutorials/contributing/strategy/writing_test_for_the_new_strategy.rst +++ b/docs/tutorials/contributing/strategy/writing_test_for_the_new_strategy.rst @@ -23,7 +23,7 @@ argument :code:`seed` (useful and necessary for stochastic strategies, expected_actions=[(D, C), (C, D), (C, C)], seed=None) In this case the player is tested against an opponent that will cycle through -:code:`C, D`. The :code:`expected_actions` are the actions player by both +:code:`C, D`. The :code:`expected_actions` are the actions played by both the tested player and the opponent in the match. In this case we see that the player is expected to play :code:`D, C, C` against :code:`C, D, C`. @@ -52,7 +52,7 @@ assumes that players do not know the length of the match:: The function :code:`versus_test` also accepts a dictionary parameter of keyword arguments that dictate how the player is initiated. For example this -test how the player plays when initialised with :code:`p=1`:: +tests how the player plays when initialised with :code:`p=1`:: actions = [(C, C), (C, D), (C, C), (C, D)] self.versus_test(axelrod.Alternator(), expected_actions=actions, From b13051ddb29251e356293d8ccaabcda650877020 Mon Sep 17 00:00:00 2001 From: Denis Date: Thu, 9 Nov 2017 16:35:25 +0100 Subject: [PATCH 12/24] removed stray swapfiles --- axelrod/strategies/.meta.py.swp | Bin 32768 -> 0 bytes .../tests/strategies/.test_memory_decay.py.swp | Bin 12288 -> 0 bytes 2 files changed, 0 insertions(+), 0 deletions(-) delete mode 100644 axelrod/strategies/.meta.py.swp delete mode 100644 axelrod/tests/strategies/.test_memory_decay.py.swp diff --git a/axelrod/strategies/.meta.py.swp b/axelrod/strategies/.meta.py.swp deleted file mode 100644 index dfedf1ad94567780bc311d81ee276401bd69473b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 32768 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 diff --git a/axelrod/tests/strategies/.test_memory_decay.py.swp b/axelrod/tests/strategies/.test_memory_decay.py.swp deleted file mode 100644 index 41ec44ec0773fcccdf66f3356c4a6388091208c0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12288 zcmeI2&2Jnv7{(oF`7Yl`MQ|{wU}oFRCflZ>3UG*a6@)}81OXwUXmDn|iIv^)cI*iW z{Xn8B2M+uNoOaTB|Nryv z{~sSA?f2+o5L%z|gZUk3>J9sCBafQ#T9co#ek z4uU@)BIFzJ3Ag|lm;~1zB;;3c2?+2!_~ijYE`u+?r{Gm^{eD9J2H%0p-~yNf*Y86) z_z8RoG&l?@U_bcwUP3+tP0#>;+(XC@;1XB@Pk|@Fwf(RUoB`9|7})b&&0~!S0#_n{I@RJUTBbdec_+t4bB;EnH8R4V9G^{YI5GE2gIx=@Gi<`%QCQSt=~f`!FqT@LKMZUm-=6 zA&qX}RMT`dZMsU`tM_TVJOAn<{cBkN>c_2v@E6yG?E~&Lr0j7-fQ)zLpzSJkus?|Y zZw}@IcW438L?f;z!pwif(1Z$Q%&C8}@m7T{Gld|+)-$1Oc!`LrWLfc33Br%+B#y8_ zE^lt=JQxrEo^y7t%yu-7BO|=G>xd`}8HjTe2S;c}VCF2EIB!&{)Wko^D`o-|&)u4! z*uu*)y!OP)%(c>``tiN@DPIxx(jz-qc93@HQ67S6WV0-|#5$*TR7A9bANlsmGIDn} zL8r=eF%Wr86KQs3P0wZIr4g9lzro7%CW~6K+rKK^l(AcxXv5}1(esgf@&r<)`6S3o zD&?bn^^g`8O}rs%*uV5gQPN*-eve#u=ViF|Mu%UYA9p zmvpe@TH$pNCvS$%v5w*+s>mb`i#p}IhbJOs-o?P@bM6Ank-|H*)@SSU#qUIf5MjFo5`PtynRKj zp~Oyr^r}fnJCW5 TeCSn9Qv<2>D9-?!s73w(U31|P From e65018c0f68437575bd133f1f9f8c7be926369c6 Mon Sep 17 00:00:00 2001 From: Denis Date: Thu, 9 Nov 2017 16:42:11 +0100 Subject: [PATCH 13/24] removing swp files --- axelrod/strategies/.meta.py.swp | Bin 32768 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 axelrod/strategies/.meta.py.swp diff --git a/axelrod/strategies/.meta.py.swp b/axelrod/strategies/.meta.py.swp deleted file mode 100644 index dfedf1ad94567780bc311d81ee276401bd69473b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 32768 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 From ebf0f9c092cbae4ab3f021c891db3ce0a2596ec5 Mon Sep 17 00:00:00 2001 From: Denis Date: Thu, 9 Nov 2017 16:42:11 +0100 Subject: [PATCH 14/24] removing swp files --- axelrod/strategies/.meta.py.swp | Bin 32768 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 axelrod/strategies/.meta.py.swp diff --git a/axelrod/strategies/.meta.py.swp b/axelrod/strategies/.meta.py.swp deleted file mode 100644 index dfedf1ad94567780bc311d81ee276401bd69473b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 32768 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 From 0147cd950fe50be12d752d9bc3b2301eb8a04b64 Mon Sep 17 00:00:00 2001 From: Denis Date: Fri, 10 Nov 2017 13:13:15 +0100 Subject: [PATCH 15/24] changes made according to pull request suggestions --- axelrod/strategies/_strategies.py | 1 + axelrod/strategies/meta.py | 18 ++-- .../strategies/.test_memory_decay.py.swp | Bin 12288 -> 0 bytes axelrod/tests/strategies/test_memory_decay.py | 78 ------------------ axelrod/tests/strategies/test_meta.py | 74 +++++++++++++++++ docs/reference/all_strategies.rst | 3 - 6 files changed, 85 insertions(+), 89 deletions(-) delete mode 100644 axelrod/tests/strategies/.test_memory_decay.py.swp delete mode 100644 axelrod/tests/strategies/test_memory_decay.py diff --git a/axelrod/strategies/_strategies.py b/axelrod/strategies/_strategies.py index 468c94dce..e5c906452 100644 --- a/axelrod/strategies/_strategies.py +++ b/axelrod/strategies/_strategies.py @@ -193,6 +193,7 @@ MathConstantHunter, NaiveProber, MEM2, + Michaelos, MindBender, MindController, MindReader, diff --git a/axelrod/strategies/meta.py b/axelrod/strategies/meta.py index 70d18a203..298e5e24e 100644 --- a/axelrod/strategies/meta.py +++ b/axelrod/strategies/meta.py @@ -1,5 +1,5 @@ from numpy.random import choice -from random import random,choice +import random from axelrod.action import Action from axelrod.player import Player, obey_axelrod @@ -537,14 +537,14 @@ def __init__(self): class MemoryDecay(MetaPlayer): """ - A player utilizes the (default) Tit for Tat stretegy for the first (default) 15 turns, + A player utilizes the (default) Tit for Tat strategy for the first (default) 15 turns, at the same time memorizing the opponent's decisions. After the 15 turns have passed, the player calculates a 'net cooperation score' (NCS) for his opponent, weighing decisions to Cooperate as (default) 1, and to Defect as (default) - -2. If the opponent's NCS is below 0, the player Defects; otherwise, - he Cooperates. + -2. If the opponent's NCS is below 0, the play defects; otherwise, + they cooperate. - The player's memories of his opponent's decisions have a random chance to be + The player's memories of the opponent's decisions have a random chance to be altered (i.e., a C decision becomes D or vice versa; default probability is 0.03) or deleted (default probability is 0.1). @@ -558,7 +558,7 @@ class MemoryDecay(MetaPlayer): 'memory_depth' : float('inf'), 'long_run_time' : False, 'stochastic' : True, - 'makes_use_of' : set(), + 'makes_use_of' : set([]), 'inspects_source' : False, 'manipulates_source' : False, 'manipulates_state' : False @@ -577,6 +577,8 @@ def __init__(self, p_memory_delete: float = 0.1, p_memory_alter: float = 0.03, self.start_strategy_duration = start_strategy_duration # searches for the specified start_strategy + #self.team = [start_strategy()] + self.strategy_search = start_strategy strats_list = [str(strategy) for strategy in self.team] if self.strategy_search != 'Tit For Tat': @@ -616,9 +618,9 @@ def strategy(self, opponent): self.start_strategy.history.append(play) return play else: - if random() <= self.p_memory_alter: + if random.random() <= self.p_memory_alter: self.mem_alter() - if random() <= self.p_memory_delete: + if random.random() <= self.p_memory_delete: self.mem_delete() self.gain_loss_tr() if sum(self.gloss_values) < 0: diff --git a/axelrod/tests/strategies/.test_memory_decay.py.swp b/axelrod/tests/strategies/.test_memory_decay.py.swp deleted file mode 100644 index 41ec44ec0773fcccdf66f3356c4a6388091208c0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12288 zcmeI2&2Jnv7{(oF`7Yl`MQ|{wU}oFRCflZ>3UG*a6@)}81OXwUXmDn|iIv^)cI*iW z{Xn8B2M+uNoOaTB|Nryv z{~sSA?f2+o5L%z|gZUk3>J9sCBafQ#T9co#ek z4uU@)BIFzJ3Ag|lm;~1zB;;3c2?+2!_~ijYE`u+?r{Gm^{eD9J2H%0p-~yNf*Y86) z_z8RoG&l?@U_bcwUP3+tP0#>;+(XC@;1XB@Pk|@Fwf(RUoB`9|7})b&&0~!S0#_n{I@RJUTBbdec_+t4bB;EnH8R4V9G^{YI5GE2gIx=@Gi<`%QCQSt=~f`!FqT@LKMZUm-=6 zA&qX}RMT`dZMsU`tM_TVJOAn<{cBkN>c_2v@E6yG?E~&Lr0j7-fQ)zLpzSJkus?|Y zZw}@IcW438L?f;z!pwif(1Z$Q%&C8}@m7T{Gld|+)-$1Oc!`LrWLfc33Br%+B#y8_ zE^lt=JQxrEo^y7t%yu-7BO|=G>xd`}8HjTe2S;c}VCF2EIB!&{)Wko^D`o-|&)u4! z*uu*)y!OP)%(c>``tiN@DPIxx(jz-qc93@HQ67S6WV0-|#5$*TR7A9bANlsmGIDn} zL8r=eF%Wr86KQs3P0wZIr4g9lzro7%CW~6K+rKK^l(AcxXv5}1(esgf@&r<)`6S3o zD&?bn^^g`8O}rs%*uV5gQPN*-eve#u=ViF|Mu%UYA9p zmvpe@TH$pNCvS$%v5w*+s>mb`i#p}IhbJOs-o?P@bM6Ank-|H*)@SSU#qUIf5MjFo5`PtynRKj zp~Oyr^r}fnJCW5 TeCSn9Qv<2>D9-?!s73w(U31|P diff --git a/axelrod/tests/strategies/test_memory_decay.py b/axelrod/tests/strategies/test_memory_decay.py deleted file mode 100644 index adcd0e4e6..000000000 --- a/axelrod/tests/strategies/test_memory_decay.py +++ /dev/null @@ -1,78 +0,0 @@ -"""Tests for the Memory Decay strategy""" - -import axelrod as axe -from axelrod.tests.strategies.test_player import TestPlayer - -C, D = axe.Action.C, axe.Action.D - -class TestMemoryDecay(TestPlayer): - - name = 'MemoryDecay' - player = axe.meta.MemoryDecay - expected_classifier = { - 'memory_depth': float('inf'), - 'stochastic': True, - 'makes_use_of': set(), - 'long_run_time': False, - 'inspects_source': False, - 'manipulates_source': False, - 'manipulates_state': False - } - - def test_strategy(self): - #Test TitForTat behavior in first 15 turns - opponent = axe.Cooperator() - actions = list([(C, C)]) * 15 - self.versus_test(opponent, expected_actions = actions) - - opponent = axe.Defector() - actions = [(C, D)] + list([(D, D)]) * 14 - self.versus_test(opponent, expected_actions = actions) - - opponent = axe.Alternator() - actions = [(C, C)] + [(C, D), (D, C)] * 7 - self.versus_test(opponent, expected_actions = actions) - - opponent_actions = [C, D, D, C, D, C, C, D, C, D, D, C, C, D, D] - opponent = axe.MockPlayer(actions =opponent_actions) - mem_actions = [C, C, D, D, C, D, C, C, D, C, D, D, C, C, D] - actions = list(zip(mem_actions, opponent_actions)) - self.versus_test(opponent, expected_actions = actions) - - opponent = axe.Random() - actions = [(C, D), (D, D), (D, C), (C, C), (C, D), (D, C)] - self.versus_test(opponent, expected_actions = actions, seed = 0) - - #Test alternative starting strategies - opponent = axe.Cooperator() - actions = list([(D, C)]) * 15 - self.versus_test(opponent, expected_actions = actions, - init_kwargs = {'start_strategy' : 'Defector'}) - - opponent = axe.Cooperator() - actions = list([(C, C)]) * 15 - self.versus_test(opponent, expected_actions = actions, - init_kwargs = {'start_strategy' : 'Cooperator'}) - - opponent = axe.Cooperator() - actions = [(C, C)] + list([(D, C), (C, C)]) * 7 - self.versus_test(opponent, expected_actions = actions, - init_kwargs = {'start_strategy' : 'Alternator'}) - - #Test net-cooperation-score (NCS) based decisions in subsequent turns - opponent = axe.Cooperator() - actions = [(C, C)] * 15 + [(C, C)] - self.versus_test(opponent, expected_actions = actions, seed = 1, - init_kwargs = {'memory' : [D] * 5 + [C] * 10}) - - opponent = axe.Cooperator() - actions = [(C, C)] * 15 + [(C, C)] - self.versus_test(opponent, expected_actions = actions, seed = 1, - init_kwargs = {'memory' : [D] * 4 + [C] * 11}) - - opponent = axe.Defector() - actions = [(C, D)] * 7 + [((D, D))] - self.versus_test(opponent, expected_actions = actions, seed = 4, - init_kwargs = {'memory' : [C] * 12, - 'start_strategy' : 'Defector', - 'start_strategy_duration' : 0}) diff --git a/axelrod/tests/strategies/test_meta.py b/axelrod/tests/strategies/test_meta.py index 44d90df80..ba455c4b0 100644 --- a/axelrod/tests/strategies/test_meta.py +++ b/axelrod/tests/strategies/test_meta.py @@ -585,3 +585,77 @@ def test_strategy(self): actions = [(C, C), (C, D), (D, C), (D, D), (D, C)] self.versus_test(opponent=axelrod.Alternator(), expected_actions=actions) + +"""Tests for the Memory Decay strategy""" + +class TestMemoryDecay(TestPlayer): + + name = 'MemoryDecay' + player = axelrod.MemoryDecay + expected_classifier = { + 'memory_depth': float('inf'), + 'stochastic': True, + 'makes_use_of': set([]), + 'long_run_time': False, + 'inspects_source': False, + 'manipulates_source': False, + 'manipulates_state': False + } + + def test_strategy(self): + #Test TitForTat behavior in first 15 turns + opponent = axelrod.Cooperator() + actions = list([(C, C)]) * 15 + self.versus_test(opponent, expected_actions=actions) + + opponent = axelrod.Defector() + actions = [(C, D)] + list([(D, D)]) * 14 + self.versus_test(opponent, expected_actions=actions) + + opponent = axelrod.Alternator() + actions = [(C, C)] + [(C, D), (D, C)] * 7 + self.versus_test(opponent, expected_actions=actions) + + opponent_actions = [C, D, D, C, D, C, C, D, C, D, D, C, C, D, D] + opponent = axelrod.MockPlayer(actions =opponent_actions) + mem_actions = [C, C, D, D, C, D, C, C, D, C, D, D, C, C, D] + actions = list(zip(mem_actions, opponent_actions)) + self.versus_test(opponent, expected_actions=actions) + + opponent = axelrod.Random() + actions = [(C, D), (D, D), (D, C), (C, C), (C, D), (D, C)] + self.versus_test(opponent, expected_actions=actions, seed=0) + + #Test alternative starting strategies + opponent = axelrod.Cooperator() + actions = list([(D, C)]) * 15 + self.versus_test(opponent, expected_actions=actions, + init_kwargs = {'start_strategy': 'Defector'}) + + opponent = axelrod.Cooperator() + actions = list([(C, C)]) * 15 + self.versus_test(opponent, expected_actions=actions, + init_kwargs = {'start_strategy': 'Cooperator'}) + + opponent = axelrod.Cooperator() + actions = [(C, C)] + list([(D, C), (C, C)]) * 7 + self.versus_test(opponent, expected_actions=actions, + init_kwargs = {'start_strategy': 'Alternator'}) + + #Test net-cooperation-score (NCS) based decisions in subsequent turns + opponent = axelrod.Cooperator() + actions = [(C, C)] * 15 + [(C, C)] + self.versus_test(opponent, expected_actions=actions, seed=1, + init_kwargs = {'memory': [D] * 5 + [C] * 10}) + + opponent = axelrod.Cooperator() + actions = [(C, C)] * 15 + [(C, C)] + self.versus_test(opponent, expected_actions=actions, seed=1, + init_kwargs = {'memory': [D] * 4 + [C] * 11}) + + opponent = axelrod.Defector() + actions = [(C, D)] * 7 + [((D, D))] + self.versus_test(opponent, expected_actions=actions, seed=4, + init_kwargs = {'memory': [C] * 12, + 'start_strategy': 'Defector', + 'start_strategy_duration': 0}) diff --git a/docs/reference/all_strategies.rst b/docs/reference/all_strategies.rst index fa9e08e95..746b643eb 100644 --- a/docs/reference/all_strategies.rst +++ b/docs/reference/all_strategies.rst @@ -102,9 +102,6 @@ Here are the docstrings of all the strategies in the library. .. automodule:: axelrod.strategies.mathematicalconstants :members: :undoc-members: -.. automodule:: axelrod.strategies.memorydecay - :members: - :undoc-members: .. automodule:: axelrod.strategies.memorytwo :members: :undoc-members: From b7e4d8cf1ff6825244e2dbc5681472d3995bf857 Mon Sep 17 00:00:00 2001 From: Denis Date: Fri, 10 Nov 2017 14:44:46 +0100 Subject: [PATCH 16/24] changed strategy search implementation --- axelrod/strategies/.meta.py.swp | Bin 0 -> 36864 bytes axelrod/strategies/meta.py | 25 +++++---------------- axelrod/tests/strategies/.test_meta.py.swp | Bin 0 -> 40960 bytes axelrod/tests/strategies/test_meta.py | 2 +- 4 files changed, 6 insertions(+), 21 deletions(-) create mode 100644 axelrod/strategies/.meta.py.swp create mode 100644 axelrod/tests/strategies/.test_meta.py.swp diff --git a/axelrod/strategies/.meta.py.swp b/axelrod/strategies/.meta.py.swp new file mode 100644 index 0000000000000000000000000000000000000000..1dc821c252616ee8289854f8b7a1e0395f892359 GIT binary patch literal 36864 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 Yra{aOU^+08p6}EL%qkkcR+X;(KVrWa9{>OV literal 0 HcmV?d00001 diff --git a/axelrod/tests/strategies/test_meta.py b/axelrod/tests/strategies/test_meta.py index ba455c4b0..6b3a79c80 100644 --- a/axelrod/tests/strategies/test_meta.py +++ b/axelrod/tests/strategies/test_meta.py @@ -591,7 +591,7 @@ def test_strategy(self): class TestMemoryDecay(TestPlayer): name = 'MemoryDecay' - player = axelrod.MemoryDecay + player = axelrod.meta.MemoryDecay expected_classifier = { 'memory_depth': float('inf'), 'stochastic': True, From fdc47414a8c7dd5a76fd547d37efde5afd7f11ea Mon Sep 17 00:00:00 2001 From: Denis Date: Fri, 10 Nov 2017 14:49:05 +0100 Subject: [PATCH 17/24] removing swp files --- axelrod/strategies/.meta.py.swp | Bin 36864 -> 0 bytes axelrod/tests/strategies/.test_meta.py.swp | Bin 40960 -> 0 bytes 2 files changed, 0 insertions(+), 0 deletions(-) delete mode 100644 axelrod/strategies/.meta.py.swp delete mode 100644 axelrod/tests/strategies/.test_meta.py.swp diff --git a/axelrod/strategies/.meta.py.swp b/axelrod/strategies/.meta.py.swp deleted file mode 100644 index 1dc821c252616ee8289854f8b7a1e0395f892359..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 36864 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 Yra{aOU^+08p6}EL%qkkcR+X;(KVrWa9{>OV From 91202c712df254717ca638cda0c58ac8e7a674a0 Mon Sep 17 00:00:00 2001 From: Denis Date: Mon, 13 Nov 2017 13:02:05 +0100 Subject: [PATCH 18/24] fixing unittest errors --- axelrod/strategies/.meta.py.swp | Bin 0 -> 32768 bytes axelrod/strategies/meta.py | 8 ++++---- 2 files changed, 4 insertions(+), 4 deletions(-) create mode 100644 axelrod/strategies/.meta.py.swp diff --git a/axelrod/strategies/.meta.py.swp b/axelrod/strategies/.meta.py.swp new file mode 100644 index 0000000000000000000000000000000000000000..8302660230839a1c97d3190a96d76f28b856da11 GIT binary patch literal 32768 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 H#rXceG;&X* literal 0 HcmV?d00001 diff --git a/axelrod/strategies/meta.py b/axelrod/strategies/meta.py index 27947daee..d045f4073 100644 --- a/axelrod/strategies/meta.py +++ b/axelrod/strategies/meta.py @@ -559,7 +559,7 @@ class MemoryDecay(MetaPlayer): 'memory_depth' : float('inf'), 'long_run_time' : False, 'stochastic' : True, - 'makes_use_of' : set([]), + 'makes_use_of' : set(), 'inspects_source' : False, 'manipulates_source' : False, 'manipulates_state' : False @@ -576,7 +576,7 @@ def __init__(self, p_memory_delete: float = 0.1, p_memory_alter: float = 0.03, self.gain_value = gain_value self.memory = [] if memory == None else memory self.start_strategy_duration = start_strategy_duration - self.team = start_strategy() + self.team = [start_strategy()] # translates the actions (D and C) to numeric values (loss_value and # gain_value) @@ -599,8 +599,8 @@ def strategy(self, opponent): except IndexError: pass if len(self.history) < self.start_strategy_duration: - play = self.team.strategy(opponent) - self.team.history.append(play) + play = self.team[0].strategy(opponent) + self.team[0].history.append(play) return play else: if random.random() <= self.p_memory_alter: From ea6866206b21184ec2d6b2dcd9de5d5b00598583 Mon Sep 17 00:00:00 2001 From: Denis Date: Mon, 13 Nov 2017 16:02:20 +0100 Subject: [PATCH 19/24] fixing unittest errors --- axelrod/strategies/.meta.py.swp | Bin 32768 -> 0 bytes axelrod/strategies/__init__.py | 2 +- axelrod/strategies/meta.py | 8 +++-- axelrod/tests/strategies/.test_meta.py.swp | Bin 0 -> 40960 bytes axelrod/tests/strategies/test_meta.py | 40 ++++++++++----------- 5 files changed, 26 insertions(+), 24 deletions(-) delete mode 100644 axelrod/strategies/.meta.py.swp create mode 100644 axelrod/tests/strategies/.test_meta.py.swp diff --git a/axelrod/strategies/.meta.py.swp b/axelrod/strategies/.meta.py.swp deleted file mode 100644 index 8302660230839a1c97d3190a96d76f28b856da11..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 32768 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 H#rXceG;&X* diff --git a/axelrod/strategies/__init__.py b/axelrod/strategies/__init__.py index 843cebb47..811e4d116 100644 --- a/axelrod/strategies/__init__.py +++ b/axelrod/strategies/__init__.py @@ -7,7 +7,7 @@ # because it creates circular dependencies from .meta import ( - MetaHunter, MetaHunterAggressive, MetaPlayer, MetaMajority, + MemoryDecay, MetaHunter, MetaHunterAggressive, MetaPlayer, MetaMajority, MetaMajorityMemoryOne, MetaMajorityFiniteMemory, MetaMajorityLongMemory, MetaMinority, MetaMixer, MetaWinner, MetaWinnerDeterministic, MetaWinnerEnsemble, MetaWinnerMemoryOne, MetaWinnerFiniteMemory, diff --git a/axelrod/strategies/meta.py b/axelrod/strategies/meta.py index d045f4073..c3d6fb2c7 100644 --- a/axelrod/strategies/meta.py +++ b/axelrod/strategies/meta.py @@ -558,7 +558,7 @@ class MemoryDecay(MetaPlayer): classifier = { 'memory_depth' : float('inf'), 'long_run_time' : False, - 'stochastic' : True, + 'stochastic' : False, 'makes_use_of' : set(), 'inspects_source' : False, 'manipulates_source' : False, @@ -569,14 +569,16 @@ def __init__(self, p_memory_delete: float = 0.1, p_memory_alter: float = 0.03, loss_value: float = -2, gain_value: float = 1, memory: list = None, start_strategy: Player = TitForTat, start_strategy_duration: int = 15): - super().__init__() + super().__init__(team = [start_strategy]) self.p_memory_delete = p_memory_delete self.p_memory_alter = p_memory_alter self.loss_value = loss_value self.gain_value = gain_value self.memory = [] if memory == None else memory self.start_strategy_duration = start_strategy_duration - self.team = [start_strategy()] + + def __repr__(self): + return Player.__repr__(self) # translates the actions (D and C) to numeric values (loss_value and # gain_value) diff --git a/axelrod/tests/strategies/.test_meta.py.swp b/axelrod/tests/strategies/.test_meta.py.swp new file mode 100644 index 0000000000000000000000000000000000000000..b6302c312957cb9e867d8477839ecf385081f4a4 GIT binary patch literal 40960 zcmeI53zQsHnScvaL}OmUUyYQS;Ysq2<{?!*0%%|k%zi_c3pQ}7hNB);O_U|s#|rd`Y|)f zOcJr`m&i{MDleSO?6!#y)SMIrpGIX-9oTD4Gfrd-EgAt%Pl zPOXrinVl>4?0P1FOad(>P_Iq)oPLCL%E~@f)jK;*u#bMm1ucVT7cvQC638TwNg$Iz zCV@->nFKNkWDhs|6`*iqONnJlA{5}$X{vdVz(D1vC zzb|}%e$HXxbvOKcf9m={;rVsp=b>SO_5Fv3=aq89-{+;S9~fSLX82i4T@O!ZADIL) z31kw;B#=oUlRzecOahq%G6`f7$RvH_F9v;NdaTSchYv5$KALGa;;U@S5TmhHE6s&>e z@IMIoKDZ6u23ue)bi(uCxo{vnjG^KS@D_M8Y=PIoTIhlt{2bfGJ7F58;6zaGFD#*U zcx>p)*PKGx9MwkN{izU@}* z+O%Vr3$OF4Zf&;P-safb+)~LdhR<>AX{YMsc^~27JEh5d!S|hNZOujXLaB>Hh7KRI zT^m-CsG;Ri;CW|Yu52}Aq3l(iD3M;(x4j@IA}^H-f7+{;Cc>;5>EEytaca43C>3TM zBxxkrxH^pA%CK8ek|B%=gy?ML)Dq=c1hTxpjetr{rE5k#NWD!Y)E7T6xWGe|T!U|2 zl8FKNFAmqb90a0?(j@`A%rxzYGM6hCD(+0ZgmaER=GXYh_1kL;CEsZg#H&|}QJC&H zkX!L*C~rj4Dnz-kg=f@#XUv=AA=`6Pg|d_DwsQz$sy3b5VZ>JQDpOo6v>BeElj!g**_vLoV35V02iPip<`GtCM+4mp-vUy?ZGl zkp!2f5-qS5P*o^u3ffkhxzjrs7u9`J>1oFbmAGXyvlF#td(aGo4dncqfrVAM#jQ<= zI^L>!?$=c=6m^p-7hY+sa{BEoq{`8Nhs`o=MQ-~JTB#j&&QbcoZN8r{ zV6O>V)8v&7`@|@3O=Coky=i(yW zhJB7RyQW(8s{M(J5+IIlgr3vr&qnk0nF)H&u9_*`RG7FFNL;n*Z2SO8a!nE(=1q!; zk>bR2%?@sq&d2QHEQwhk#$EEB3EEYt%qEklE;M_3i$c(3z%UwTLqAzQ>2s4q0_sSU zmMDJL#%mkN8C`rFBF+$bnQ)6WW0)2Qj`PjyOnmDYL!F=!ck{x{&fgdU46OGmjvm4- ze%oz~xpuQXPL#fAG-ZyV3<)+2pxOZyG9x1L?naOiDb!N!2RQehC;|D*Z#AdtY8LwJ1WMhSA!kaD0 z4B>rSRaH{Al>~cr-&O<9*t=dyQ}q8=qEmkpME}?G}=^ul8;3n|E zhU4M)=<;{M==49|y7 zI0P(s5S{*3co%GgS3^G>1Ajo5{~`ELg_pxR5Iz3|a3DN{9)CN$58eQ;g?=~=oXeTr zv^^JSnZz+NIBK6{_pOZYRZ99+r|Q@JKp*#JX3)4RHA5#aC>6>d2tT{g?45~$RdFQY z1)eq1CF<95dCF<_$$ae^lJCodi4aMsj^9wxbdIzEw;?}rBAusX&t%AFb*bi5D>4gb z^iaE#O-rXEmAyf-cd}h_FRtj#-Tx=<`xzSNsjZ)^ei(r>6!i~x2aENbpn$5!RhWlAfy0a&8{f0y~` zqtJat|6dml@BRgy|8Dqe*aqjr3Rn(Z@HF@?y8rdyzyuWGGij)WuNpRotr4IhFx!Uk9c$HH&01AGlW441(yTnr;%!_Tn= zd=5Sfx4>0UhL=Mg9>osuAbbgKfLYiCeQ+|I1V_L<$mKmS1(R?Fyck4Yzs4@`IQ$sy z1hE^;g7^gtz;obt$aWWe3%&_A!=DCw z%=Lc}cEF|ZN;nq28!m*i5@N@1FtiV=={8%%s5{wNnX`yQpg*sv4xkbRMFX|#Y&vhg7Ra@>ra#`xfT|#bis;m`x7czi9zR+sGZuM%F|lW zd!1G#D!AIBOqsW4r7CQUn>nyF_FT<-zrEL9iT?i*bpFRe|NrSw{}=y%@d5ZAd=&l` z-V76PHXIGVN6)_x#2?@)5IewGa0a{>j)QNZ@81lcf^k>}-LMRPhK_$Xd5c&VXlw_z3(v$QpplVG@Sm7&sb!iGKfHcmwKO70aLZ|;0d<@OgO{(T_t>d{c&4`0`Ae1yf+ zZWt#j`)hBnvW==PU2KV=8F9XPZ)n90Vi_8ZN3)&w>Pd{Bwv5N?Eom|U{aiaER<2tKtW#l;RPE9kL z8;^k(uncuiOWc0gc`c-O5=CQwTppTyEvg9X5vg1( z@E_>$-++(9Rp7u`AUghw;W+pay8PX60~DbbR=~sP@gIRrun`V}&!fM84lak6!7_LN zeO=b|za2*4Y4Bxq_DjHpHE=vUfu8;Vd=_p5AI^kF(a*mEcfmixHLwL<3eSgMp`Y)9 zPs24J>-5(^2Rs*^1AjzczYE?9GFN{gbb{#c-vp8S%_94G9@5lBgZp^d35|8TWys+I zN7GK1C~-;$8V*C*Ep2@gOouY#YElX%olTD@@q2Z`3p+;R1layzNEQ`)Bv{}+YEGJ_ z8?LmjJogxXpAF2-auOJn)3aa60vCiyPlGj$rAbkXL^G0sP{|#y%BsH!k8{3fj;>^|F>`MkQz+%WFARDtq`|$m+Ua%qoLfm*23dxs$9r46T>5_O@xaIBi#* zLXk0=EiXOx)sQ$lxmNb@zpHKYbk1~g)bc);wR$QcmIRlh)81sPF5I+sQ)s2tw?`wy zf-kOPN}2bzv=HV_ovtLil{THGrk`rYG;S&| zyR$0~H3*f=6IG3+tkd2$2e)eM&%s_dVa1_jQ#;t_1e12Ogfu9x`8aPnkJ0C%lqqv} zqDYJluS5)MtF+xwdm2bWI^&c_cSpAPzz!cP%0a`Fnc!supSYn99r2fNPn8^A+wJM4rSR6usDi2-#~EE<}rv~zL#`~G2jX}huD;+DEpiQG$t?%d{1qH35GmN*I0 z#IH|+1R>%$vcg77DMzvuY_%;@^CoW3Jlj*nDABN`uI;5FW*UMm5l*vat*uEpC}w6n zSwRy)a?G!wExe^_=mX6S>iSs-*xV+)9~8I1R@~H{95!e{h-TL0AV3tuqLi|5skyNy zZ|ebhQ=^onUNrwT>q9Xy#oAS15R1PXrY0Rn^w~(e+Rq;ME740-C%+2`F|^jKftHqI(QYxy8r(|zn4A# z{}a9jUxiP>JHUtYKx_bqz)#WjzXUsBJJg{DvJPM~h%G>`1NaE~zpMiohm+v<==yiT z>tP363ftiVI0U|pt}ko;r=SB)fL-YJx4?Ed8;*hRpwoXF-VdAMsc<-mj(MwQvnw4U@1A zWUv3jLEhJ{7JdU#=H*ygTdu59+!!tFwd8@irBQ1e<7;O7lDz9rs9jm`5;PG=v}>?5 zL9w^Sg0_{FcslKkTihAuZHJvo||SDTE0_izPx%l-|VUbOBCWY*&WW z*edX#J-^`kj^DMpP^vp>$LMH_Z9SRW9c?_cJhtv?8?NCbU>b^5!X@!deT0YIi}`s9 znOasq2hq(w$UMv)ugl!tfceFEqIp^->hmkR?fj|2s1(HYENLmQrEJNaU^85AyfE&T z`00;C)KRMRWWOHxMtdB@{;hFt;&U&n)+d<4PuYm7BEd07cH16vD`RFl6UIsrNBg70 zyqC2V=2yctq#=@oKZ#zLA$g4F&l>J&IS{vW(76ZTv5ZP6zSORJ=Q_eH!Nyb4aJ;xNGvAt?6;RiY;1lBkp0{PW2n(zM8;vVRJ)(^4x; zOi%+N*-@JUcNAIdL|?2IF*SmT?K|hnN#Ebyky&;-pVw-QCt%)&1Q*@ z#JQo*Xa&VSxw!4yDM5Q9<$F)tEtO>H^QE(%b4q1*ttydVl2#&fQYLPgl3^BRvTVK_ zxzygXx~)+vY8B%_5%0F03#)WxD#N;)RyJ%^0y@&m_JVRDo3%)w4Qk(XwedQyw)qjI zCoH8)yA4ZXESb%WB!94}yp&7E;#rMYJ+Y)nBuZ6iNQ{G+1Hficv>O996uAAWtcm{r zCUo6#bYPkP@0D(e^4_oL6h3r0YE|DOksqRW3CE`k~8fXC3^zXP(L-yoa?&xT)- zewo`Zg5*Wk^dAeqA#eA>7eMCq<@fw9fK_lWy8JG<5w3(QAUiS%WD>|EkV#;%B_RD^ z!eW)^7!y~FpFD~Ovkmt*4W)mKa_;zaNaCH}*f<){&Y6;S0oq-ge`edp()J?CJ;xm4 znLEVV!d%hFbvZ2cf3yD#bBYZ9jXl7JA{XyL`Kzzbu*$SFm$Y_s)N{14Hq=xZWtUCa z%tE>Kk4DL!%K{e#Y{=pq`BP5|@@M{1#r~E*ovmP((uz~-DaL!=^aM-AyVehGTyBpS zd{&-JI7QdTzNpsP`1Nt$xu`D7p@T&+k+gO{o5tLA>NV=Aas8>6o9NH@eB0NXZBU$W zUDg#K+n^Y+G#UmP%3yNq{cMBcso8{ievYn3c_u}z!~%Qf`Tn4EdRwc61upFym9}%G zueUQ;sEkAk|NM+y(Wb=e=GZWywu)7I3-i-P`93Vt`CjbOJ Date: Mon, 13 Nov 2017 16:22:24 +0100 Subject: [PATCH 20/24] removing swapfiles --- axelrod/tests/strategies/.test_meta.py.swp | Bin 40960 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 axelrod/tests/strategies/.test_meta.py.swp diff --git a/axelrod/tests/strategies/.test_meta.py.swp b/axelrod/tests/strategies/.test_meta.py.swp deleted file mode 100644 index b6302c312957cb9e867d8477839ecf385081f4a4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 40960 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 Date: Mon, 13 Nov 2017 16:44:42 +0100 Subject: [PATCH 21/24] changed Test class name --- axelrod/tests/strategies/test_meta.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/axelrod/tests/strategies/test_meta.py b/axelrod/tests/strategies/test_meta.py index 896b0835f..5073ff1cf 100644 --- a/axelrod/tests/strategies/test_meta.py +++ b/axelrod/tests/strategies/test_meta.py @@ -588,7 +588,7 @@ def test_strategy(self): """Tests for the Memory Decay strategy""" -class TestMemoryDecayDefParam(TestPlayer): +class TestMemoryDecay(TestPlayer): name = "Memory Decay: 0.1, 0.03, -2, 1, , 15" player = axelrod.MemoryDecay From 46ffad9bdcdfc298aaf3cbdf2b60b6dfcf79fc1b Mon Sep 17 00:00:00 2001 From: Denis Date: Mon, 13 Nov 2017 17:46:34 +0100 Subject: [PATCH 22/24] added lines to player.py to display name instead of class in __repr__, fixed stochastic classifier for memdecay --- axelrod/player.py | 5 +++++ axelrod/strategies/meta.py | 3 ++- axelrod/tests/strategies/test_meta.py | 4 ++-- 3 files changed, 9 insertions(+), 3 deletions(-) diff --git a/axelrod/player.py b/axelrod/player.py index 0eb60cf1c..96d32816e 100644 --- a/axelrod/player.py +++ b/axelrod/player.py @@ -199,6 +199,11 @@ def __repr__(self): prefix = ': ' gen = (value for value in self.init_kwargs.values() if value is not None) for value in gen: + try: + if issubclass(value, Player): + value = value.name + except TypeError: + pass name = ''.join([name, prefix, str(value)]) prefix = ', ' return name diff --git a/axelrod/strategies/meta.py b/axelrod/strategies/meta.py index c3d6fb2c7..4215801bc 100644 --- a/axelrod/strategies/meta.py +++ b/axelrod/strategies/meta.py @@ -558,7 +558,7 @@ class MemoryDecay(MetaPlayer): classifier = { 'memory_depth' : float('inf'), 'long_run_time' : False, - 'stochastic' : False, + 'stochastic' : True, 'makes_use_of' : set(), 'inspects_source' : False, 'manipulates_source' : False, @@ -570,6 +570,7 @@ def __init__(self, p_memory_delete: float = 0.1, p_memory_alter: float = 0.03, memory: list = None, start_strategy: Player = TitForTat, start_strategy_duration: int = 15): super().__init__(team = [start_strategy]) + self.classifier["stochastic"] = True self.p_memory_delete = p_memory_delete self.p_memory_alter = p_memory_alter self.loss_value = loss_value diff --git a/axelrod/tests/strategies/test_meta.py b/axelrod/tests/strategies/test_meta.py index 5073ff1cf..22b5ed60b 100644 --- a/axelrod/tests/strategies/test_meta.py +++ b/axelrod/tests/strategies/test_meta.py @@ -590,12 +590,12 @@ def test_strategy(self): class TestMemoryDecay(TestPlayer): - name = "Memory Decay: 0.1, 0.03, -2, 1, , 15" + name = "Memory Decay: 0.1, 0.03, -2, 1, Tit For Tat, 15" player = axelrod.MemoryDecay expected_classifier = { 'memory_depth': float('inf'), 'long_run_time': False, - 'stochastic': False, + 'stochastic': True, 'makes_use_of': set(), 'inspects_source': False, 'manipulates_source': False, From 67dcac4e6b8c1e48c36135124754a75e47a6cd3c Mon Sep 17 00:00:00 2001 From: Denis Date: Tue, 14 Nov 2017 12:28:07 +0100 Subject: [PATCH 23/24] making requested changes: cleaning and simplifying MemoryDecay class code --- axelrod/strategies/meta.py | 42 +++++++++++++++++++++++--------------- 1 file changed, 26 insertions(+), 16 deletions(-) diff --git a/axelrod/strategies/meta.py b/axelrod/strategies/meta.py index 4215801bc..f5d1deb3e 100644 --- a/axelrod/strategies/meta.py +++ b/axelrod/strategies/meta.py @@ -540,17 +540,17 @@ class MemoryDecay(MetaPlayer): """ A player utilizes the (default) Tit for Tat strategy for the first (default) 15 turns, at the same time memorizing the opponent's decisions. After the 15 turns have - passed, the player calculates a 'net cooperation score' (NCS) for his opponent, + passed, the player calculates a 'net cooperation score' (NCS) for their opponent, weighing decisions to Cooperate as (default) 1, and to Defect as (default) - -2. If the opponent's NCS is below 0, the play defects; otherwise, + -2. If the opponent's NCS is below 0, the player defects; otherwise, they cooperate. The player's memories of the opponent's decisions have a random chance to be altered (i.e., a C decision becomes D or vice versa; default probability is 0.03) or deleted (default probability is 0.1). - It's necessary to specify EXACT name of the starting strategy if changing - the default. Possible strategies can be accessed with the .team attribute. + It is possible to pass a different axelrod player class to change the inital + player behavior. Name: Memory Decay """ @@ -581,19 +581,29 @@ def __init__(self, p_memory_delete: float = 0.1, p_memory_alter: float = 0.03, def __repr__(self): return Player.__repr__(self) - # translates the actions (D and C) to numeric values (loss_value and - # gain_value) - def gain_loss_tr(self): - self.gloss_values = [*map(lambda x: self.loss_value if x == D else - self.gain_value, self.memory)] + def gain_loss_translate(self): + """ + Translates the actions (D and C) to numeric values (loss_value and + gain_value). + """ + self.gloss_values = [] + for action in self.memory: + if action == D: + self.gloss_values.append(self.loss_value) + else: + self.gloss_values.append(self.gain_value) - # alters memory entry, i.e. puts C if there's a D and vice versa - def mem_alter(self): + def memory_alter(self): + """ + Alters memory entry, i.e. puts C if there's a D and vice versa. + """ alter = choice(range(0, len(self.memory))) self.memory[alter] = self.memory[alter].flip() - # deletes memory entry - def mem_delete(self): + def memory_delete(self): + """ + Deletes memory entry. + """ self.memory.pop(choice(range(0, len(self.memory)))) def strategy(self, opponent): @@ -607,10 +617,10 @@ def strategy(self, opponent): return play else: if random.random() <= self.p_memory_alter: - self.mem_alter() + self.memory_alter() if random.random() <= self.p_memory_delete: - self.mem_delete() - self.gain_loss_tr() + self.memory_delete() + self.gain_loss_translate() if sum(self.gloss_values) < 0: return D else: From f1a75c9c89a035fcd031edfb58b92ebd62be20b5 Mon Sep 17 00:00:00 2001 From: Denis Date: Tue, 14 Nov 2017 12:49:22 +0100 Subject: [PATCH 24/24] switched gain_loss_translate() to list comprehension --- axelrod/strategies/meta.py | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/axelrod/strategies/meta.py b/axelrod/strategies/meta.py index f5d1deb3e..30abf0daf 100644 --- a/axelrod/strategies/meta.py +++ b/axelrod/strategies/meta.py @@ -586,12 +586,11 @@ def gain_loss_translate(self): Translates the actions (D and C) to numeric values (loss_value and gain_value). """ - self.gloss_values = [] - for action in self.memory: - if action == D: - self.gloss_values.append(self.loss_value) - else: - self.gloss_values.append(self.gain_value) + values = { + C: self.gain_value, + D: self.loss_value + } + self.gloss_values = [values[action] for action in self.memory] def memory_alter(self): """