Ich beabsichtige nloptr
Paket in einer for
Schleife zu verwenden, wie unten:Passing Parameter objektive Funktion nloptr - R
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
}
Neben den „Optimierungsparameter: alpha.beta
“ von vorbeifahrenden auf die Fehlerfunktion (Minimierungsfunktion), Ich möchte auch senden n
aus der for
Schleife. Gibt es das überhaupt, um das zu tun?
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]
}
Die Einschränkung Funktion einfach ist und wie folgt definiert::
Die Fehler func ist definiert als
Const.func.oil <- function(alpha.beta)
{
cnst <- alpha.beta[2]-1
cnst
}
Also, wenn ich den obigen Code ausführen, ich einen Fehler
erhaltenFehler in .checkfunargs (eval_f, arglist, "eval_f"): eval_f benötigt Argument 'n', aber das wurde nicht an 'übergeben nloptr 'Funktion.
Wie gebe ich "n" an die Fehlerfunktion weiter? Beachten Sie, dass "n" nicht optimiert werden soll. Es ist nur ein Index.
ja, das ist richtig, nloptr nimmt '...' als Eingabeargumente und übergibt sie an die Zielfunktion. –