我在Scipy Optimize上,使用fmin_cobyla函數。我掙扎着寫約束函數是:FMIN_COBYLA約束函數(scipy optimize)
- 確保所有項目相加爲1
- 確保所有項目> = 0
沒有人有見解?例如,對於fmin_slsqp,我有一個函數:
def w_constraint(w, v, x0, x1):
return np.sum(w) - 1
以及函數中的界限。
但這些對cobyla無效。
我在Scipy Optimize上,使用fmin_cobyla函數。我掙扎着寫約束函數是:FMIN_COBYLA約束函數(scipy optimize)
沒有人有見解?例如,對於fmin_slsqp,我有一個函數:
def w_constraint(w, v, x0, x1):
return np.sum(w) - 1
以及函數中的界限。
但這些對cobyla無效。
將您的平等形式化爲不等式對。含義:
x == y
變爲:
x >= y
x <= y
= -x >= -y
當然,這可能引入數值麻煩(傷害許多種解算器),但我看到這在COBYLA接口的多個實現中(使用等式約束支持實現像這樣)。
從NLopt文檔的註釋:
(底層COBYLA代碼僅支持不等式約束等式約束被自動轉換爲對不等式約束,其在該算法的情況下,似乎不引起。問題)。
謝謝@sascha;我對scipy很陌生,你會寫我在約束函數中必須返回的內容嗎? –
@GuilhermeNazarethdeSouza只需檢查文檔。他們並沒有那麼糟糕。甚至包括例子。 (並永遠記住:「這不起作用」不是一個有用的錯誤信息!) – sascha
「所有項目總計爲1」是一個等式約束。 ['fmin_cobyla'](https://docs.scipy.org/doc/scipy/reference/generated/scipy.optimize.fmin_cobyla.html)不處理平等約束。 –
謝謝@WarrenWeckesser,你能幫我確定它們都大於0嗎? –