Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将参数传递给nloptr目标函数-R_R_Function_Nonlinear Optimization_Minimization - Fatal编程技术网

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

将参数传递给nloptr目标函数-R,r,function,nonlinear-optimization,minimization,R,Function,Nonlinear Optimization,Minimization,我打算在for循环中使用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"= 2000) lb = vector("numeric",length= l

我打算在
for
循环中使用
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"= 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    
  }
约束函数很简单,定义如下:

    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
 }

Const.func.oil正常。我在网上读了一些例子,发现在
nloptr
本身的定义中,我可能会提到“n”:

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    
}
for(n/1:ncol(my.data.matrix.prod))
{

alpha.beta是的,这是正确的,nloptr将
作为输入参数,并将它们传递到目标函数中。