如何解决 python axelrod Lookerup 策略中的关键错误

How can I resolve a key error in python axelrod Lookerup strategy

使用 python axelrod 库,我正在为自己浏览以下(和优秀的)博客:http://mojones.net/evolving-strategies-for-an-iterated-prisoners-dilemma-tournament.html。在尝试实施 lookerup 策略时,出现以下错误:

KeyError: Plays(self_plays=(C, C), op_plays=(C, D), op_openings=(C, D))

我该如何解决这个错误?我是否错误地实施了查找策略?我已尝试通过 github 上的策略代码来跟踪错误,但我只是没有看到问题。以下代码提供了我的问题的示例。如果我将 lookerup 策略切换为另一个(例如,使用另一个交流发电机),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" 和 "prisoner's-dilemma"。)

问题是当您需要使用 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)