簡體   English   中英

絕對值 function 未被識別為有紀律的凸程序 (CVXPY)

[英]Absolute value function not recognized as Disciplined Convex Program (CVXPY)

我正在嘗試使用 CVXPY 運行以下優化:

import cvxpy as cp
import numpy as np

weights_vec = cp.Variable(10)

er_vec = cp.Parameter(10, value=np.random.randn(10))
prev_h_vec = cp.Parameter(10, value=np.ones(10))
tcost_vec = cp.Parameter(10, value=[0.03]*10)


objective = cp.Maximize(weights_vec @ er_vec - tcost_vec @ cp.abs(weights_vec - prev_h_vec))
prob = cp.Problem(objective)
prob.solve()

但是,我收到以下錯誤:

cvxpy.error.DCPError:問題不遵循 DCP 規則。 具體來說:
目標不是 DCP。 它的以下子表達式不是:
param516 @ abs(var513 + -param515)

絕對 function 是凸的。 因此,我不太清楚為什么 CVX 會在目標中拋出絕對值 function 的錯誤。

DCP-ness 取決於tcost_vec符號

因為這是一個(不受約束的)參數,所以不行。

以下兩種方法都可以:

# we promise it's nonnegative
tcost_vec = cp.Parameter(10, value=[0.03]*10, nonneg=True)

# it's fixed and can by analyzed
tcost_vec = np.array([-0.03]*10)

鑒於發布的代碼,沒有理由使用參數(還)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM