0

鉴于 MIP 求解器即将选择要分支的变量的节点,我想建议一小部分变量可供选择,但与求解器的启发式方法有很大的关系。我有充分的理由相信这可以显着减少解决整数规划问题所需的时间。我更喜欢 Gurobi(Python API),但如果有必要,我愿意切换到另一个求解器(SCIP、CPLEX)。


问题:

  1. 我无法弄清楚哪个Gurobi 回调代码告诉我求解器即将分支。 至于CPLEX,我找到了BranchCallback一个详细的例子;相应的 SCIP 文档是:如何添加分支规则

  2. 考虑到节点松弛的解,我想向求解器建议的变量子集是动态计算的。换句话说,分支优先级会因节点而异,具体取决于松弛问题的解决方案。我不清楚是否允许在回调中重置分支优先级并按预期工作。Gurobi 的文档BranchPriority没有说,在问题 #1 没有解决之前,我不能自己“逆向工程”它。

  3. 如有必要,我也可以自己打破束缚,编写自己的完整分支规则,而不仅仅是建议变量的子集;然而,这在 5 年前在 Gurobi 是不可能的,并且doc ofCallback建议情况仍然相同。由于实现我自己的分支规则似乎比更改我的代码以使用 SCIP 或 CPLEX 更容易,因此我将给出Google Groups 帖子中提到的“通过回调的自定义分数削减” 。不幸的是,我不清楚如何做到这一点。如果这有帮助:我所有的系数都是整数,我所有的变量都是二进制变量。

4

1 回答 1

0

除了 BranchDir 参数,Gurobi 没有办法调整分支决策。您可以通过回调添加切割平面,但我想这不是您想要的。

于 2015-04-01T14:00:48.257 回答