在分支或自定义分支规则之前重置优先级

时间:2015-03-31 15:40:11

标签: mathematical-optimization cplex gurobi integer-programming scip

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


的问题:

  1. 我没弄清楚哪个Gurobi callback code告诉我解算器即将分支。 至于CPLEX,我找到了BranchCallback和详细的example;相应的SCIP文档是:How to add branching rules

  2. 考虑到节点放松的解决方案,我想要向求解器建议的变量子集是动态计算的。换句话说,分支优先级从一个节点变为另一个节点,这取决于放松问题的解决方案。 我不清楚是否允许在回调中重置分支优先级并按预期工作。 Gurobi doc of BranchPriority没有说,我不能"反向工程"在问题#1未解决之前,我自己。

  3. 如果有必要,我也可以自己打破关系,编写自己的完整分支规则,而不仅仅是建议变量的子集;但是this was not possible 5 years ago in Gurobidoc of Callback表明情况仍然相同。 由于实现我自己的分支规则似乎比更改我的代码以使用SCIP或CPLEX更容易,我会通过Google Groups上提到的回调" 提供"自定义小数削减一枪。不幸的是,我不清楚如何做到这一点。如果有任何帮助:我的所有系数都是整数,我所有的变量都是二进制变量。

1 个答案:

答案 0 :(得分:0)

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