Оптима 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
Любые идеи о том, как заставить функцию уважать мои ограничения или ресурсы, будут высоко оценены.