我通过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
答案 0 :(得分:1)
据我所知,GLPK是not multithreaded。如果您必须拥有多线程解算器,请考虑使用较新的解决方案,例如Gurobi或MOSEK。他们有免费的学术许可证。
如果商业解决方案对您的目的感到憎恶,那么也许尝试Splitting Cone Solver。它是根据麻省理工学院许可证免费发布的。
否则,评论中的建议(例如批量处理)可能是您唯一的追索权。