0

我使用建模库 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 的可用 RAM。我尝试将 SWAP 增加到 5 GB,但没有成功。

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

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

计算机特性:Windows 7 32 位 Intel celeron 2.5 Ghz with 4 GB RAM

4

2 回答 2

1

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

于 2013-09-17T16:08:44.043 回答
1

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

于 2014-09-09T11:24:25.550 回答