【发布时间】:2020-12-17 17:38:09
【问题描述】:
我是 python 新手,所以这可能是一个愚蠢的问题,但是我无法在任何地方找到答案。
我正在尝试根据另一名玩家的动作找到一个玩家的最佳反应。这种情况是您对那些熟悉的经济学的典型 Bertrand 价格竞争。代码如下:
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)。如果有人能够通过解释我到底做错了什么以及运行此类代码的正确方法是什么来帮助我,我将非常感激。提前谢谢!
编辑:向代码添加导入
【问题讨论】:
-
minimize的第一个参数应该是一个函数。-self.payoff不是有效操作。你不能否定一个函数。你可以否定它返回的数组或数字,但你不能在-抽象地应用到函数(或方法)。 -
马上,我看到你在
minimize函数中调用-self.payoff没有参数other。还。要使用 scipy 最小化功能,您需要添加from scipy.optimize import minimize。
标签: python scipy scipy-optimize scipy-optimize-minimize