gpt4 book ai didi

java - 由于内存不足,Ubuntu 内核终止了 CPLEX ILP 进程

转载 作者:太空宇宙 更新时间:2023-11-04 13:02:15 24 4
gpt4 key购买 nike

我正在使用 Java 中的 ILOG CPLEX 库来解决 ILP 问题。我使用的是默认设置,没有调整任何参数。我使用了我在主循环示例中在线找到的示例代码:

if (cplex.solve()) {
Log.printLine("CPLEX solved successfully");
} else {
Log.printLine("probably insufficient memory or some other weird problem.");
}

我在具有 24GB RAM 的 Ubuntu 14 系统上启动了我的 jar,让它解决了更大的问题。当我的问题变得太大而无法使用 24GB RAM 解决时,我希望 CPLEX 从 solve 方法返回 false。相反,我的 CPLEX 一直不停地运行,直到我的内核终止进程。我通过检查 kern.log 验证了这一点:

Nov  6 00:21:47 node0 kernel: [3779722.641458] Out of memory: Kill process 3600 (java) score 980 or sacrifice child
Nov 6 00:21:47 node0 kernel: [3779722.641476] Killed process 3600 (java) total-vm:36562768kB, anon-rss:23969732kB, file-rss:688kB

这是我第一次使用 CPLEX,我想知道如何才能让 CPLEX 在内存不足时向求解方法返回 false(而不是使系统资源匮乏)?

我尝试在线查找并找到了一些关于 WorkMem 和 TreeLimit 参数的 C++ 线程,但我无法找到如何使用 Java 库配置它们。

有没有人能进一步帮助我?谢谢。

编辑:这是 CPLEX 日志

Found incumbent of value 5000.000000 after 0.09 sec. (48.51 ticks)
Tried aggregator 1 time.
MIP Presolve eliminated 600000 rows and 1 columns.
MIP Presolve modified 156010 coefficients.
Reduced MIP has 171010 rows, 770000 columns, and 3170000 nonzeros.
Reduced MIP has 770000 binaries, 0 generals, 0 SOSs, and 0 indicators.
Presolve time = 5.54 sec. (2155.22 ticks)
Probing time = 5.51 sec. (186.83 ticks)
Tried aggregator 1 time.
Reduced MIP has 171010 rows, 770000 columns, and 3170000 nonzeros.
Reduced MIP has 770000 binaries, 0 generals, 0 SOSs, and 0 indicators.
Presolve time = 3.68 sec. (1438.46 ticks)
Probing time = 3.45 sec. (181.50 ticks)
Clique table members: 263821.
MIP emphasis: balance optimality and feasibility.
MIP search method: dynamic search.
Parallel mode: deterministic, using up to 4 threads.
Root relaxation solution time = 43.34 sec. (14019.88 ticks)

Nodes Cuts/
Node Left Objective IInf Best Integer Best Bound ItCnt Gap

0+ 0 5000.0000 0.0000 100.00%
0 0 4547.0452 14891 5000.0000 4547.0452 20 9.06%
0 0 4568.6089 12066 5000.0000 Cuts: 6990 318432 8.63%

它一直持续到内核杀死它为止。

最佳答案

要更改 WorkMem参数,你会做这样的事情:

IloCplex cplex = new IloCplex();
cplex.setParam(IloCplex.Param.WorkMem, 2048);

请参阅 TreeLimit 的文档和 MIP.Strategy.File .在调查这个问题时,我在 TreeLimit 文档中发现了一个小问题。它在那里提到了 128MB(WorkMem 的旧默认值),但它应该是 2048MB。这正在修复中。

您可以在 CPLEX 附带的示例中找到许多关于如何更改参数的示例(例如,MIPex3.java 等,可以在示例子目录中找到)。

有关详细信息,请参阅 running out of memory .

此处的所有链接均适用于 CPLEX 12.6.2,但如果您安装了其他软件,您应该能够在知识中心选择不同版本的文档。

关于java - 由于内存不足,Ubuntu 内核终止了 CPLEX ILP 进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33567066/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com