R foreach循环和AUGLAG?

时间:2014-12-11 19:37:53

标签: r optimization

我正在使用AUGLAG在曲线上找到100k点的最佳点。当我在没有并行处理的情况下运行代码时,运行需要1.7天。当我运行下面的代码时,它只需要2.5分钟,但它只找到1k点然后停止。在foreach()循环中使用AUGLAG时是否有问题?

effHolder<-foreach(i=1:loops, .combine=rbind)%dopar%{
    target<-c((i-1)*increment)  #target CFaR
    sol <- auglag(pars, fn=fn, gr=NULL, heq=eqn, lower=lH, upper=uH, nl.info = FALSE, control = list(xtol_rel = 1e-8, maxeval = 20000))
    targetHolder<-target
    target<-0
    c(sol$par, targetHolder, eqn(sol$par), sol$value)
}
stopCluster(cl)

eff<-rbind(eff, effHolder)

2 个答案:

答案 0 :(得分:1)

有一个.packages参数。如果你给这个参数“nloptr”,它会回答你关于auglag可用性的问题。如果那是问题,我会猜到完全失败应该是结果。所以代码片段将是:

foreach(i=1:loops, .combine=rbind, .packages="nloptr")%dopar%{

答案 1 :(得分:0)

您的代码太模糊且无法重现。也就是说,请考虑以下示例。

Foreach并行迭代所有指定的迭代变量,因此循环受具有最少数值的迭代变量的限制。

受“j”限制,返回一个元素:

 foreach(i=1:3, j=10,.combine=rbind) %dopar% {
    c(i, j)
  }
# [1]  1 10

这个受“i”限制,返回三个元素。

  foreach(i=1:3, j=10:100, .combine=rbind) %dopar% {
   c(i, j)
 }
         [,1] [,2]
# result.1    1   10
# result.2    2   11
# result.3    3   12

我希望这可以清除你的想法。