Julia - 并行数学优化器

Julia - Parallel mathematical optimizers

我通过 Julia 使用 GLPK,我需要重复优化相同的 GLPK.Prob。 每次优化之间的变化是某些变量组合固定为 0

简单的输入伪代码

lp = GLPK.Prob()
variables_to_block = [[1,2,3], [2,3], [6,7], [19,100,111]...]
for i in variables_to_block 
    block_vars(lp, i)
    simplex(lp)
    restore_vars(lp, i)
end 

当我然后 运行 这个时,看起来 CPU1 充当调度程序,保持在 9-11% 的范围内,CPU3 和 CPU4 上的负载在 0 和 100% 之间交替,但从未达到同时...CPU2的负载保持在0%

这可能需要一些时间,我想使用所有内核

然而,使用 Julia 的并行功能有点麻烦,特别是对于 lp 模型,因为它们涉及指针,因此(据我所知)它们不能在内核之间轻松复制

有没有办法将 GLPK 求解器二进制文件(或其他东西)设置为自动尝试充分利用所有内核?通过以这种方式或任何其他方式编译 GLPK

据我所知,GLPK是not multithreaded. If you must have a multithreaded solver, then consider using a newer one such as Gurobi or MOSEK。他们有免费的学术许可证。

如果商业求解器不符合您的目的,那么不妨试试 Splitting Cone Solver。它根据 MIT 许可证免费发布。

否则,评论中的建议(例如批处理)可能是您唯一的办法。