凸模型中的约束数

时间:2020-01-05 18:47:25

标签: cvxpy mosek

为什么使用cvxpy编写并使用Mosek解决的凸QCQP模型显示出比模型中定义的约束更多的约束(如Mosek报道)?

即使对于像square(x)这样的cvxpy原子,我也注意到同样的情况,如果x是单个变量和约束:

cvxpy.square(x) <= 1

表明该模型有4个约束而不是一个约束?

谢谢

1 个答案:

答案 0 :(得分:0)

您可以自己轻松地对其进行分析。运行:

import cvxpy as cp

# Construct the problem.
x = cp.Variable(1)
constraints = [cp.square(x)<=1]
objective = cp.Minimize(0)
prob = cp.Problem(objective, constraints)

prob.solve(solver=cp.MOSEK, verbose=True, save_file="dump.opf")

,然后查看文件dump.opf。您将看到cvxpy如何使用二次圆锥对二次约束建模来以圆锥形式重新构造问题。从本质上说,它变成:

(x1+1)^2 >= (x1-1)^2 + 4x0^2
x1 <= 1

但是必须添加一些辅助变量以MOSEK格式输入。

如果opf文件中的内容不清楚,MOSEK文档https://www.mosek.com/documentation/将提供详细信息。