Julia - 并行数学优化器

时间:2016-10-17 09:00:05

标签: parallel-processing julia linear-programming glpk

我通过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

1 个答案:

答案 0 :(得分:1)

据我所知,GLPK是not multithreaded。如果您必须拥有多线程解算器,请考虑使用较新的解决方案,例如GurobiMOSEK。他们有免费的学术许可证。

如果商业解决方案对您的目的感到憎恶,那么也许尝试Splitting Cone Solver。它是根据麻省理工学院许可证免费发布的。

否则,评论中的建议(例如批量处理)可能是您唯一的追索权。