Decision Optimization

Decision Optimization

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


#Analytics
#DecisionOptimization
#DecisionOptimization
 View Only
  • 1.  no call to the UserCutCallback

    Posted 08/29/14 09:25 PM

    Originally posted by: Falcon_G


    Hi everybody

    I am implementing a branch and cut and for some reason I wish to set an optimality tolerance of 0.005.

    Control comes in the UserCutCallback, !isAfterCutLoop() becomes True and returns and never comes back. Therefore I cannot separate any cut and my final solution is infeasible.

    If I do not see optimality tolerance everything is fine.

    Of course it is possible to abort the solution method from inside the callback once the gap is below 0.5 percent but is that really the only way?


    #CPLEXOptimizers
    #DecisionOptimization


  • 2.  Re: no call to the UserCutCallback

    Posted 08/30/14 05:43 PM

    Shahin,

    I am unable to parse your second paragraph. Perhaps you can clarify.

    Control comes in the UserCutCallback,

    Meaning CPLEX calls the UCC at a particular node?

    !isAfterCutLoop() becomes True

    You call isAfterCutLoop() inside the UCC and it returns false?

    and returns

    Who returns, the UCC? Does it add a cut first?

    and never comes back.

    Meaning the UCC is not called again at that node, or that it is never called again at any node?

    Therefore I cannot separate any cut and my final solution is infeasible.

    How could adding user cuts prevent an "infeasible" solution for being chosen? By fiat, user cuts cannot alter the integer hull of the problem; they can only remove part of the "fat" around the integer hull (the non-integer points that are in the LP hull but not the integer hull). If you are trying to block solutions that are feasible in the model you originally handed to CPLEX, you should be using lazy constraints, not user cuts. This, however, would seem to have nothing much to do with whether you are setting a non-default optimality tolerance.

    Paul

     


    #CPLEXOptimizers
    #DecisionOptimization


  • 3.  Re: no call to the UserCutCallback

    Posted 08/30/14 06:26 PM

    Originally posted by: Falcon_G


    Thanks Paul.

    >> You call isAfterCutLoop() inside the UCC and it returns false?

    Yes, once it is called and returned due to !isAfterCutLoop(), then the callback is not called at any other node.

    Well, I have just noticed that the question was a stupid one. :(

     


    #CPLEXOptimizers
    #DecisionOptimization