当前位置: 首页 > 知识库问答 >
问题:

Julia-并行数学优化器

裴和怡
2023-03-14

我通过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个答案

杨无尘
2023-03-14

据我所知,GLPK不是多线程的。如果你必须有一个多线程解决方案,然后考虑使用一个更新的一个,如GuROI或MOSEK。他们有免费的学术许可证。

如果商业解算器与您的目的背道而驰,那么不妨尝试使用分割锥解算器。它是根据麻省理工学院许可证免费发布的。

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

 类似资料:
  • 数学优化 处理寻找一个函数的最小值(最大值或零)的问题。在这种情况下,这个函数被称为成本函数,或目标函数,或能量。 这里,我们感兴趣的是使用scipy.optimize来进行黑盒优化: 我们不依赖于我们优化的函数的算术表达式。注意这个表达式通常可以用于高效的、非黑盒优化。 先决条件 Numpy, Scipy matplotlib 也可以看一下: 参考 数学优化是非常 ... 数学的。如果你需要性能

  • 我正在尝试构建一个函数,它将输出一个表达式,并分配给一个新的内存函数。我可能误解了元编程的功能,但我试图构建一个函数,生成一个数学系列,并将其分配给一个函数,例如: 主要的jl 因此,这将构建模式,我暂时在repl中使用它: 显然,eval不是我在本例中要寻找的功能,但是,还有其他功能可以使用吗?或者,这难道不是在朱莉娅身上完成任务的可行方式吗?

  • 我有一个用于将实时数据移动到测试环境中的事务数据置乱的过程。该表包含大约一亿行,分布在50个分区中。每月添加一个新分区。随着音量的增加,过程的执行速度比以前慢。 我正在考虑在我的代码中引入某种程度的并行化。这是一个新领域,我想知道是否有任何最佳实践。也许使用dbms_parallel_execute将更新拆分为块? 任何关于如何优化我的代码的建议都非常感谢! 编辑,我的解决方案基于以下反馈:重写部

  • 我一直试图在Julia中使用和实现一些并行编程。 显然,这些向量将是巨大的,但为了简单起见,我只是把这个有限的大小。 我刚得到一个零的向量。我的问题是:有没有一种方法可以在Julia中使用实现这个函数,并得到与在原始函数中相同的结果?

  • 我是spark新手,有一个简单的spark应用程序,使用spark SQL/hiveContext: 从hive表中选择数据(10亿行) 做一些过滤,聚合,包括row_number窗口函数来选择第一行,分组,计数()和最大()等。 将结果写入HBase(数亿行) 我提交的作业运行它在纱线集群(100个执行者),它很慢,当我在火花UI中查看DAG可视化时,似乎只有蜂巢表扫描任务并行运行,其余的步骤#

  • You might notice after requiring React JS into your project that the time it takes from a save to a finished rebundle of your application takes more time. In development you ideally want from 200-800