R 优化的惩罚函数
我想知道这里是否有人知道如何通过R或Excel解算器解决下面的问题? 问题是:通过使用外部惩罚函数,找到NLP的解决方案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])
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