Decision Optimization

Decision Optimization

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


#Analytics
#DecisionOptimization
#DecisionOptimization
 View Only
  • 1.  Class IloCplex.UserCutCallback.addCut

    Posted 02/04/14 04:37 PM

    Originally posted by: SifengLin


    I have some questions about user cut and its callback:

    1. If I call IloCplex.addUserCut to add user cut to the cut pool, do we have any control over how the cut is separated? 

    2. When we call addCut(IloConstraint cut) in UserCutCallback, is the cut added to the cut pool? or does CPLEX incorporate the cut in the current relaxation formulation directly?  Besides, which IloCplex.CutManagement value is used?

    3. Is the IloCplex.CutManagement applied to a specific cut or the whole cut callback? In the description, it says: " Enumeration of possible values to specify where a cut callback is called from", which seems to indicate that it affects the whole callback  But the description of its values (UseCutForce, UseCutPurge and UseCutFilter) seem to indicate that it is applied to a specific cut.


    #CPLEXOptimizers
    #DecisionOptimization


  • 2.  Re: Class IloCplex.UserCutCallback.addCut

    Posted 02/05/14 02:52 AM
    1. No. CPLEX will look at that pool when it thinks it is useful to do so. There is no way for you to control that.
    2. addCut(IloRange) uses UseCutForce. I recommend not to use addCut(IloRange). Instead use the overload that takes a CutManagement argument. This way your code will be easier to read and it is more obvious what is going on. Since the CutManagement argument for addCut(IloRange) is implicitly "force", it will be added to the relaxation immediately.
    3. The cut management is applied only to the respective cut, not to all cuts added in the callback. The reference documentation for the CutManagement enumeration is misleading here. We will try to clarify this for a future release.

    #CPLEXOptimizers
    #DecisionOptimization


  • 3.  Re: Class IloCplex.UserCutCallback.addCut

    Posted 02/05/14 09:47 AM

    Originally posted by: SifengLin


    Daniel, thanks for your reply.  Can you help me understand the CutManagement value a little more?

    1. When we use value UseCutForce for a cut, CPLEX will never purge this cut.  Is that right?

    2. What exactly does UseCutFilter do ? How is it different from UseCutPurge?  When we use UseCutFilter, is the cut applied to the formulation immediately?

    3. When we use IloCPLEX.addUserCut for a specific cut, it is treated like the cut discovered by CPLEX?  This cut may be purged by CPLEX.  Is that right?

     


    #CPLEXOptimizers
    #DecisionOptimization


  • 4.  Re: Class IloCplex.UserCutCallback.addCut

    Posted 02/06/14 02:52 AM

    Can you please take a look at the C++ reference documentation of this enumeration? It contains a few more details than the Java documentation.

    As for your questions:

    1. Correct.
    2. UseCutPurge will add the cut to the relaxation but allows CPLEX to remove it later on. UseCutFilter allows CPLEX to not even add that cut (if it deems the cut to be ineffective).
    3. Not exactly right. The cut management for user cuts added via addUserCut() is the same as UseCutPurge: The cut is added if it is violated but may be purged later on. These cuts are not filtered (while cuts found by CPLEX itself are filtered).

    #CPLEXOptimizers
    #DecisionOptimization


  • 5.  Re: Class IloCplex.UserCutCallback.addCut

    Posted 02/07/14 01:39 PM

    Originally posted by: SifengLin


    Thanks so much for your detailed information!


    #CPLEXOptimizers
    #DecisionOptimization