У меня очень странная ошибка DEoptim
, что у меня есть «исправлено», но не понимаю.Ошибка в DEoptim: результат целевой функции имеет разную длину, чем матрица параметров из-за спецификации foreachArgs
У меня нет проблем, когда я использую параллельные возможности DEoptim
с пакетом parallel
(т. Е. pType=1
). Однако, когда я использую вместо этого foreach
(который я должен использовать в сетке, которая доступна мне), у меня есть проблемы. Ниже приведена MRE значительно упрощенная версия проблемы, которая у меня была. pType=1
работы, pType=2
когда foreachArgs
указанно возвращает ошибку:
objective function result has different length than parameter matrix
Когда я не указываю foreachArgs
проблема уходит. У кого-нибудь есть мысли о первопричине этой проблемы?
library(zoo)
library(parallel)
library(doParallel)
library(DEoptim)
myfunc1 <- function(params){
s <- myfunc2(params,ncal,n_left_cens,astats, X_ret, disc_length, X_acq, POP_0, POP_ann_growth)
loss_func(s)
}
myfunc2 = function(params,ncal,n_left_cens,astats, X_ret, disc_length, X_acq, POP_0, POP_ann_growth){
sum(params) + ncal + n_left_cens + astats + X_ret + disc_length + X_acq + POP_0 + POP_ann_growth
}
loss_func = function(s){
s
}
# General setup
ncal = 1
n_left_cens = 1
astats= 1
disc_length = 1
POP_0 = 1
POP_ann_growth = 1
X_acq = 1
X_ret = 1
params = c(1,1)
W = 1
paral = TRUE
itermax=100
ncores = detectCores()
cltype <- ifelse(.Platform$OS.type != "windows", "FORK", "PSOCK")
trace=TRUE
# bounds for search for DEoptim
lower = rep(-1,length(params))
upper = lower*-1
# parallel: works
pType = 1
parVar = c("myfunc1","myfunc2","loss_func","W","ncal","n_left_cens","astats","X_ret","disc_length",
"X_acq","POP_0","POP_ann_growth")
foreachArguments <- list("myfunc1","myfunc2","loss_func","ncal","n_left_cens","astats","X_ret","disc_length",
"X_acq","POP_0","POP_ann_growth")
clusters <- makeCluster(ncores, type = cltype)
registerDoParallel(clusters)
clusterExport(cl=clusters, varlist=foreachArguments, envir=environment())
results <- DEoptim(fn=myfunc1,lower=lower,upper=upper,
DEoptim.control(itermax=itermax,trace=trace,parallelType=pType,
parVar=parVar))
showConnections(all = TRUE)
closeAllConnections()
# foreach with foreachArgs specified: doesn't work
pType = 2
clusters <- makeCluster(ncores, type = cltype)
registerDoParallel(clusters)
clusterExport(cl=clusters, varlist=foreachArguments, envir=environment())
results <- DEoptim(fn=myfunc1,lower=lower,upper=upper,
DEoptim.control(itermax=itermax,trace=trace,parallelType=pType,
foreachArgs=foreachArguments))
showConnections(all = TRUE)
closeAllConnections()
# foreach with foreachArgs unspecified: works
pType = 2
foreachArguments <- list("myfunc1","myfunc2","loss_func","ncal","n_left_cens","astats","X_ret","disc_length",
"X_acq","POP_0","POP_ann_growth")
clusters <- makeCluster(ncores, type = cltype)
registerDoParallel(clusters)
clusterExport(cl=clusters, varlist=foreachArguments, envir=environment())
results <- DEoptim(fn=myfunc1,lower=lower,upper=upper,
DEoptim.control(itermax=itermax,trace=trace,parallelType=pType))
showConnections(all = TRUE)
closeAllConnections()
Когда я запускаю свой код, ваш первый пример терпит неудачу с, «Ошибка в clusterExport (...) объекта„foreachArguments“не найден»; и ваш второй пример завершился неудачей, «Ошибка в parallelArgs $ .packages: объект типа« символ »не является подмножеством». Поэтому вам нужно предоставить воспроизводимый пример. –
Мои извинения Джош - «foreachArguments» был определен ниже, когда он должен был быть определен выше. Сделано редактирование. На новой сессии R результаты, как они были описаны, работают, не работают, выдавая это сообщение об ошибке, а затем работают ... – user052084