我通过 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 。如果您必须有一个多线程求解器,请考虑使用较新的求解器,例如 Gurobi或MOSEK 。他们拥有免费的学术许可证。
如果商业求解器不符合您的目的,那么也许可以尝试 Splitting Cone Solver 。它是根据 MIT 许可证免费发布的。
否则,评论中的建议(例如批处理)可能是您唯一的资源。
关于parallel-processing - Julia - 并行数学优化器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40082242/