我在R代码中使用future.apply包对优化问题的100个蒙特卡罗模拟进行并行处理。
现在,让我们假设每个模拟的优化输出要么是True(找到最佳解决方案(,要么是False。我是否可以设置条件,以便如果前10个模拟返回False,则并行过程将终止?
编辑:我在下面包含一个小示例-我可以在运行10次后终止它吗?
library(future.apply)
plan(multiprocess)
outputs <- future_lapply(1:100, function(i){
temp <- FALSE
return(temp)
})
您可以使用一个中间文件,在其中写入每个模拟的结果。每次启动新的模拟时,都要检查前10个结果是否为FALSE,如果是,则要求线程自行终止。future_lapply()
必须在try()
包装器中使用,因为该函数显然会失败。
library(future.apply)
library(tools)
func <- function(i){
tbl_results <- read.csv("results.csv")
results <- tbl_results[, 2]
if(length(results) >= 10 & all(results[1:10] == FALSE)) pskill(Sys.getpid())
result <- FALSE
cat(paste0(i, ",", result, "n"), file = "results.csv", append = TRUE)
return(result)
}
plan(multiprocess)
cat("input,resultn", file = "results.csv")
outputs <- try({future_lapply(1:100, func)}, silent = TRUE)
if(!is.list(outputs)) stop("10 first simulations returned FALSE")