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,))
添加回答
舉報