CPLEX毫无例外地耗尽内存

Flogo

我正在通过COIN / OSI界面(OsiCpxSolverInterface运行CPLEX 对于某些大型LP,我会收到一条错误消息,CPX0000 CPLEX Error 1001: Out of memory.尽管有该错误消息,也不会CoinError引发任何异常()。查看源代码,OsiCpxSolverInterface看起来的返回码CPXlpopt必须为0。

需要明确的是:我的问题不是如何避免内存不足的问题。我只是在寻找一种从程序中检测到它的方法。

Flogo

我发现了一个对我有用的技巧。将错误处理程序日志级别设置为0仅允许通过错误消息。覆盖MessageHandler的print方法然后可以对错误做出反应。此解决方法绝对是一个hack。如果有人有更好的建议,我很乐意接受其他答案。

class ErrorCatchingCoinMessageHandler: public CoinMessageHandler {
public:
    ErrorCatchingCoinMessageHandler()
        : CoinMessageHandler() {
        // Would be nice to also overwrite setLogLevel to avoid later changes
        // but its not virtual
        setLogLevel(0);
    }

    virtual int print() __attribute__((noreturn)) {
        CoinMessageHandler::print();
        abort(); // or throw a CoinError
    }
};

// Use it like this

lp_solver->passInMessageHandler(new ErrorCatchingCoinMessageHandler());

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章