2012-10-29 35 views
0

我有一個非常簡單的二次的問題,原則上應通過解solve.QP(quadprog):solve.QP不能最大化正定二次函數

max x^2+3*y^2 subject to x>=0, y>=0, x+y <=1

的問題是,打開最大化進入所需的最小化,矩陣(顯然)變爲負定。這不是與小特徵值或舍入有關的問題。

我認爲solve.QP是一個普通求解器,但儘管我在閱讀在線材料方面做出了努力,但它看起來好像不能在緊緻域(由線性約束定義)上使用solve.QP最大化正定二次形式。

這是真的嗎?

我知道我可以用其他函數解決這個問題和類似的問題(constrOptim可以正常工作),但是我會喜歡把拉格朗日乘子連接到最大化器。

你能否提出任何解決上述問題的辦法(非常有效)solve.QP,克服與正定義有關的不對稱限制?

回答

1

您想要查找凸域上凸函數的最大值。凸函數在它們的域的內點上不能有最大值,所以使用拉格朗日乘子的方法不能應用於這個問題。

在你的情況下,域是一個緊湊的多邊形,所以最大的假設在其中一個頂點。這是一個微不足道的檢查。

+0

丹尼爾,謝謝。你的確是對的,但這只是一個具體而簡單的問題。它可以被解決,例如,用下面的公式計算:其中,函數(x)c(x [1],x [2] ], - x [1] -x [2] +1) require(alabama) auglag(c(0.5,0.5),f,hin = g,control.optim = list(fnscale = -1)) $票面 [1] 1.164376e-10 1.000000e + 00 $值 [1] 3 ... $拉姆達 [1] 6.000198 0.000000 6.000302 ... 不過,我有一種感覺,auglag更脆弱而不是解決方案。QP在很大的問題中(其中頂點枚舉是不可能的),並且想知道是否有使用solve.QP的方法。問候。 – user1783444