2016-01-13 69 views
0

我有希望在R.- [R二次規劃

解決

我看到,我可以使用函數lsei在封裝limSolve,以儘量減少寫入Ax = b的線性方程系統的一個問題矩陣形式,服從等式約束Ex = f和不等式約束Gx> = h。

然而,我不是一個線性方程組,而是一個二次方程組,它可以寫成t(x)Ax = b。

我看到有包quadprog爲二次方案,但它似乎不允許一組二次方程,只是一個方程。

有誰知道我可以用什麼來使等式和不等式約束下的二次方程組最小化?

這是我的例子。我試圖結合3個概率P(A),P(B),P(C) - 這創建了7個分段v1到v7,其中v1是P(A solus)等... v4是P((A B)NOT C)等。並且v7是P(A和B和C)。

我試圖最小化的功能是:

obj.fc<-function(x){ 
    f<-rep(NA,4) 
    v1<-x[1] 
    v2<-x[2] 
    v3<-x[3] 
    v4<-x[4] 
    v5<-x[5] 
    v6<-x[6] 
    v7<-x[7] 
    f[1]<-(v4+v7)*(1-(v1+v2+v4+v5+v6+v7))-2*(v1+v6)*(v2+v5) 
    f[2]<-(v5+v7)*(1-(v2+v3+v4+v5+v6+v7))-13*(v2+v4)*(v3+v6) 
    f[3]<-(v6+v7)*(1-(v1+v3+v4+v5+v6+v7))-11*(v1+v4)*(v3+v5) 
    f[4]<-(v4+v5+v6)*(1-(v1+v2+v3+v4+v5+v6+v7))-4*(v1+v2+v3)*v7 
    return(f) 
} 

我的等式約束是:

v1+v4+v6+v7=0.14 
v2+v4+v5+v7=0.01 
v3+v5+v6+v7=0.08 

我的不等式約束是Vi的必須是0和1之間,他們總和不能超過1.

+0

從'quadprog'包中的函數'solve.QP'用於常規頗爲解決與這兩個二次規劃問題線性和非線性約束。在SO上搜索'solve.QP'將返回很多例子。要解決您的具體問題,您需要首先使用等式約束和不等式約束來構造約束矩陣「A」。參數'meq'用於告訴'solve.QP'A'中有多少個第一個方程是等式約束。 – WaltS

+0

謝謝你。不幸的是,它似乎解決了.QP不能處理一個二次方程系統,只有一個二次方程...我已經嘗試過BB包中的各種函數,但似乎我可以優化一組沒有約束的二次方程,或者一個帶有約束的二次方程......仍然試圖找到可以同時執行兩個操作的東西。 – chrisjacques

+0

如果您可以通過一個小例子問題更新您的文章以幫助我們更好地理解您的問題,這將會很有幫助。 – WaltS

回答

0

您可以將每個等式約束表示爲兩個不等式約束,例如然而

Ax = b <=> Ax <= b, and 
      Ax >= b 

注意quadprog只允許解決二次目標函數的意義「二次規劃」線性約束。從quadprog文檔:

此例程實現戈德法布和Idnani(1982, 1983)的雙重方法用於解決形式分鐘的二次規劃問題(-dT b + 1/2BT DB)與約束條件AT b> = b0

所以在你的情況下,你應該看看另一個包。我會建議例如[NlcOptim][2],或從這裏找到最合適的求解器爲您提供:

+0

謝謝你。我試圖使用NlcOptim,但我無法得到它的工作...我懷疑我沒有在NlcOptim中正確指定我的問題,不幸的是,文檔不是很有幫助,因爲它只顯示目標函數返回標量... – chrisjacques

+0

@chrisjacques Erwin在上面寫道;對於非標量目標函數的迴歸,我們實質上是考慮多目標優化,在這種情況下,對什麼是「最優解」沒有唯一的解釋。我建議你將你的問題減少到單一目標選擇。問題以及作爲功能約束的其他目標函數。假設你有兩個你想研究的客觀價值。將其中之一作爲您程序中的一個約束條件:從一個相當鬆散的約束開始,並且使這種限制越來越嚴格(直到程序變得不可行)。 ... – dfri

+0

@chrisjacques ...這將產生一個[pareto front](https://en.wikipedia.org/wiki/Pareto_efficiency),這是一個有價值的研究方法,研究如何用兩個目標來優化問題的帕累托最優性功能。 – dfri