Parallel processing Julia-并行数学优化器

Parallel processing Julia-并行数学优化器,parallel-processing,julia,linear-programming,glpk,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 当我运行这个程

我通过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,GLPK都是。如果必须有多线程求解器,则考虑使用更新的一个,如OR。他们有免费的学术许可证

如果商业解决方案与您的目的背道而驰,那么不妨尝试一下。它是根据麻省理工学院许可证免费发布的


否则,评论中的建议(例如批量处理)可能是您唯一的求助方式。

可能比遵循多处理路径要好得多:只需更新您的问题并重新开始。启动。我应该注意到我直接使用GLPK模块,所以我没有使用跳线,它不支持热启动?那将是可悲的。JuMP非常强大,即使仅使用MathProgBase,也可以完成一些好的工作。我非常乐观,温暖的起步会比Mt在这里帮助更多。但我可能错了。(如果这是学术性的工作:在学术环境中使用一种多线程的免费商业解决方案;关于开源:我更喜欢cbc而不是glpk,但你似乎已经做出了决定)这可能是(可能是更高的设计质量;但这只是一种预感;最快的方法是使用MathProgBase),但这不是我的观点。如果解算器支持,JuMP提供了一种很好的热启动功能。如果需要,您可以轻松地切换解算器,通常使用它可能会更好。一个简单的设备是创建4个批处理文件,每个批处理文件执行总场景数的1/4,然后并行运行这些批处理文件。这是一个窗户。在Unix下,这更容易。谢谢。。。那太糟糕了,所以我想我必须进行批处理