R的optimx并不尊重我的约束

时间:2018-03-28 16:38:05

标签: r mathematical-optimization maximization

我正在研究受限制的优化问题。我有许多必须总和为100的变量。我已经按照这里的工作Why does optimx in R not give the correct solution to this simple nonparametric likelihood maximization?进行了尝试优化梯度的范数,如图所示。我的功能相对良好,规范如此:

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次。当我使用这段代码进行优化时,似乎无论我在哪里设置lambda,我都会得到不依赖于sum(p)= 100的约束的输出。

这是可重复的版本,test.betas类似于我实际观察到的(下面)。请注意输出中lambda甚至不接近其边界,所以我不认为这是问题所在。

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 个答案:

没有答案