亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何在類中使用 scipy 的最小化?

如何在類中使用 scipy 的最小化?

HUX布斯 2023-06-27 18:19:22
我是 python 新手,所以這可能是一個愚蠢的問題,但是我在任何地方都找不到答案。我試圖根據另一個玩家的動作找到一個玩家的最佳反應。對于那些熟悉的經濟學,這種情況是典型的伯特蘭價格競爭。代碼如下:import numpy as npfrom scipy.optimize import minimizeclass 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)。如果有人能夠通過解釋我到底做錯了什么以及運行此類代碼的正確方法是什么來幫助我,我將非常感激。先感謝您!編輯:將導入添加到代碼中
查看完整描述

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正確的結果嗎?


查看完整回答
反對 回復 2023-06-27
?
犯罪嫌疑人X

TA貢獻2080條經驗 獲得超4個贊

payoff是一種方法,您不能使用方法進行數學運算,只能使用它們的返回值。就像Python無法計算實情一樣-print,它也無法計算實情-self.payoff。

對于第二個錯誤,我認為問題在于你需要改變你的通話方式minimize。嘗試一下并請發布結果:

br?=?minimize(self.payoff,?0.5,?(other,))


查看完整回答
反對 回復 2023-06-27
  • 2 回答
  • 0 關注
  • 155 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號