我试图理解为什么在尝试使用solnp解决此问题时会收到警告消息?以下是我得到的消息 -
solnp--> Solution not reliable....Problem Inverting Hessian.
Warning message:
In p0 * vscale[(neq + 2):(nc + np + 1)] :
longer object length is not a multiple of shorter object length
以下是代码
countw <- 100
Dmat = diag(1, 100, 100)
# Equality constraints
eq_A <- rep(1, countw)
eq_b <- 1
# Constraint wts greater than zero
ineq_A <- diag(x = 1, nrow = countw, ncol = countw)
ineq_b <- rep(0, countw)
# Combine constraints
heq <- eq_A
hin <- ineq_A
theta <- c(0.51, 0.49, rep(0, countw-2))
krdsolnp <- solnp(par = theta,
fun = function(x) -c(t(x) %*% Dmat %*% x),
ineqfun = function(x) c(hin %*% x),
ineqLB = rep(0, countw),
ineqUB = rep(1, countw),
eqfun = function(x) c(heq %*% x),
eqB = eq_b)
答案 0 :(得分:1)
此代码相当于问:如何最大化 sum(x ^ 2),同时将 x 的系数保持在0和1之间,并保持 sum(x)等于1?
库试图使用目标函数的Hessian来解决这个问题,即 sum(x ^ 2)的偏导数矩阵相对于 x <的任何一对系数< / em>的。 Hessian通常是单位矩阵的2倍,这是可逆的。
然而,关于约束的一些事情会引发这种情况。您可以通过将初始条件 theta 中的0更改为0.01来避免错误。