繁体   English   中英

R中二次规划的错误解法

[英]Wrong solution of quadratic programming in R

我正在尝试使用 package osqp 解决 R 中的二次规划。 然而,结果看起来非常错误。

复制这里附上的例子的代码:(目标function是最小化

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

这是 model 的 output,显示最佳值为 0.7

在此处输入图像描述

但是,如果使用最佳解决方案插入目标 function 它给我 1.018556

#this should be the final objective value after solving
0.5*t(res$x)%*%P%*%res$x+t(c(0,1,1))%*%res$x

#the solution
res$x
#0.6261887 0.3500000 0.3500000

更重要的是,这不是最佳解决方案。 如果我观察解决方案,我可以找到另一个答案,目标更小 function 值为 0.5,0.1,0.6 我不确定我做错了什么。

感谢您提前提供任何建议!

我试图欺骗 OQSP(在 python 中)给出你的结果。

我首先怀疑是alpha ,但它似乎没有任何区别。 另一件事是迭代次数,它可能在 25 次迭代后仍未收敛,但在这种情况下,我不希望目标为 0.70000。

import osqp
from scipy.sparse import csr_matrix
P = np.array([[1., 0.,0],
            [0., 1.,0], 
            [0,0,1]]).T
q = np.array([0, 1,1])[None, :];
A = np.array([[1., 1., 0.],
              [1., 0., 1.],
              [1,0,1]]).T
l = np.array([1.2, 0., 0.7])[:, None]
u = np.array([2., 0.8, 0.7])[:, None]

m = osqp.OSQP()
m.setup(P=csr_matrix(P), 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=25)
results = m.solve()

这给

x = [0.45492868, 0.35002252, 0.35002252]

已经接近[0.5, 0.35, 0.35]的最优解。 我注意到的一件事是q%*%x=0.7

仔细观察,我发现A的最后一行是q ,并且相应的约束指定0.7 <= x(1) + x(2) <= 0.7 即您的问题的任何有效解决方案都有q'x = 0.7因此我们得出结论x' P x = 0内部。

如果我将P矩阵设置为零,您显示的解决方案非常接近我获得的解决方案

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

-----------------------------------------------------------------
           OSQP v0.6.2  -  Operator Splitting QP Solver
              (c) Bartolomeo Stellato,  Goran Banjac
        University of Oxford  -  Stanford University 2021
-----------------------------------------------------------------
problem:  variables n = 3, constraints m = 3
          nnz(P) + nnz(A) = 9
settings: linear system solver = qdldl,
          eps_abs = 1.0e-05, eps_rel = 1.0e-05,
          eps_prim_inf = 1.0e-04, eps_dual_inf = 1.0e-04,
          rho = 1.00e-01 (adaptive),
          sigma = 1.00e-06, alpha = 1.00, max_iter = 25
          check_termination: on (interval 25),
          scaling: on, scaled_termination: off
          warm start: on, polish: off, time_limit: off

iter   objective    pri res    dua res    rho        time
   1  -9.9950e-03   1.20e+00   7.01e+01   1.00e-01   5.74e-05s
  25   7.0000e-01   2.66e-15   6.94e-18   1.00e-01   1.07e-03s

status:               solved
number of iterations: 25
optimal objective:    0.7000
run time:             1.79e-03s
optimal rho estimate: 1.70e+00

array([0.62618873, 0.35      , 0.35      ])

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM