内存不足:从matlab运行cplex

时间:2013-09-17 11:26:21

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

我使用建模库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,而1 GB的可用内存超过1 GB。我试图将SWAP增加到5 GB,但它没有用。

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

如果有人有想法解决这个问题,我真的很感激帮助。 谢谢

电脑特性: Windows 7 32位英特尔赛扬2.5 Ghz,4 GB RAM

2 个答案:

答案 0 :(得分:1)

当我使用32位版本的Windows时,我经常发现各种软件都不可靠或在1GB到1.6GB之间的某个点上达到了内存限制。也许64位版本可以更好地工作。

答案 1 :(得分:1)

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