绝对值函数未被识别为纪律凸程序 (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 规则。具体来说:
objective 不是 DCP。它的以下子表达式不是:
param516 @ abs(var513 + -param515)
绝对函数是凸函数。因此,我不太确定为什么 CVX 在 objective.
中抛出绝对值函数错误
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)
鉴于已发布的代码,还没有理由使用参数。
我正在尝试 运行 使用 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 规则。具体来说:
objective 不是 DCP。它的以下子表达式不是:
param516 @ abs(var513 + -param515)
绝对函数是凸函数。因此,我不太确定为什么 CVX 在 objective.
中抛出绝对值函数错误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)
鉴于已发布的代码,还没有理由使用参数。