【问题标题】:R solve.QP giving "constraints are inconsistent, no solution!" errorR solve.QP 给出“约束不一致,无解!”错误
【发布时间】:2018-12-16 19:36:26
【问题描述】:

我已经准备好所有向量和矩阵,并且正确并且仍然可以求解。QP 抛出错误。有人可以帮忙吗?

错误是:

solve.QP(Dmat, dvec, Amat, bvec) 中的错误:
约束不一致,无解!

Dmat=matrix(c(0.002010,  0.002656, -0.001158, -0.001350,  0.000242,  0.000256, -0.000890, -0.000874, 0.002656,  0.014554, -0.002614, -0.001220, -0.004474, -0.001978,  0.002884, -0.003070,-0.001158, -0.002614,  0.119704,  0.055176,  0.126994,  0.046072,  0.065934,  0.096078, -0.001350, -0.001220,  0.055176,  0.059218,  0.053144,  0.042930,  0.041394,  0.059708, 0.000242, -0.004474,  0.126994,  0.053144,  0.204976,  0.085488,  0.079886,  0.131988, 0.000256, -0.001978,  0.046072,  0.042930,  0.085488,  0.064112,  0.039762,  0.064470, -0.000890,  0.002884,  0.065934,  0.041394,  0.079886,  0.039762,  0.056710,  0.070128, -0.000874, -0.003070,  0.096078,  0.059708,  0.131988,  0.064470,  0.070128,  0.159916), nrow=8,ncol=8,byrow=TRUE)

dvec <- rep(0,8)
m = c(.08,.67,6.41,4.08,7.43,3.7,4.8,6.6)/100
tau = .25
omega = diag(x = c(.000801,.009546,.000884))
q = c(.041,.016,.008)
P = rbind(c(0,0,0,0,0,1,0,0),c(0,0,0,0,0,0,-1,1),c(0,0,-1,0,1,0,0,0))
covar = Dmat/2

mhat_1=solve(solve(tau * covar)+(((t(P) %*% solve(omega)) %*% P)))
mhat_2=(solve(tau * covar) %*% m) + ((t(P) %*% solve(omega)) %*% q)
mhat = mhat_1 %*% mhat_2
Amat <- matrix(c(mhat,-mhat,rep(1,8),rep(-1,8),diag(length(mhat))),8,12)

bvec=matrix(c(0.07640375, -0.07640375,  1.00000000, -1.00000000,  0.00000000,  0.00000000, 0.00000000,  0.00000000,  0.00000000,  0.00000000,  0.00000000,  0.00000000),nrow=1,ncol=12,byrow=TRUE)

sol = solve.QP(Dmat,dvec,Amat,bvec)

【问题讨论】:

  • 您遇到的错误是什么?
  • 另外,什么是“m”?您从未在之前的代码中定义过。请提供一个完全可重现的例子。为确保其可重现性,请在干净的 R 环境中运行整个代码,工作区中不存储以前的元素。
  • 我已经编辑了代码以添加 m 和我收到的错误消息

标签: r solver


【解决方案1】:

似乎没有内部解决方案,问题来自在bvec 中使用0.07640375(对应于mhat[5])。至于允许角落解决方案,只需使用更高的精度并设置

bvec <- matrix(c(0.0764037467, -0.0764037467,  1, -1,  rep(0, 8)), nrow = 1)

相反。那么

solve.QP(Dmat,dvec,Amat,bvec)$sol
# [1]  1.800544e-16  1.577392e-16  5.082845e-09  1.771718e-16  1.000000e+00  1.649150e-16
# [7] -3.161050e-20  0.000000e+00

【讨论】:

  • 我不确定如何提高精度。我确实有一个带有平等目标的边缘案例。我在边缘案例目标中添加(或减去)1e-10,一切都很好。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-07-28
  • 1970-01-01
  • 1970-01-01
  • 2020-09-04
  • 2016-07-19
  • 2016-08-03
  • 1970-01-01
相关资源
最近更新 更多