将参数传递给nloptr目标函数 - R.

时间:2016-07-06 18:36:37

标签: r function nonlinear-optimization minimization

我打算在nloptr循环中使用for包,如下所示:

for(n in 1:ncol(my.data.matrix.prod))
 {
 alpha.beta <- as.vector(Alpha.beta.Matrix.Init[,n])

 opts = list("algorithm"="NLOPT_LN_COBYLA",
             "xtol_rel"=1.0e-8, "maxeval"= 2000)

 lb = vector("numeric",length= length(alpha.beta))

 result <- nloptr(alpha.beta,eval_f = Error.func.oil,lb=lb,
                  ub = c(Inf,Inf),eval_g_ineq=Const.func.oil,
                  opts = opts)

 Final.Alpha.beta.Matrix[,n] <-   result$solution    
  }

除了传递&#34;优化参数:alpha.beta&#34;对于错误函数(最小化函数),我还想从n循环发送for。反正有没有这样做?

错误功能定义为:

    Error.func.oil <- function(my.data.var,n)        
 {
   my.data.var.mat <- matrix(my.data.var,nrow = 2,ncol = ncol(my.data.matrix.prod) ,byrow = TRUE)

   qo.est.matrix <-  Qo.Est.func(my.data.var.mat)
   diff.values <- well.oilprod-qo.est.matrix    #FIND DIFFERENCE BETWEEN CAL. MATRIX AND ORIGINAL MATRIX
   Error <- ((colSums ((diff.values^2), na.rm = FALSE, dims = 1))/nrow(well.oilprod))^0.5    #sum of square root of the diff

   Error[n]
 }

约束函数很简单,定义如下:

Const.func.oil <- function(alpha.beta)
 {
    cnst <- alpha.beta[2]-1
    cnst
 }

所以,当我运行上面的代码时,我收到错误

  

.checkfunargs中的错误(eval_f,arglist,&#34; eval_f&#34;):   eval_f需要参数&#39; n&#39;但这还没有传递给&#39; nloptr&#39;功能

我如何通过&#34; n&#34;到错误功能?注意&#34; n&#34;是不是要优化。它只是一个索引。

1 个答案:

答案 0 :(得分:1)

好。我在网上看了一些例子,发现我可能会提到&#34; n&#34;在nloptr本身的定义中:

for(n in 1:ncol(my.data.matrix.prod))
 {
 alpha.beta <- as.vector(Alpha.beta.Matrix.Init[,n])

 opts = list("algorithm"="NLOPT_LN_COBYLA",
             "xtol_rel"=1.0e-8, "maxeval"= 5000)

 lb = c(0,0)

 result <- nloptr(alpha.beta,eval_f = Error.func.oil,lb=lb,
                  ub = c(Inf,Inf),
                  opts = opts, n=n)  #Added 'n' HERE

 Final.Alpha.beta.Matrix[,n] <-   result$solution    
}

这似乎对我有用。因此,我将此设置为已关闭。