【问题标题】:CPLEX take long time to startCPLEX 需要很长时间才能启动
【发布时间】:2015-05-28 02:07:34
【问题描述】:

我在 CPLEX 中有一个巨大的线性模型,它是用 Microsoft Visual C++ 编写的。 打了cplex.solve()之后,很长一段时间都没有进展。 5 分钟内不会显示任何内容。然后,将显示线程数,并且预求解时间小于 1 秒。所有的行和列都被消除,求解时间小于 1 秒。

我的日志文件如下:

Warning:  Output names have been modified to conform to LP format.
Parallel mode: deterministic, using up to 8 threads for concurrent optimization.
Tried aggregator 1 time.
LP Presolve eliminated 283559 rows and 283572 columns.
All rows and columns eliminated.
Presolve time = 0.48 sec. (516.10 ticks)

或者当我在列生成中添加另一列时的其他一个是

Warning:  Output names have been modified to conform to LP format.
Parallel mode: deterministic, using up to 8 threads for concurrent optimization.
Iteration log . . .
Iteration:     1   Scaled dual infeas =           224.981132
Iteration:    13   Dual objective     =      25519782.182497
Iteration:  3159   Dual objective     =      30679377.244649
Barrier solved model.

为什么要花这么长时间才能开始? 那是什么警告?

可以肯定的是,我将模型导出并导入到另一个项目中,解决了,整个过程不到2秒。因此,在这 4 分钟内,它不会进行聚合或预求解。

此外,我使用 CODEXL 检查了性能,发现 dll 中有两个经常使用但我不知道的函数:CPXLkillpnorms、CPXEgeneric_unlock、cplex1261.dll!+0x2627a2

你有什么想法吗?

提前致谢, 迈赫迪

【问题讨论】:

    标签: visual-c++ cplex


    【解决方案1】:

    我对您的性能问题没有任何见解,但我可以在您的问题中提供一些关于警告 Output names have been modified to conform to LP format. 的第二个问题的信息。此警告意味着您的模型中的变量和约束名称已被修改为使用形成“#number”,如this IBM Technote 中所述。

    LP 格式对变量和约束名称有一些令人惊讶的限制。特别是,变量和约束名称可能不包含某些字符(包括 ^、*、[、] 或空格),并且它们可能不以字符 e 或 E 开头。如果模型包含任何此类违反 LP 格式的行为,相应的变量或约束名称将具有#number 后缀。尽管命名要求显然与 LP 格式有关,但我看到 #number 名称也用于其他输出格式,例如 SAV。

    可以通过重命名模型的组件来消除此错误消息。 This post on IBM developerWorks 描述了一个用户如何通过将变量从 excessVarForConstraint 重命名为 dddVarForConstraint 来做到这一点。

    但是,我怀疑 IBM 提供的解释不完整。即使对于我已从变量和约束名称中删除所有违规字符的 OPL 模型(从技术上讲,在 OPL 中,“约束标签”),错误消息 still 也会出现,并且 LP 输出具有 #number 后缀.

    【讨论】:

      【解决方案2】:

      关于性能问题,您可以尝试以下一件事:

      IloNum start = cplex.getCplexTime();
      cplex.solve();
      std::cout << "Elapsed: " << (cplex.getCplexTime() - start) << std::endl;
      

      也就是说,确保实际上是 solve() 函数消耗了时间。将打印的时间与 CPLEX 日志中显示的时间进行比较(例如,来自 CPLEX 交互式)。如果差异很大,那么罪魁祸首可能会延迟model extraction

      如果看起来确实存在性能问题,最好通过官方IBM support 渠道。如果您通过Academic Initiative 使用CPLEX,则可以使用developerWorks 论坛获得支持。

      【讨论】:

        猜你喜欢
        • 2013-11-15
        • 2014-02-23
        • 1970-01-01
        • 1970-01-01
        • 2021-02-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多