constrOptim в R - инициализация val не находится внутри допустимой области ошибки

avatar
user1700890
22 мая 2018 в 16:30
1357
1
1

Я пытаюсь использовать пакет constrOptim. Вот моя установка:

test_func <- function(x){
  return((x%*%x)[1,1])
}
constrOptim(rep(1/3,3), f=test_func,grad = NULL,
            ui = rbind(diag(3),rep(1, 3), rep(-1,3)),
            ci = c(rep(0,3),1,-1), method = "Nelder-Mead")

выдает ошибку:

   Error in constrOptim(rep(1/3, 3), f = test_func, grad = NULL, ui = rbind(diag(3),  : 
      initial value is not in the interior of the feasible region

легко проверить, что мое начальное значение находится внутри допустимой области (которая взята из документации: ui %*% theta - ci >= 0) constrOptim

ui %*% rep(1/3, 3) - ci

производит:

          [,1]
[1,] 0.3333333
[2,] 0.3333333
[3,] 0.3333333
[4,] 0.0000000
[5,] 0.0000000

Что мне не хватает?

Источник

Ответы (1)

avatar
IRTFM
22 мая 2018 в 18:16
1

Если вы выполните поиск в Google, вы получите ответ от @HongOoi в комментариях к другому вопросу с аналогичным сообщением об ошибке. Хун Уи предложил вычесть значение нечеткости из аргумента ci:

  fuzz = - 1e-6


 constrOptim(rep(1/3,3), f=test_func,grad = NULL,
             ui = rbind(diag(3),rep(1, 3), rep(-1,3)),
             ci = c(rep(0,3),1,-1)- 1e-6, method = "Nelder-Mead")
#---------------------
$par
[1] 0.3333317 0.3333327 0.3333346

$value
[1] 0.3333327

$counts
[1] 0

$convergence
[1] 0

$message
NULL

$outer.iterations
[1] 1

$barrier.value
[1] 0.000209865

Я думаю, что это, вероятно, проблема, которая может служить основанием для отправки запроса в список рассылки R-devel для улучшения документации, хотя можно утверждать, что вы на самом деле не находитесь в внутреннем допустимом диапазоне, поскольку ограничение указано нарушает строгое неравенство:

 ui %*% rep(1/3,3) - ci > 0
      [,1]
[1,]  TRUE
[2,]  TRUE
[3,]  TRUE
[4,] FALSE
[5,] FALSE

Неравенство удовлетворяет вашим первым трем ограничениям, но не двум последним, которые были на границе.

user1700890
22 мая 2018 в 18:59
0

Спасибо, я действительно использовал пакет Rsolnp. Он также может работать с качествами.

IRTFM
22 мая 2018 в 19:08
1

Я искал идентичный вопрос, на который был принят принятый ответ, но не смог. Я нашел несколько подобных вам, на которые не ответили. Будущим поисковикам будет легче найти это, если вы отметите это.