基于矩阵的 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:
- 抢夺 available functions 并选择最有条理的!
你的情况:
norm(X, “nuc”)
- root 应该与你的情况无关
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:
- 抢夺 available functions 并选择最有条理的!
你的情况:
norm(X, “nuc”)
- root 应该与你的情况无关