Я пытаюсь свернуть функцию, используя Деоптим. Поскольку Deoptim не имеет возможности хранить стоимость промежуточных групп населения, я хотел бы написать код, который делает это. Другая проблема, что я запускаю Deoptim параллельно. Хотя было бы лучше, если бы я мог добавить к уже существующей переменной.
Таким образом, проблема заключается в следующем с фиктивной функцией.
Rosenbrock <- function(x,envir=NULL){
x1 <- x[1]
x2 <- x[2]
y<-100 * (x2 - x1 * x1)^2 + (1 - x1)^2
DT <- data.table(out = y, t(x))
names(DT)<- c("out", "X1","X2")
#assigning population (parameter set with cost) to the "POPin" to the Parent environment (envir)
if(is.null(envir)==F){
assign("POPin", envir = envir,DT)
}
return(y)
}
DEoptim_ros<-function(x){
set.seed(1234)
my.par<-c(x)
my.package<-c("data.table")
print(environment())
lower <- c(-10,-10)
upper <- -lower
Out<-DEoptim(Rosenbrock, lower, upper,control = DEoptim.control(storepopfrom = 1,trace = T ,parVar = my.par, packages=my.package,parallelType=1,itermax = 2),envir=environment())
POPin
return(Out)}
Если я запускаю код без параллельной работы, я Можно назначить переменную в родительской среде, если это параллельно, я не могу. Так что мой вопрос будет. Можно ли это как-то сделать?