【问题标题】:cvxpy -> OSQP or cvxpy -> CVXOPT how does it work under the hood?cvxpy -> OSQP 或 cvxpy -> CVXOPT 它是如何工作的?
【发布时间】:2021-11-03 10:40:40
【问题描述】:

我有以下简单的程序:

import numpy as np
import cvxpy as cp
np.random.seed(0)
n = 100
i = 20
y = np.random.rand(n)
A = np.random.rand(i, n).T
x = cp.Variable(n)
lmbd = cp.Variable(i)
objective = cp.Minimize(cp.sum_squares(x - y))
constraints = [x == A*lmbd,
               lmbd >= np.zeros(i),
               cp.sum(lmbd) == 1]
prob = cp.Problem(objective, constraints)
result = prob.solve(verbose=True)

我想知道幕后发生了什么。我知道例如求解器 OSQP 正在使用,这要归功于以下变量 prob.solver_stats.solver_name,我可能还决定使用另一个求解器(例如 result = prob.solve(solver="CVXOPT", verbose=True))。

我想知道这个问题是如何处理的。我的想法是应该对其进行预处理,因为它似乎是一个双重问题(二次最小化一个 - y 变量和 lmbd 变量作为约束满足)。但是,在CVXOPT 文档中,在我看来,问题应该只被视为二次或线性问题。在CVXOPT的情况下,我知道如何使用它,但我不知道如何翻译这种情况下的问题,但是CVXPY可以毫无问题地做到这一点。

感谢您的洞察力。

【问题讨论】:

  • 到底是什么问题? 1)最小化与“约束满足”?好吧...放下 QP 并查看(更容易的)线性规划理论。它是在线性目标和线性等式约束上定义的(我们使用松弛来表示不等式)。没什么特别的。 2)一个(凸)QP是一个线性约束问题,目标是一个(凸)二次型(+一个线性项)。与 LP 相同,只是目标有所不同。 “约束-满足”部分还是很自然的。即使是更复杂的QCQP 也有这些 lin 等式
  • cvxopt 的 QP 也有这些线性等式 (Ax=b),它们是您的“约束满足”部分。
  • Ohhhh...这是真的,这是松弛变量,我忘记了基础知识。但是,我想知道它是如何转变的。我怎么知道CVXPYCVXOPTOSQP 或其他一些的调用(带有输入参数)。了解发生了什么并更好地调试会很棒。
  • 然后阅读代码。每个求解器都有一个包装器,识别cvxoptosqp 矩阵将很容易。另一方面,conic transformations happening before... 生成这些矩阵并且还依赖于目标求解器(例如,对于 norm_2 目标的 SOCP 与 QP)-> 这可能会不那么有趣。
  • 在全面了解这些缩减之前,我建议先阅读学术论文,尤其是docs 中的前两个链接。

标签: python mathematical-optimization cvxpy cvxopt


【解决方案1】:

由于您的问题是最小二乘,它的矩阵可能只有cast from least squares to quadratic programming,然后按原样传递给 QP 求解器。 (这个操作比cmets中提到的SOCP→QP转换要简单。)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-05-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多