Оптима R не уважает мое ограничение

Я работаю над проблемой ограниченной оптимизации. У меня есть несколько переменных, которые должны быть равны 100. Я следил за работой здесь. Почему optimx в R не дает правильного решения этой простой непараметрической максимизации правдоподобия? и я пытаюсь оптимизировать норму градиента, как показано там. Моя функция относительно хорошо себя ведет, и норма выглядит так:

grad.norm <- function(x) {
              lambda <- tail(x, 1)
              p <- head(x, -1)
              h2 <- sum(((test.betas * 81)/p + lambda)^2) + 
                    (sum(p) - 100)^2 
              }

У меня есть модификатор 81, потому что ln(p) встречается 81 раз в моем исходном уравнении. Когда я оптимизирую с помощью этого кода, по-видимому, независимо от того, где я устанавливаю лямбду, я получаю выходные данные, которые не соответствуют моему ограничению, что сумма (p) = 100.

Это воспроизводимая версия с test.betas, похожая на ту, что я на самом деле наблюдаю (ниже). Обратите внимание на вывод, что лямбда даже не близко к своим границам, поэтому я не думаю, что это проблема.

library(optimx)

set.seed(43215)

test.betas <- c(rnorm(5, 350, 20), runif(120, 0.01, 1))

grad.norm <- function(x) {
             lambda <- tail(x, 1)
             p <- head(x, -1)
             h2 <- sum(((test.betas * 81)/p + lambda)^2) + 
                   (sum(p) - 100)^2 
            }

(out <- 
    optimx(c(runif(length(test.betas), 5, 10), -50),
           grad.norm,
           lower = c(rep(.01, length(test.betas)), -500),
           upper = c(rep(99.99, length(test.betas)), -1),
           method = "L-BFGS-B"))

 sum(out[,1:length(test.betas)]) # = 505.4267

Любые идеи о том, как заставить функцию уважать мои ограничения или ресурсы, будут высоко оценены.

0 ответов

Другие вопросы по тегам