[SCIP] questions on custom branching

Brannon King countprimes at gmail.com
Thu Jun 13 18:15:36 CEST 2024


I'm interested in applying some machine-learning (ML) approaches to
branch selection. I have these questions on the topic:

1. When I call branchvar from branchexeclp, does the left/right nodes
returned from that have their relaxed LP computed as part of that
call? The instructions on custom branching say that you can call
updateNodeLowerBound right after branchvar, meaning it did not yet run
the relaxation for the two new nodes? Can I force it to run the
relaxation right there?

2. How do I get the dual bound from my newly created nodes inside the
brancher so that I can propagate my losses?

3. Does it only call one brancher per node (if that brancher returns BRANCHED)?

4. Suppose I only want two branching options: my custom brancher and
strong branching for when the custom brancher can't succeed. With both
of them, though, I need to update my ML model according to the newly
found costs. Should I just have one brancher that falls back to strong
branching inside it? Is there sample code for that somewhere in python
& pyscipopt? What's the best approach here? Would it be better to use
a MIPNode callback to backpropagate bounds?

5. Outside of the branching callback, can I know which variable was
most-recently fixed in a MIPNode? What decision created that node?

Thanks for your time. I've got the src/scip/branch_fullstrong.c file
up, so I'll keep studying that.


More information about the Scip mailing list