基于矩阵的 CVXPY 二次程序而非 DCP

Matrix-based CVXPY quadratic program not DCP

cvxpy 支持基于矩阵的表达式,但似乎无法将它们识别为二次规划。

这是一个超级简单的例子:

import cvxpy
Pi = cvxpy.Variable((10, 5))

objective = cvxpy.Minimize( cvxpy.trace(Pi.T @ Pi) )
problem = cvxpy.Problem(objective)
problem.solve()

Trace(Pi.T @ Pi) 只是 Pi 条目的平方和(所以 convex/quadratic 等),但我得到这个例外:

DCPError: Problem does not follow DCP rules. Specifically:
The objective is not DCP. Its following subexpressions are not:
var25.T @ var25

我是不是做错了什么,或者是这样吗?

这是一个超级简单的示例,我正在尝试解决更复杂的问题,但也许这是最简单的起点。我正在使用 cvxpy 版本 1.1.1 .

cvxpy 有一个 DCP 规则集,能够通过构造证明事物。由于决定凸性的一般问题是 NP 难的,因此这种 语言 可以表达的内容(或效率)当然有限制。

有时您只需要提供更多结构。

规则编号 1:

你的情况:

  • norm(X, “nuc”)
    • root 应该与你的情况无关