首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何并行运行DEoptim?

如何并行运行DEoptim?
EN

Stack Overflow用户
提问于 2015-06-16 12:19:22
回答 1查看 1.9K关注 0票数 3

在R语言中开发了一个具有8个参数的水文模型,并利用DEoptim对模型进行了标定。由于运行每个函数所需的时间长度,我想并行化DEoptim函数,因为它有一个并行运行的选项。文件表明,这一情况如下:

代码语言:javascript
运行
复制
DEctrl <- DEoptim.control(trace=TRUE,parallelType=1,packages=c(),parVar=c())
ans <- DEoptim(Calibrate,lower,upper,DEctrl)

如果我在没有并行化的情况下运行DEoptim,那么它可以正常工作,但是如果我将parallelType设置为1,则会失败,但会出现以下错误:

代码语言:javascript
运行
复制
Error in checkForRemoteErrors(val) : 
8 nodes produced errors; first error: could not find function "startyear"

我想这是因为我没有在parVarpackages中设置DEoptim.control,但我不太明白他们要求什么。我想packages是我预先加载的库模块,但不确定parVar是什么。文档说,parVar是一个变量名(作为字符串)的列表,这些变量名称需要存在于环境中,以供目标函数使用或被目标函数用作参数。

我的代码有1500行长,所以我不确定应该包括哪些变量名。代码是一系列子函数--以下是其中的一部分:

代码语言:javascript
运行
复制
library(DEoptim)
library(package = "hydromad")
library(maptools)
library(compiler)
#enableJIT(3)
library(tcltk)
library(raster)

Calibrate <- function(x) {
cmax <<- x[1]
Cr <<- x[2]
Cl <<- x[3]
Crb <<- x[4]
Clb <<- x[5]
returnflowriver <<- x[6]
returnflowland <<- x[7]
kd <<- x[8]
startyear()
-RSquaredboxcox
}

initialisemodel <- function() {
S1 <<- Sys.time()
# 1 Yangtze watershed inputs
# Load librarys
Starttime <- Sys.time()

Catchmentnum <- 1
# Set global parameters
Plothourlyrunoffswitch <- 0

cmin <<- 0.01
tempmelt <<- 1.5
tempsnow <<- 0.0
temprain <<- 1.5
DDFSnow <<- 4.1
DDFIce <<- 7.1

shiftcell <<- Resolution/3600

projstring <<- "+proj=longlat +datum=WGS84 +no_defs"

诸若此类。

所以我的问题是,我应该在parVarpackages中包括什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-06-16 12:32:12

正如您在问题中提到的,您需要使用parVarpackages

packages向量应该列出您使用的任何包,例如使用在另一个包中找到的随机数生成器。

parVar向量应该包含在代码调用的函数或变量中。所以在你的情况下

代码语言:javascript
运行
复制
parVar = "startyear"

我强烈怀疑,这将引发另一个关于另一个缺少变量的错误(您应该将该变量添加到parVar并重复该过程)。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30867402

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档