Skip to main content

Benders decomposition (L-shaped) with cbLazy in MIPSOL callback: how to avoid losing presolve reductions from LazyConstraints=1?

Answered

Comments

2 comments

  • Riley Clement
    • Gurobi Staff

    Hi Abhishrut,

    Is there a way to keep these reductions while still adding Benders optimality cuts with cbLazy in a MIPSOL callback?

    Unfortunately not.  When LazyConstraints=1 we must turn off dual reductions.  You could confirm these are responsible for the performance by repeating your experiment with the extensive form, but setting DualReductions=0 instead of LazyConstraints=0.  Dual reductions will happily remove feasible solutions from the solution space while guaranteeing at least one optimal solution will remain.  When lazy constraints are added via a callback then there is no way that the guarantee is valid.  After applying dual reductions perhaps the only solutions remaining will be removed by the lazy constraints.

    If not, what is the recommended way to implement single-tree Benders decomposition in Gurobi?

    I think you have the main building blocks in place.  Unfortunately a standard Benders implementation just typically doesn't work that well without various problem specific improvements to the algorithms.  Of course there are other reasons for applying Benders, other than performance.  If you're interested in diving deeper into what sort of enhancements are required for performance then I recommend this talk from "Bender's Day" by Stephen Maher: https://youtu.be/vVuNsx1bfLA?si=lOUM6IY5HlFqYPbH

    - Riley

    0
  • Abhishrut Sinha
    • First Comment
    • First Question

    Thank you, Riley!

    0

Please sign in to leave a comment.