我最近发现了 cvxpy 包,并尝试将它用于一个非常基本的最小化问题。 但是在初始化我的凸问题时,我总是收到一个我无法解释的 DCP 错误。
x = Variable(m)
gamma = Parameter(value=1.0)
cost = sum_squares(np.transpose(A_shaped)*x - b_real) + gamma*norm(x,1)
obj = Minimize(cost)
constr = [np.transpose(A_shaped)* x <= b_real + abs(b_real * eps),
np.transpose(A_shaped)* x >= b_real - abs(b_real * eps)]
prob = Problem(obj, constr)
print(prob.is_dcp())
所有参数如m、A_shape、b_real和eps均已在之前定义。
我的问题: 每当我在 cost 声明中使用参数 gamma 并且我想解决它时,cvxpy 告诉我问题不遵循 DCP 规则,这是因为子表达式 param123 * norm124。 当我用 1.0 替换 gamma 或将其删除时,我不会收到此错误,并且 prob.is_dcp() 返回 True,我可以'不用解释,因为我用值 1.0 初始化gamma。
如果您需要更多信息,请随时询问,非常感谢!
最佳答案
好吧,我找到了解决方案: 我只测试了将参数的参数 nonpos 设置为 False 但这没有帮助。我不知道的是,还有参数 nonneg,然后我将其设置为 True,现在 DCP 分析也返回 True。
关于python - CVXPY param*norm 处的 DCP 规则存在问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59128258/