gpt4 book ai didi

R函数solve.QP错误 "constraints are inconsistent, no solution!"

转载 作者:行者123 更新时间:2023-12-04 09:40:51 25 4
gpt4 key购买 nike

我正在尝试使用带有以下参数的 solve.QP 函数(来自 quadprog 包)运行优化

R = matrix( c( 2.231113e-05,-4.816095e-05,-5.115287e-05, 0,2.989584e-05,4.212173e-06,0,0, 5.504990e-05), ncol=3, byrow=T)
b = c(-1,0,rep(0,ncol(R)))
C = cbind(rep(1,ncol(R)), diag(ncol(R)))
C = cbind(-rep(1,ncol(R)),C)
d = as.matrix(c(57621264,78057622,171342351),ncol=1)
H = solve.QP(Dmat = R, factorized = TRUE, dvec = d, Amat = C, bvec = b)

但我收到的错误是
Error in solve.QP(Dmat = R, factorized = TRUE, dvec = d, Amat = C, bvec = b) : 
constraints are inconsistent, no solution!

但是,当我为 R 使用不同的矩阵时
R2 = matrix( c( 0.05365071,-0.06364421,-0.04102565, 0, 0.08423283,-0.04048879,0,0,0.09659707), ncol=3, byrow=T)

solve.QP 调用
H = solve.QP(Dmat = R2, factorized = TRUE, dvec = d, Amat = C, bvec = b)

不会造成任何问题。
我现在的问题是为什么在前一种情况下会出现问题。

任何帮助是极大的赞赏!

最佳答案

矩阵 dvec 中的元素非常大。您的矩阵 R 是 Dmat 的 cholesky 分解中上三角矩阵的逆矩阵,即 Dmat = M^T M 其中 M = R^{-1}。所以以未分解的形式:

M <- solve(R) 
Dmat <- t(M)%*%M
Dmat unfactorized 是巨大的,与 dvec 的规模大致相同:
#  [,1]       [,2]       [,3]
#[1,] 2008893283 3236243201 1619059085
#[2,] 3236243201 6332319710 2522625866
#[3,] 1619059085 2522625866 1641403882

因此,您的问题很可能是由于某种溢出错误造成的。要解决此问题,您可以缩放 Dmat (未分解)和 dvec :
sc <- norm(Dmat,"2")
solve.QP(Dmat = Dmat/sc, dvec=d/sc, Amat=C, bvec=b, meq=0, factorized=FALSE )

解决办法是
# $solution
# [1] -1.220832e-17 0.000000e+00 1.043877e-01

它与 constrOptim 找到的解决方案很好地匹配在另一个答案中。

缩放 Dmatdvec很好,因为 -d^T b + 1/2 b^T D b 的约束最小化器与 sc*(-d^T b + 1/2 b^T D b) 的约束最小化器相同对于任何常数 sc。

编辑:
要以分解形式解决问题,您可以尝试如下缩放:
nn2 = sqrt(norm(d,"2"))
H = solve.QP(Dmat = R*nn2, dvec = d/(nn2^2), Amat = C, bvec = b, factorized=TRUE)
#$solution
#[1] 0.0000000 0.0000000 0.1043877

关于R函数solve.QP错误 "constraints are inconsistent, no solution!",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28381855/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com