2014-04-24 125 views
0

我想知道是否有人在這裏知道如何通過R或Excel求解器解決以下問題? 的問題是:通過使用外部罰函數,使用的子問題的順序找到解決的NLP優化懲罰函數

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

? 感謝

+0

有了這樣的小的可行空間,你可以將它離散化並徹底地找到最小值。 – Jacob

+0

也許包'阿拉巴馬','glmc'?我懷疑其他優化器包有約束能力,但沒有仔細觀察。 –

回答

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