0

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

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

cvxpy.square(x) <= 1

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

谢谢

4

1 回答 1

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/将提供详细信息。

于 2020-01-06T07:42:40.193 回答