我有以下简单的程序:
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
这样做不会有任何麻烦。
谢谢你的真知灼见。