2014-02-06 76 views
1

我已經做到了在Excel中,但需要在R.優化中的R與任意約束

我需要最小化函數F(x)x是矢量)運行一個合適的仿真而具有約束sum(x)=1,在所有的值x[0,1]和另一個功能G(x) > G_0

我已經試過optimconstrOptim。他們都沒有給你這個選擇。

+3

這是此刻的你需要的數據,並表示你的問題的複雜性的目標函數提供一個例子太模糊。 –

+0

@IShouldBuyABoat我在下面的tonytonov的評論中給了更多細節。謝謝 – mm441

回答

2

你所指的問題是(可能)是非線性約束下的非線性優化。這是最普遍的優化問題之一。

我用於這些目的的包名爲nloptrsee here。從我的經驗來看,它既靈活又快速。您可以通過相應地設置eval_g_eqeval_g_ineq來指定等式和不等式約束。如果雅各布人明確知道(可以通過分析得出),則指定他們以加快收斂速度​​;否則,使用數值近似。

使用this list作爲優化問題的一般參考。

+0

謝謝@tonytonov。看起來像'nloptr'是我需要的。但是我不知道如何將參數傳遞給用戶定義的目標和約束函數。例如,我的要優化的值是x,eval_f(x,y,A),eval_g_ineq(x,A)和eval_g_eq(x)。 A是一個矩陣。它看起來像'nloptr'不能識別哪個參數發送到哪個函數..我會給你一個例子:我優化f(x,y,A)。 x,y - 向量,A - 矩陣。 1-sum(x)= 0 - eval_g_eq。 sum(y/3)-sum(y * x)<= 0。 – mm441

+0

對於單個向量'x',所有函數定義應該看起來像'function(x)'。如果有兩個向量'x'和'y',在傳遞給'eval_f'之前將它們合併爲'c(x,y)'。同樣的技巧適用於矩陣「A」。 – tonytonov

+0

謝謝@tonytonov。 「...」用於將傳遞給用戶定義的目標和約束函數的參數。在例子中他們有'eval_f0 < - function(x,a,b)'。如果我將x,y和A組合成一個輸入,我可以如何指定要優化哪些值?這些函數有其他的參數 – mm441

0

您可以在OpenMx包裝做到這一點(目前主機在下面列出的網站。針對關於CRAN今年2.0 RELASE)

它是一個通用的包裝主要用於結構方程模型,但處理非線性限制。

對於你的情況,做出mxModel()用)在mxAlgebras(表達你的代數和mxConstraints約束()

當你mxRun()的型號,代數將在限制範圍內解決,如果可能。

http://openmx.psyc.virginia.edu/