我正在使用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)
答案 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
我希望这可以清除你的想法。