【问题标题】:how to pause CPLEX during a B&B execution and feed it with a solution?如何在 B&B 执行期间暂停 CPLEX 并为其提供解决方案?
【发布时间】:2019-04-10 16:04:38
【问题描述】:

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

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

【问题讨论】:

    标签: cplex


    【解决方案1】:

    您可能希望在搜索期间使用回调并注入解决方案,而不是完全停止 CPLEX 以提供 mip-start。用户手册的相关部分是https://www.ibm.com/support/knowledgecenter/SSSA5P_12.9.0/ilog.odms.cplex.help/CPLEX/UsrMan/topics/progr_adv/callbacks/introCallbacks.html,Java API 的参考是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 重现此行为,我建议您在 https://www.ibm.com/developerworks/community/forums/html/forum?id=11111111-0000-0000-0000-000000002059 发布问题并附上允许重现此问题的文件。

    【讨论】:

    • 感谢您的回答。我使用启发式回调实现了我的方法,我遇到了同样的问题。我使用 setSolution(vars, vals) 函数来提供我从启发式中获得的解决方案,当我这样做时,我没有收到任何错误或警告。但是,当 CPLEX 模型在回调后继续运行时,它根本不考虑我的解决方案(该解决方案是可行的,因为它在作为新模型中的 mip-start 馈送时工作)。您知道是否应该立即考虑此解决方案?还是在 CPLEX 考虑之前存在时间延迟?。
    • 请查看ibm.com/developerworks/community/forums/html/…。具体来说,您希望按照丹尼尔在他的第一个答案中提到的步骤进行操作。
    【解决方案2】:

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

    NoCheck CPLEX 无需任何检查即可接受 MIP 启动。

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

    【讨论】:

      猜你喜欢
      • 2021-06-26
      • 2020-12-25
      • 2023-02-22
      • 1970-01-01
      • 2019-08-27
      • 1970-01-01
      • 2021-05-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多