2016-10-24 121 views
0

OptimOptimx可以在非線性優化問題中採用不等式約束嗎?Optimx/Optim R包中的不等約束

我在這有兩種類型的約束被強加的非線性問題:

  • 變量> = 0
  • 變量< = 1
+0

您可能想查看[CRAN優化任務視圖](https://cran.r-project.org/web/views/Optimization的.html)。 –

+2

Optim/optimx僅適用於無約束和框約束的問題。你似乎只有'線性'約束(你提到了非線性約束,但是你顯示的約束是一個線性約束)。 'optim'的'see also'部分提到'constrOptim',它允許線性不等式約束,這就是你所擁有的。在R下還有很多其他解算器可以處理線性甚至非線性約束。 –

+0

您的約束:變量<= 0;和總和(變量)<= 1對我來說似乎是完全線性的...另外,如果沒有> 0的變量,那麼總和應該<= 0 ... –

回答

1

總和你可以這樣做與maxLik。不等式約束必須被指定爲$ Ax + B> 0 $,其中x是參數。

例如,假設你有兩個參數,你最大的指數帽子:

f <- function(x) exp(- (x[1]-2)^2 - (x[2]-2)^2) 
A <- matrix(c(1,1,-1,-1), 2, 2, byrow=TRUE) 
B <- c(0,1) 

您可以檢查,現在$ AX + B> 0 $等同於您的不平等條件(當然,除非你寫>> =而不是>,但這對數值解決方案無關緊要)。

您可以使用BFGS或其他優化器。你需要ineqA和ineqB爲限制名單:

a <- maxBFGS(f, start=c(0.2, 0.2), constraints=list(ineqA=A, ineqB=B)) 
summary(a) 

-------------------------------------------- 
BFGS maximization 
Number of iterations: 50 
Return code: 0 
successful convergence 
Function value: 0.01104892 
Estimates: 
     estimate gradient 
[1,] 0.4990966 0.03316674 
[2,] 0.4990966 0.03316674 

Constrained optimization based on constrOptim 
1 outer iterations, barrier value -0.0003790423 
-------------------------------------------- 

正如你所看到的約束結合,不受約束的最大是在(2,2)。

+0

對不起,現在我回答了「如何估計R中的不等式約束」這個問題,而不是「優化/優化不等式約束」。 –

0

optimx使用L-BFGS-B,

  • 對於變量> = 0,則會在optimxlower參數設置爲rep.int(0, n_variables)
  • 對於薩姆(變量)< = 1,我不不知道用optimx編程的直接方法。我建議upper = rep.int(1, n_variables),修改你的目標函數,包括:如果總和(變量)> 1,objectiveValue = objectiveFunction +大懲罰,然後設置一個符合所有標準的起點,Vars> = 0,Sum(Vars)< = 1 ,並且(如您的約束所暗示,變量< = 1)