鉴于MIP求解器即将选择一个变量进行分支的节点,我想建议选择一小部分变量,但要保留与解算器启发式的断开关系。我有充分的理由相信这可以大大减少解决整数编程问题所需的时间。 我更喜欢Gurobi(Python API)但如果有必要,我愿意切换到另一个求解器(SCIP,CPLEX)。
的问题:
我没弄清楚哪个Gurobi callback code告诉我解算器即将分支。
至于CPLEX,我找到了BranchCallback
和详细的example;相应的SCIP文档是:How to add branching rules。
考虑到节点放松的解决方案,我想要向求解器建议的变量子集是动态计算的。换句话说,分支优先级从一个节点变为另一个节点,这取决于放松问题的解决方案。 我不清楚是否允许在回调中重置分支优先级并按预期工作。 Gurobi doc of BranchPriority
没有说,我不能"反向工程"在问题#1未解决之前,我自己。
如果有必要,我也可以自己打破关系,编写自己的完整分支规则,而不仅仅是建议变量的子集;但是this was not possible 5 years ago in Gurobi,
doc of Callback
表明情况仍然相同。
由于实现我自己的分支规则似乎比更改我的代码以使用SCIP或CPLEX更容易,我会通过Google Groups上提到的回调" 提供"自定义小数削减一枪。不幸的是,我不清楚如何做到这一点。如果有任何帮助:我的所有系数都是整数,我所有的变量都是二进制变量。
答案 0 :(得分:0)
除了BranchDir参数,Gurobi无法调整分支决策。你可以通过回调添加切割平面,但我想这不是你想要的。