python - CVXPY param*norm 处的 DCP 规则存在问题

标签 python cvxpy convex-optimization

我最近发现了 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())

所有参数如mA_shapeb_realeps均已在之前定义。

我的问题: 每当我在 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/

相关文章:

python - 有什么方法可以使用 Pycharm 调试在终端中运行的脚本吗?

python - CVXPY 抛出 SolverError

python - CVXPY 中的约束不遵循 DCP 规则

r - 受范数不等式约束的二次函数最小化

python - 如何从 SymPy 符号表达式中删除 (1) 系数?

python - 将 0 和 1 的字符串转换为它的二进制等效 python

python - sys.excepthook 在导入的模块中不起作用

python - 如何反转 cvxpy 中的变量矩阵?

python - 为什么我会收到此 DCPError?

optimization - 如何通过梯度下降优化非负约束