调试囚犯的模拟

时间:2016-07-04 06:46:38

标签: python

Prisoner's Dilemma

此程序应返回204和199,但返回0和1000。 我可以通过将main方法的第一行和第二行更改为:

来解决问题
    FirstStrat = Defector()
    SecondStrat = TitForTat()

为什么会发生这种情况?

无论我输入DefectorTitForTat的订单如何,我如何更改程序以使其有效?

1 个答案:

答案 0 :(得分:1)

问题来自于您从类Strategy定义变量的方式。通过这种方式定义它们:

class Strategy(object):
    turn_number = 1
    moves = []
    opponent_moves = []
    total_points = 0
    opponent_points = 0

所有这些变量将由类Strategy(或其任何子类)的所有实例共享。这使得self.opponent_moves不会保存来自对手的移动,它将保存来自两个玩家的移动(因为他们在每个调用方法update时共享此变量),因此方法{{来自get_move的1}}将返回TitForTat的最后一次移动,而不是来自对手的最后一次移动。

要解决您的问题,只需将它们定义为SecondStrat

中的类变量即可
__init__

它会正常工作。

相关问题