使用python axelrod库,我将亲自浏览以下(和优秀)博客:http://mojones.net/evolving-strategies-for-an-iterated-prisoners-dilemma-tournament.html。在尝试实现查找策略时,我收到以下错误:
KeyError: Plays(self_plays=(C, C), op_plays=(C, D), op_openings=(C, D))
如何解决此错误?我是否错误地实施了查找策略?我试过通过github上的策略代码来跟踪错误,但我只是没有看到这个问题。以下代码提供了我的问题的示例。如果我为另一个(例如另一个Alternator)切换了查找策略,那么axelrod游戏的表现就像我期望的那样。
import axelrod
import random
import itertools
def get_random_table():
strings = [''.join(x) for x in itertools.product('CD', repeat=2)]
keys = list(itertools.product(strings, strings, strings))
values = ''.join([random.choice('CD') for _ in keys])
return dict(zip(keys, values))
player_1 = axelrod.LookerUp(random_table)
#player_1 = axelrod.Alternator()
player_2 = axelrod.Alternator()
g = axelrod.Game()
iterations = 10
for turn in range(iterations):
player_1.play(player_2)
(其他标签可能包括“axelrod”和“囚徒困境”。)
答案 0 :(得分:1)
问题在于,当您需要使用Action
时,您正在使用字符串来表示操作。修理非常简单:
import axelrod
from axelrod.action import Action
import itertools
import random
def get_random_table():
action_pairs = list(itertools.product((Action.C, Action.D), repeat=2)) # <- Action
keys = list(itertools.product(action_pairs, action_pairs, action_pairs))
values = [random.choice((Action.C, Action.D)) for _ in keys] # <- Actions instead of strings
return dict(zip(keys, values))
player_1 = axelrod.LookerUp(get_random_table())
# player_1 = axelrod.Alternator()
player_2 = axelrod.Alternator()
g = axelrod.Game()
iterations = 10
for turn in range(iterations):
player_1.play(player_2)