簡體   English   中英

R約束優化誤差

[英]R Constrained Optimization Error

請注意,我對R不太熟悉,並且正在嘗試解決以下優化(最小化)問題。 任何輸入將不勝感激。 問題似乎在於初始值。 不確定如何選擇有效的初始值。 盡管它似乎滿足文檔中給出的標准。

  thetaImp = 5*(10^-5);
  eps1 = -0.23;
  eps2 = 0.31;
  minFunc <- function(x) {
    x1 <- x[1];
    x2 <- x[2];
    -1*(max(thetaImp*x1+eps1,0)*(x1) + max(thetaImp*x2+eps2,0)*(x1+x2))
  }
  ui = rbind(c(1,1), c(1,0), c(0,1));
  ci = c(10000,0,0);
  initValues = c(5000,5000);
  constrOptim(initValues, minFunc, NULL, ui, ci);
  ui %*% initValues - ci

請注意,這也已發布在統計網站上,並附有問題的完整說明。 以上僅為示例。

在此處輸入圖片說明

https://stats.stackexchange.com/questions/355166/constrained-minimization-closed-form-if-available-or-r-suggestions

為了使用相等約束進行優化,提供了Rsolnp軟件包。

library(Rsolnp)

thetaImp = 5*(10^-5);
eps1 = -0.23;
eps2 = 0.31;
W = 10000

f <- function(x) { # function to minimize
  x1 <- x[1];
  x2 <- x[2];
  max(thetaImp*x1+eps1,0)*x1 + max(thetaImp*x2+eps2,0)*W
}

eqfun <- function(x){ # function defining the equality
  x[1] + x[2]
}

solnp(c(5000, 5000), # starting values 
      f, 
      eqfun = eqfun, 
      eqB = W, # the equality constraint
      LB=c(0,0) # lower bounds
) 

輸出:

Iter: 1 fn: 5435.5000    Pars:  7300.06425 2699.93575
Iter: 2 fn: 5435.5000    Pars:  7300.06425 2699.93575
solnp--> Completed in 2 iterations
$pars
[1] 7300.064 2699.936
......

在這種情況下K=2 ,我們可以用一維優化等效地解決問題,以檢查:

g <- function(t) { # function to minimize
  x1 <- t
  x2 <- W-t;
  max(thetaImp*x1+eps1,0)*x1 + max(thetaImp*x2+eps2,0)*W
}
optim(5000, g, method="L-BFGS-B", lower=0, upper=W) 


> optim(5000, g, lower=0, upper=W)
$par
[1] 7300
......

我們得到幾乎相同的結果。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM