绝对值函数未被公认为规则凸程序(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(

绝对函数是凸的。因此,我不太清楚为什么CVX会对目标中的绝对值函数抛出错误。

DCP的大小取决于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)

考虑到发布的代码,还没有理由使用参数。

最新更新