如何在 B&B 执行期间暂停 CPLEX 并为其提供解决方案?

how to pause CPLEX during a B&B execution and feed it with a solution?

我想找到一种方法,在求解最小化 MIP 时向 CPLEX 提供解。这些解决方案来自我 运行 与 CPLEX 并行的启发式方法。整个方法在 Java 中建模,我使用 IloCplex 调用 CPLEX。

我尝试在 CPLEX 上设置时间限制,一旦暂停,使用 MIPStarts 将新解决方案提供给 CPLEX 模型。但是,当我再次 运行 CPLEX 模型时,它说我提供的解决方案不可行,即使我确定它们是可行的。实际上,当我完全重新启动模型时,CPLEX 接受了这些解决方案,这不是我想要的,因为通过这样做,对 b&b 树的探索从根节点重新开始。

如果您想绕过所有检查,您可以使用 nocheck 作为 MIP 启动工作级别

NoCheck CPLEX accepts the MIP start without any checks.

https://www.ibm.com/support/knowledgecenter/en/SSSA5P_12.9.0/ilog.odms.ide.help/refjavaopl/html/ilog/opl/IloCplex.MIPStartEffort.html

与其完全停止 CPLEX 以提供快速启动,不如在搜索期间使用回调和注入解决方案。用户手册的相关部分是 https://www.ibm.com/support/knowledgecenter/SSSA5P_12.9.0/ilog.odms.cplex.help/CPLEX/UsrMan/topics/progr_adv/callbacks/introCallbacks.html, and the reference for the Java API is at https://www.ibm.com/support/knowledgecenter/SSSA5P_12.9.0/ilog.odms.cplex.help/refjavacplex/html/ilog/cplex/IloCplex.Callback.html.

解决方案在搜索开始时被接受为 mip-start 似乎很奇怪,但当搜索已经开始并且 CPLEX 被中断时却不会。如果您可以使用 CPLEX Interactive 重现此行为,我建议您 post 在 https://www.ibm.com/developerworks/community/forums/html/forum?id=11111111-0000-0000-0000-000000002059 提问并附上允许重现该问题的文件。