惩罚函数用于优化

时间:2014-04-24 19:13:07

标签: r excel

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

max 20x+16y-2x^4-y^2-(x+y)^2
s.t  x+y≤4
     x≥0
     y≥0

使用一系列子问题? 感谢

1 个答案:

答案 0 :(得分:1)

我们可以使用optim进行参数化,强制xy为正,同时在目标函数中添加剩余约束:

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))

> 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