【问题标题】:Out of memory: Running cplex from matlab内存不足:从 matlab 运行 cplex
【发布时间】:2013-09-21 19:37:53
【问题描述】:

我使用建模库 YALMIP 在 Matlab 中编写了一个线性程序,我想用 Cplex 解决它。 该程序构造良好,然后它调用 cplexlp 来解决问题,但 Cplex 内存不足,我收到此错误:

Parallel mode: deterministic, using up to 2 threads for concurrent optimization.
Aggregator has done 101 substitutions...
Tried aggregator 1 time.
LP Presolve eliminated 720048 rows and 176294 columns.
Aggregator did 52806 substitutions.
Reduced LP has 383867 rows, 454203 columns, and 1324735 nonzeros.
Error using cplexlp (line 254)
CPLEX Error  1001: Out of memory.

当我将问题导出到 lp 文件时,Cplex 会读取 lp 文件并很好地解决问题。

我的第一个想法是 Matlab 无法分配更多内存,但它分配的内存不超过 1.3 GB,而空闲 RAM 超过 1 GB。我尝试将 SWAP 增加到 5 GB,但没有成功。

我也尝试更改 Cplex 参数。我为 workMem 参数 (2000.0) 输入了一个更大的值,但它不起作用。然后我尝试将内存 Emphasis 参数设置为 1,它已将矩阵从 58 MB 压缩到 17 MB,但仅在 50% 的情况下解决了问题。

如果有人有解决此问题的想法,我将非常感谢您的帮助。 谢谢

电脑特性: Windows 7 32 位 Intel celeron 2.5 Ghz,4 GB RAM

【问题讨论】:

  • 您是否尝试过仅使用 MATLAB 的 CPLEX 接口而不是使用 YALMIP?
  • 不,我没试过。 YALMIP 只是从我的建模中构造以下发送到 cplex 的参数的建模器:f,Aineq,bineq,Aeq,beq,lb,ub。内存不足异常来自 Cplex。问题的建模是正确的,因为我在使用的时间步长较低(较少的变量和约束)时解决了问题。
  • 如果您要显式构造 f,Aineq,bineq,Aeq,beq,lb,ub,那么为什么不直接使用 CPLEX for MATLAB 工具箱呢?这可能无济于事,但至少您知道 YALMIP 不是问题的原因。
  • 如果你没有明确地构造 f,Aineq,bineq,Aeq,beq,lb,ub,那么 YALMIP 可能正在做某种形式的重构和/或预求解,在这种情况下会造成伤害。
  • 如果您认为 YALMIP 制定了一些奇怪的东西,欢迎您将模型发送给我(YALMIP 的开发者)。但是,在我看来,这纯粹是与 CPLEX 相关的,模型太大了。

标签: matlab memory-management out-of-memory cplex


【解决方案1】:

内存泄漏的主要原因是CPlex。在使用 Cplex 进行多次试验后,我通过使用 GUROBI 和 Matlab 解决了我的问题,没有遇到任何内存泄漏。此外,运行时间减少了大约 %30 。总之,我建议您将求解器更改为 Gurobi。这是值得的。

【讨论】:

    【解决方案2】:

    当我使用 32 位版本的 Windows 时,我经常发现各种软件变得不可靠或在 1GB 和大约 1.6GB 之间的某个时间点达到内存限制。也许 64 位版本会更好。

    【讨论】:

    • 很遗憾,我没有 64 位版本的 windows。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-23
    • 2014-05-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多