首页 文章

CPLEX需要很长时间才能启动

提问于
浏览
0

我在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

你有什么主意吗?

提前谢谢,迈赫迪

2 回答

  • 0

    我对您的性能问题没有任何见解,但我可以提供有关警告的第二个问题的一些信息 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中,"constraint labels"),仍会出现错误消息,并且LP输出具有#number后缀 .

  • 1

    关于性能问题,您可以尝试以下方面:

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

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

    如果确实存在性能问题,最好通过官方的IBM support Channels . 如果您通过Academic Initiative使用CPLEX,则可以使用developerWorks论坛获取支持 .

相关问题