Closed kibaekkim closed 2 years ago
We agreed to have an interface layer at DspOsi
for lazy callback function, while having scip separately.
We want to add a common structure to set callback function and a wrapper for functions to add lazy cuts. Check how to add a common interface for user-defined callback functions.
Shall we also add callback functions in DspCInterface
?
Shall we also add callback functions in
DspCInterface
?
This is an interesting idea, but let's not add the functions at this moment. It needs much more thoughts for how users can use the functions.
Shall we also add callback functions in
DspCInterface
?This is an interesting idea, but let's not add the functions at this moment. It needs much more thoughts for how users can use the functions.
OK. Then I will test this callback structure using benders decomposition.
The current Benders implementation uses the SCIP constraint handler, which works like lazy constraints in CPLEX or GUROBI. You can find how it works in general: https://www.scipopt.org/doc-7.0.1/html/CONS.php SCIP is a very well-written code, and I suggest to check it out.
Back to DSP, the base class of our Benders constraint handler is implemented in
src/Solver/Benders/SCIPconshdlrBenders.*
which derives many classes of the formSCIPconshdlr*
. In particular, the Benders cuts used in the dual decomposition is implemented insrc/Solver/DualDecomp/SCIPconshdlrBendersDd.*
.As discussed in the meeting, we want to implement a common callback structure that can use SCIP, CPLEX, and GUROBI. I think this can be implemented in
DspOsi
class and its derivative for each solver. Please take a look at the code and give some thoughts about that.