2 回答
TA贡献1818条经验 获得超8个赞
我就是这样做的。将要优化的函数与类方法分开,并使用两个方法都可以使用的用于收益计算的私有静态方法。
import numpy as np
from scipy.optimize import minimize
class Player:
def __init__(self):
self.action = np.random.choice(np.linspace(0, 1, 11))
@staticmethod
def _calc_payoff(a, b):
if a < b:
return (1 - a) * a
elif a == b:
return 0.5 * (1 - a) * a
else:
return 0
def payoff(self, other):
return self._calc_payoff(self.action, other.action)
def best_reply(self, other):
f = lambda x: 1 - self._calc_payoff(x, other.action)
br = minimize(f, 0.5)
return br.x.item()
A = Player()
B = Player()
print(A.best_reply(B))
是0.5正确的结果吗?
TA贡献2080条经验 获得超4个赞
payoff
是一种方法,您不能使用方法进行数学运算,只能使用它们的返回值。就像Python无法计算实情一样-print
,它也无法计算实情-self.payoff
。
对于第二个错误,我认为问题在于你需要改变你的通话方式minimize
。尝试一下并请发布结果:
br = minimize(self.payoff, 0.5, (other,))
添加回答
举报