R dopar:仅对第一个指数做结果

时间:2013-02-05 03:06:24

标签: r foreach parallel-processing

我想问问专家下面的代码可能有什么问题:

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核心时出现问题,两个版本我都使用了上面的代码块

0 个答案:

没有答案