0
我想知道是否有人在這裏知道如何通過R或Excel求解器解決以下問題? 的問題是:通過使用外部罰函數,使用的子問題的順序找到解決的NLP優化懲罰函數
max 20x+16y-2x^4-y^2-(x+y)^2
s.t x+y≤4
x≥0
y≥0
? 感謝
我想知道是否有人在這裏知道如何通過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))
給
> 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
有了這樣的小的可行空間,你可以將它離散化並徹底地找到最小值。 – Jacob
也許包'阿拉巴馬','glmc'?我懷疑其他優化器包有約束能力,但沒有仔細觀察。 –