R中二次规划的错误解

R中二次规划的错误解,r,optimization,modeling,R,Optimization,Modeling,我试图用osqp软件包解决R中的二次规划问题。然而,结果却大错特错 此处所附示例的代码:(目标函数是最小化 library(osqp) library(Matrix) P <- Matrix(c(1., 0.,0, 0., 1.,0, 0,0,1), 3, 3, sparse = TRUE) q <- c(0, 1,1) A <- Matrix(c(1., 1., 0., 1., 0., 1.,1,0,1), 3, 3,

我试图用osqp软件包解决R中的二次规划问题。然而,结果却大错特错

此处所附示例的代码:(目标函数是最小化

library(osqp)
library(Matrix)
P <- Matrix(c(1., 0.,0,
              0., 1.,0, 0,0,1), 3, 3, sparse = TRUE)
q <- c(0, 1,1)
A <- Matrix(c(1., 1., 0.,
              1., 0., 1.,1,0,1), 3, 3, sparse = TRUE)
l <- c(1.2, 0., 0.7)
u <- c(2., 0.8, 0.7)
settings <- osqpSettings(alpha = 1.0,eps_abs = 1.0e-05, eps_rel = 1.0e-05,)
model <- osqp(P, q, A, l, u, settings)
res <- model$Solve()

库(osqp)
图书馆(矩阵)
P

我试图愚弄OQSP(在python中)来给出您的结果

我最初怀疑alpha,但它似乎没有什么区别。 另一件事是迭代次数,25次迭代后可能不会收敛,但在这种情况下,我不希望目标为0.70000

导入osqp
从scipy.sparse导入csr_矩阵
P=np.数组([[1,0,0],
[0., 1.,0], 
[0,0,1]])。T
q=np.array([0,1,1])[None,:];
A=np.数组([[1,1,0.]),
[1., 0., 1.],
[1,0,1]])。T
l=np.数组([1.2,0,0.7])[:,无]
u=np.数组([2,0.8,0.7])[:,无]
m=osqp.osqp()
m、 设置(P=csr_矩阵(P),A=csr_矩阵(A),l=l,u=u,q=q.T,
α=1.0,eps_abs=1.0e-05,eps_rel=1.0e-05,最大电阻=25)
结果=m.solve()
这给

x = [0.45492868, 0.35002252, 0.35002252]
已经接近了
[0.5,0.35,0.35]
的最佳解决方案。我注意到的一点是
q%*%x=0.7


仔细看,我发现你的
A
的最后一行是
q
,相应的约束规定
0.7非常感谢你的回答!我认为这是有道理的,但我很困惑,为什么模型将我的p矩阵设置为0,即使我明确将其设置为对角矩阵?当我在代码中更改p矩阵时对于非稀疏矩阵,结果是正确的!我很好奇为什么P中矩阵的稀疏性会影响真正的结果。这当然不是解算器的问题,请注意,我传递了一封感谢信,感谢你接受了答案。你能让它在最后处理稀疏矩阵吗?不,我转换成了正常的matrix和它的工作。真的很困惑为什么稀疏矩阵会产生不同的结果。谢谢你把答案放在一起!
x = [0.45492868, 0.35002252, 0.35002252]
m.setup(P=csr_matrix(P)*0, A=csr_matrix(A), l=l, u=u, q=q.T,
        alpha=1.0, eps_abs = 1.0e-05, eps_rel = 1.0e-05, max_iter=100)
results = m.solve()
results.x