R:DEoptim 并行优化 - 核心数
R: DEoptim parallel optimization - number of cores
我正在尝试在 R 中使用 DEoptim
优化包来解决连续优化问题,并且由于我的成本函数需要很长时间来评估(2 分钟),所以我正在尝试使用并行计算。我的问题是:
paralleltype=1
(parallel
) 和 2
(foreach
) 选项有什么区别?何时使用两者之一?
是否可以使用 paralleltype=1
指定核心数,以免占用所有可用核心进行计算(例如,64 个可用核心上的 50 个核心)?
广告。 1 - 在包文档中有解释。
广告。 2 - 需要对两个函数进行一些修改:DEoptim.control 和 DEoptim
首先,添加一个变量 - 比如 limitCores - 到 DEoptim.control 函数,它控制 DE 优化的执行参数。
其次,对 DEoptim 包装函数进行修改,以作用于 limitCores 设置的限制。
if (ctrl$parallelType == 1) {
if (!is.na(ctrl$limitCores)) {
if (ctrl$limitCores<1) useCores <- round(parallel::detectCores()*ctrl$limitCores) else useCores <- ctrl$limitCores
cl <- parallel::makeCluster(parallel::detectCores())
} else {
cl <- parallel::makeCluster(parallel::detectCores())
}
感谢您的代码 mjaniec!
我知道你发布它已经有一段时间了,但我认为第 91 行应该是:
cl <- parallel::makeCluster(useCores)
而不是:
cl <- parallel::makeCluster(parallel::detectCores())
我正在尝试在 R 中使用 DEoptim
优化包来解决连续优化问题,并且由于我的成本函数需要很长时间来评估(2 分钟),所以我正在尝试使用并行计算。我的问题是:
paralleltype=1
(parallel
) 和2
(foreach
) 选项有什么区别?何时使用两者之一?是否可以使用
paralleltype=1
指定核心数,以免占用所有可用核心进行计算(例如,64 个可用核心上的 50 个核心)?
广告。 1 - 在包文档中有解释。
广告。 2 - 需要对两个函数进行一些修改:DEoptim.control 和 DEoptim
首先,添加一个变量 - 比如 limitCores - 到 DEoptim.control 函数,它控制 DE 优化的执行参数。
其次,对 DEoptim 包装函数进行修改,以作用于 limitCores 设置的限制。
if (ctrl$parallelType == 1) {
if (!is.na(ctrl$limitCores)) {
if (ctrl$limitCores<1) useCores <- round(parallel::detectCores()*ctrl$limitCores) else useCores <- ctrl$limitCores
cl <- parallel::makeCluster(parallel::detectCores())
} else {
cl <- parallel::makeCluster(parallel::detectCores())
}
感谢您的代码 mjaniec!
我知道你发布它已经有一段时间了,但我认为第 91 行应该是:
cl <- parallel::makeCluster(useCores)
而不是:
cl <- parallel::makeCluster(parallel::detectCores())