我想问问专家下面的代码可能有什么问题:
resultOptimization <- foreach(i = 1:length(varietyNames) , .combine = rbind, .init = resultOptimization) %dopar% {
variety <- varietyNames[i]
subsetVarietyNames <<- subset(observedValues, Variety == variety)
rowNumberOfObservedValues <<- nrow(subsetVarietyNames)
inputTrait <<- subsetVarietyNames[,c("Site", "Latitude", "Longitude", "Altitude", "Flooding",
"Transplanting", "DDTransplantingShock", "Z", "LAIMax",
"POP", "PLAini", "LRGRMax", "SowingDate")]
resultOptimTrait <- genoud(fn = minimizationFunction, nvars = numberOfParametersToBeEstimated, max = FALSE,
Domains = optimizedParametersBounds, pop.size = 2, max.generations = 2,
wait.generations = 2, hard.generation.limit = TRUE, MemoryMatrix = TRUE,
starting.values = NULL, default.domains = 10, solution.tolerance = 0.001,
gr = NULL, boundary.enforcement = 0, lexical = FALSE, gradient.check = TRUE,
BFGS = FALSE, data.type.int = FALSE, hessian = TRUE, unif.seed = 812821,
int.seed = 53058, extra_arg = fMeteo)
estimatedParameters <- resultOptimTrait$par
sumOfErrors <- resultOptimTrait$value
#In case of abrupt system failure, save preliminary results
capture.output(c(variety, estimatedParameters, sumOfErrors),file = "PRE_optim_values.txt",append = (if(i==1) {FALSE} else{ TRUE}))
resultLine <- c(variety, estimatedParameters, sumOfErrors)
}
我在做什么:
我正在尝试优化多种植物的参数,第一个循环应该获得1-N品种的优化参数,第二个循环将使用优化的参数打印出模拟值。上面的代码是我将其并行化以便加快处理的过程,第一个for循环一次接收Variety,因为服务器上有核心。
预期产出:
存储在“resultOptimization”列表中的优化参数
我得到了什么:
resultOptimization[1] = V1
resultOptimization[2] = V1
resultOptimization[3] = V1
等等,应该是
resultOptimization[1] = V1
resultOptimization[2] = V2
resultOptimization[3] = V3
问题在于:
当我按顺序运行这个循环时,它产生正确的结果 - 每个变种的优化参数(使用rgenoud),但是当我像上面的代码块中那样并行化时,输出似乎只是重复的第一个变种一遍又一遍;
这很奇怪,因为我100%确定在每次genoud()调用之前加载了正确的值,并且程序的顺序版本正常工作。有谁熟悉这个问题?
另外,当我说顺序时,我的意思是1核心,当我使用&gt; 1核心时出现问题,两个版本我都使用了上面的代码块