簡體   English   中英

cvxpy -> OSQP 或 cvxpy -> CVXOPT 它是如何工作的?

[英]cvxpy -> OSQP or cvxpy -> CVXOPT how does it work under the hood?

我有以下簡單程序:

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) )。

我想知道這個問題是如何處理的 我認為應該對其進行預處理,因為它看起來像是一個雙重問題(二次最小化 one - y變量,以及lmbd變量作為約束滿足)。 然而,在CVXOPT文檔中,在我看來,該問題應該只被視為二次或線性問題。 對於 CVXOPT,我知道如何使用它,但我不知道如何翻譯這種情況下的問題,但是, CVXPY可以毫不費力地做到這一點。

感謝您的洞察力。

由於您的問題是最小二乘法,因此其矩陣可能僅從最小二乘法轉換為二次規划,然后按原樣傳遞給 QP 求解器。 (這個操作比評論中提到的SOCP→QP轉換簡單。)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM