首页 文章

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

提问于
浏览
0

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


Issues:

  • I failed to figure out which Gurobi callback code tells me that the solver is just about to branch. 至于CPLEX,我找到了 BranchCallback 和详细的example;相应的SCIP文档是:How to add branching rules .

  • 我想向求解器建议的变量子集是动态计算的,给出了节点放松的解决方案 . 换句话说,分支优先级从一个节点变为另一个节点,这取决于放松问题的解决方案 . It is unclear to me whether resetting the branching priorities in a callback is allowed and works as expected. Gurobi doc of BranchPriority没有说,在问题#1未解决之前我自己不能"reverse engineer" .

  • 如果有必要,我也可以自己打破关系,编写自己的完整分支规则,而不仅仅是建议变量的子集;然而this was not possible 5 years ago in Gurobidoc of Callback表明情况仍然相同 . 由于实现我自己的分支规则似乎比更改我的代码以使用SCIP或CPLEX更容易, I would give the "custom fractional cuts via callback" mentioned in that Google Groups post a shot. Unfortunately, it is not clear to me how to do this. 如果有任何帮助:我的所有系数都是整数,我的所有变量都是二进制变量 .

1 回答

  • 0

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

相关问题