2017-10-08 8 views
1

python axelrodライブラリを使用して、自分自身で次の(そして素晴らしい)ブログを使っています:http://mojones.net/evolving-strategies-for-an-iterated-prisoners-dilemma-tournament.html。ルックアップ戦略を実装しようとすると、次のエラーが発生します。python axelrodのキーエラーを解決するにはどうすればいいですか?lookerup strategy

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

このエラーを解決するにはどうすればよいですか?ルックアップ戦略を間違って実装していますか?私はgithub上の戦略のコードを通じてエラーをトレースしようとしましたが、私は問題を見ていないだけです。次のコードは、私の問題の例です。そして、別のオルタネーターを使ってルックアップ戦略を切り替えると、私が期待するようにアクセルロードのゲームが実行されます。

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) 

(他のタグは「アクセルロッド」と「prisoner's-ジレンマ」が含まれる場合があります。)

+0

サンプルコードが壊れています: 'random_table'は定義されていません。 – lxop

答えて

1

問題は、Action 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) 
関連する問題