R 优化的惩罚函数

R 优化的惩罚函数,r,excel,R,Excel,我想知道这里是否有人知道如何通过R或Excel解算器解决下面的问题? 问题是:通过使用外部惩罚函数,找到NLP的解决方案 max 20x+16y-2x^4-y^2-(x+y)^2 s.t x+y≤4 x≥0 y≥0 通过使用一系列子问题? 谢谢我们可以使用optim来实现这一点,参数化可以强制x和y为正,同时在目标函数中添加剩余约束: f <- function(z) { x <- exp(z[1]) y <- exp(z[2])

我想知道这里是否有人知道如何通过R或Excel解算器解决下面的问题? 问题是:通过使用外部惩罚函数,找到NLP的解决方案

max 20x+16y-2x^4-y^2-(x+y)^2
s.t  x+y≤4
     x≥0
     y≥0
通过使用一系列子问题?
谢谢

我们可以使用
optim
来实现这一点,参数化可以强制
x
y
为正,同时在目标函数中添加剩余约束:

f <- function(z) {
    x <- exp(z[1])
    y <- exp(z[2])
    if (x + y > 4) -Inf else 20*x+16*y-2*x^4-y^2-(x+y)^2
}
out <- optim(c(0, 0), f, control = list(fnscale = -1))

有了这样一个小的可行空间,你就可以把它离散化,然后穷尽地找到极小值。也许是包
alabama
glmc
?我怀疑其他优化器包有约束功能,但没有仔细研究。
> exp(out$par) # x and y
[1] 1.071826 2.928174
> str(out)
List of 5
 $ par        : num [1:2] 0.0694 1.0744
 $ value      : num 41.1
 $ counts     : Named int [1:2] 127 NA
  ..- attr(*, "names")= chr [1:2] "function" "gradient"
 $ convergence: int 0
 $ message    : NULL