2016-09-09 5 views
1

Я пытаюсь понять, почему я получаю предупреждающие сообщения при попытке решить эту проблему с помощью solnp? Ниже приводится сообщение я -Предупреждение в Rsolnp: решение не является надежным, потому что невозможно инвертировать Hessian

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

Этот код составляет спрашивать: как я могу максимизируют сумма (х^2), сохраняя при этом коэффициенты x между 0 и 1 и содержанием сумма (x) равна 1?

Библиотека пытается решить эту проблему с помощью гессианом целевой функции, то есть матрица частных производных суммы (х^2) по отношению к любой паре коэффициентов х. Гессиан обычно будет в 2 раза идентичной матрицей, которая обратима.

Однако что-то о ограничениях отбрасывает это. Вы можете избежать ошибки, изменив 0 в исходном состоянии theta до 0,01.