Я намерен использовать nloptr
пакет в for
петли, как показано ниже:Передача параметров в 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
}
Помимо прохождения «параметров оптимизации: alpha.beta
» к функции ошибок (функции минимизации), Я также хотел бы отправить n
из цикла for
. Есть какой-либо способ сделать это?
FUNC ошибка определяется следующим образом:
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, "eval_f"): eval_f требует аргумента 'n', но это не было передано в ' nloptr '.
Как передать «n» функции ошибки? обратите внимание, что «n» не нужно оптимизировать. Это просто индекс.
Да, это правильно, nloptr принимает '...' как входные аргументы и передает их в целевую функцию. –