Decision Optimization

Decision Optimization

Delivers prescriptive analytics capabilities and decision intelligence to improve decision-making.


#Analytics
#DecisionOptimization
#DecisionOptimization
 View Only
  • 1.  User's Benders Cuts as Global Cuts

    Posted 05/11/18 11:06 AM

    Originally posted by: VKV7_Anulark_Naber


    Hi,

    I have implemented my Benders' cuts in LazyCutCallback. Like any Benders cuts, these cuts are globally valid, i.e., for the entire tree. My questions are:

    (1) Are these Benders' cuts treated as global cuts by Cplex automatically? I used UseCutForce.

    (2) If not, can I create a cut pool and add these Benders' cuts to the cut pool, so these cuts will be checked / used as cuts at each node in the remaining tree? A Java example would be appreciated.

    Thanks for any help.

     


    #CPLEXOptimizers
    #DecisionOptimization


  • 2.  Re: User's Benders Cuts as Global Cuts

    Posted 05/11/18 03:17 PM

    There's no such thing as "LazyCutCallback". I'll assume you are using a LazyConstraintCallback (correct for Benders), as opposed to a UserCutCallback (incorrect for Benders).

    Regardless of the optional second argument, lazy constraints are global if you use add(). They are local if you use addLocal(). The UseCutForce option tells CPLEX not to purge the cuts, even if they are nonbinding for extended periods. If you make cuts purgeable, they remain globally valid; they just may be dropped if they don't seem to do anything for a while.


    #CPLEXOptimizers
    #DecisionOptimization


  • 3.  Re: User's Benders Cuts as Global Cuts

    Posted 05/11/18 04:13 PM

    Originally posted by: VKV7_Anulark_Naber


    That was my mixup mistake. Thanks for the clarification.

     Based on your experience, which callback ( Lazyconstraint and Generoic callbacks) performs better? I am referring to the two examples, BendersATSP and BendersATSP2.


    #CPLEXOptimizers
    #DecisionOptimization


  • 4.  Re: User's Benders Cuts as Global Cuts

    Posted 05/11/18 07:26 PM

    If all you need are lazy constraints (you don't need other types of callbacks), generic callbacks are preferable. The presence of a lazy constraint callback causes CPLEX to disable dynamic search, whereas with a generic callback dynamic search works fine. Just be sure that your generic callback is thread-safe if you are letting CPLEX use more than one thread.


    #CPLEXOptimizers
    #DecisionOptimization