我是 python 新手,所以这可能是一个愚蠢的问题,但是我在任何地方都找不到答案。
我试图根据另一个玩家的动作找到一个玩家的最佳反应。对于那些熟悉的经济学,这种情况是典型的伯特兰价格竞争。代码如下:
import numpy as np
from scipy.optimize import minimize
class Player:
def __init__(self):
self.action = np.random.choice(np.linspace(0, 1, 11))
def payoff(self, other):
if self.action < other.action:
return (1 - self.action) * self.action
elif self.action == other.action:
return 0.5 * (1 - self.action) * self.action
else:
return 0
def best_reply(self, other):
br = minimize(-self.payoff, 0.5, other)
return br['x']
A = Player()
B = Player()
print(A.best_reply(B))
当我运行上面的代码时,我收到以下错误:
TypeError: bad operand type for unary -: 'method'
有人可以向我解释这是为什么吗?我能够通过将收益乘以 -1 并从 best_reply 函数中删除“-”来规避这个问题。但是,当我运行代码时,我得到:
TypeError: payoff() takes 2 positional arguments but 3 were given
怎么会?我给出的唯一参数是自己(A)和另一个玩家(B)。如果有人能够通过解释我到底做错了什么以及运行此类代码的正确方法是什么来帮助我,我将非常感激。先感谢您!
编辑:将导入添加到代码中
弑天下
犯罪嫌疑人X
相关分类