1

我正在使用 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]
        }
    }
4

1 回答 1

1

您可以使用 IloCplex.setParameter() 方法在 cplex java 中设置参数。要允许将 mip 树存储在磁盘上,可以使用NodeFileInd和 WorkDir 指定存储目录。可以使用另外两个参数来减少 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 的项。

于 2013-08-21T18:02:06.050 回答