gpt4 book ai didi

java - 在 Java 中使用 CPLEX 库时的内存优化

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

我正在使用 IBM CPLEX 库来解决 Java 中的优化问题。由于主内存不足以满足应用程序的需要,我发现了 CPLEX 的一个属性:“内存强调:让优化器使用磁盘进行存储”。 Memory Emphasis 的默认值为 0。如何在 Java 中更改此属性?

    for (int i = 0; i < GreenOverlayGlobals.numNodes; i++) {

for (int j = 0; j < GreenOverlayGlobals.numNodes; j++) {

IloLinearNumExpr expr2 = cplex.linearNumExpr();
for (int p = 0; p < GreenOverlayGlobals.numPathPairs; p++) {

cplex.addLe(xPath[i][j][p], xLink[i][j]); //x[i][j][p] <= x[i][j]
expr2.addTerm(1, xPath[i][j][p]);
}
cplex.addLe(xLink[i][j], expr2); //x[i][j] <= sump_x[i][j][p]
}
}

最佳答案

您可以使用 IloCplex.setParameter() 方法在 cplex java 中设置参数。要允许 mip 树存储在磁盘上,您可以使用 NodeFileInd和 WorkDir 指定存储目录。另外两个parameters可以用来减少cplex的内存消耗。您可以将 MemoryEmphasis 设置为 True,这将指示 cplex 尝试节省内存。您还可以通过设置参数 VarSel 来开启“强分支”到3.强分支导致cplex在每个节点上花费更多时间选择更高质量的子节点,这通常会使搜索树更小。

要使用 setParameter 方法,假设您有一个名为 cplex 的 IloCplex 对象。

cplex.setParam(IloCplex.IntParam.VarSel, 4);
cplex.setParam(IloCplex.BoolParam.MemoryEmphasis, true);

请记住,这些参数仅在 .solve() 期间影响 cplex。如果在 .solve() 之前内存不足,参数将不会执行任何操作。由于 cplex 模型通常非常稀疏,因此内存消耗过多的最常见原因是添加了太多系数为 0 的项。

关于java - 在 Java 中使用 CPLEX 库时的内存优化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18359359/

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