2017-10-08 7 views
1

파이썬 axelrod 라이브러리를 사용하여 다음과 같은 멋진 블로그를 직접 보게 될 것입니다 : http://mojones.net/evolving-strategies-for-an-iterated-prisoners-dilemma-tournament.html. lookerup 전략을 구현하려고 시도 할 때 다음과 같은 오류가 발생합니다.python axelrod의 키 오류를 어떻게 해결할 수 있습니까? lookerup 전략

어떻게이 오류를 해결할 수 있습니까? lookerup 전략을 잘못 구현하고 있습니까? github에서 전략 코드를 통해 오류를 추적하려고 시도했지만 문제가 보이지 않습니다. 다음 코드는 내 문제의 예를 제공합니다. 그리고 만약 다른 Alternator에 대한 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) 

문제는 당신이 Action의를 사용해야 할 때, 액션을 표현하기 위해 문자열을 사용하는 것입니다

+0

샘플 코드가 깨졌습니다. 'random_table'은 정의되지 않았습니다. – lxop

답변

1

(다른 태그는 "악셀로드"와 "prisoner's-딜레마".이 포함될 수 있습니다). 수리는 아주 간단합니다 :

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)