【问题标题】:Branching mechanism in B&P using SCIP使用 SCIP 的 B&P 中的分支机制
【发布时间】:2017-02-02 14:49:28
【问题描述】:

我正在使用 SCIP 在 c 中实现分支和价格算法。

问题:为了调用分支机制,我使用了基本的 BRANCHEXECLP 机制。 SCIP 如何知道何时分支?当前松弛解有非整数解时,对吗?我不必告诉 SCIP 为这种情况调用分支机制,对吗?

我问是因为(在大多数情况下)我的 B&P 算法运行良好。但是,在某些时候,它会到达对应于对偶边界解的节点。在解决了定价问题(并且没有任何列对进入主问题具有吸引力)后,该节点的松弛解包含非整数解,但不调用分支机制。运行就结束了。知道这里发生了什么吗?

谢谢, 抢库里

【问题讨论】:

    标签: scip


    【解决方案1】:

    我猜您在定价期间检查了当前 LP 解决方案中是否存在小数变量?

    那个节点的对偶边界等于全局对偶边界?您是否将目标标记为仅具有整数值?在这种情况下,如果对偶边界足够接近原始边界,四舍五入给出相同的数字,SCIP 将切断节点。也许 SCIP 在您的定价之后发现了一个新的解决方案,该解决方案立即被当前的全球双重约束证明是最优的? SCIP 在定价循环中每个求解 LP 后自动运行一些简单的舍入启发式算法。

    【讨论】:

    • 感谢您的帮助。是的,当前的 LP 解决方案中存在分数变量。是的,当前节点的对偶边界等于全局对偶边界。不,我没有将我的目标标记为只有整数值。整数变量不在目标中。启发式方法可能是问题所在。有什么简单的方法可以关闭这些启发式方法?
    • 原始界限不等于双重界限?启发式应该不是问题,他们只会尝试构建一个可行的解决方案。但是您可以通过交互式 shell 中的“set heur emph off”来关闭它们(这将关闭所有启发式)。但我不建议这样做。
    • 你说运行就退出了,这是什么意思?它声称最优吗?它会中止吗?如果它中止,您是否在调试模式下运行(使用 OPT=dbg 编译)并且是否有任何断言出现?
    • 原始边界不等于双重边界。当它“退出”时,它并不声称是最优的。它中止,并创建输出和错误文件。错误文件显示“返回错误代码 139。”
    • 好的,这可能是一个段错误。能否在调试模式下编译并在 gdb 中运行以查看崩溃的位置?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多