Rsolnp中的警告:解决方案不可靠,因为无法反转Hessian

时间:2016-09-09 12:42:39

标签: r mathematical-optimization hessian-matrix

我试图理解为什么在尝试使用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)

1 个答案:

答案 0 :(得分:1)

此代码相当于问:如何最大化 sum(x ^ 2),同时将 x 的系数保持在0和1之间,并保持 sum(x)等于1?

库试图使用目标函数的Hessian来解决这个问题,即 sum(x ^ 2)的偏导数矩阵相对于 x <的任何一对系数< / em>的。 Hessian通常是单位矩阵的2倍,这是可逆的。

然而,关于约束的一些事情会引发这种情况。您可以通过将初始条件 theta 中的0更改为0.01来避免错误。