【发布时间】: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