我想知道是否有人知道如何通过R或Excel Solver解决下面的问题? 问题是:通过使用外部惩罚函数,找到NLP的解决方案
max 20x+16y-2x^4-y^2-(x+y)^2
s.t x+y≤4
x≥0
y≥0
使用一系列子问题? 感谢
答案 0 :(得分:1)
我们可以使用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))
给
> 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