Decision Optimization

Decision Optimization

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


#Analytics
#DecisionOptimization
#DecisionOptimization
 View Only
  • 1.  Separation at fractional nodes

    Posted 05/29/13 03:03 PM

    Originally posted by: Trino


    Hi, In the model I'm solving in Cplex using concert c++ (cplex 12.5) there are a set of exponential constraints, so I'm using a branch&cut with the formulation relaxed for this exponential set.

    For integer nodes I use the LazyConstraintCallback and everything works just fine. For fractional nodes, I was using the UserCutCallback, however I'm having some problems when adding cuts via the user cut callback. For example, for one instance cplex throws an error saying there are no solutions.

    I've taken all the cuts added for this instance, analysed them manually and they all seemed ok, I mean, they didn't cut the optimal solution. To test further I loaded them into the model at the beggining and solved without the B&C, just to check if the same error would be thrown, but cplex found a solution, which means that the cuts are just fine.

    I was checking the documentation for the UserCutCallback (here) and I noticed the following part:

    The constraints added in an instance of UserCutCallbackI must be real cuts in the sense that omitting them does not affect the feasible region of the model under consideration.

    What happens is that, since I'm solving a relaxed version of my formulation, the separation procedure at fractional nodes not only cut the current node, but also can cut integer points, which apparently is not ok for the UserCutCallback. I though that by disabling the options IloCplex::Reduce and IloCplex::PreLinear would be fine to add this kind of cuts in such callback.

    Since the LazyConstraintCallback is only called for integer solution, how can I separed these constraints in fractional nodes?

     

    Thanks.


    #CPLEXOptimizers
    #DecisionOptimization


  • 2.  Re: Separation at fractional nodes

    Posted 06/03/13 04:53 AM

    Originally posted by: TobiasAchterberg


    In a branch-and-cut setting (where you add constraints dynamically that can cut off integer solutions that are feasible for the initial constraints) you have to add a lazy constraint callback. This will be applied on integral solutions and suffices to get a correct answer to your problem. Optionally, you can also add a cut callback (in addition!) in the hope to improve the performance of your algorithm. The cut callback will be applied to fractional solutions.

    Note that you can basically use the same separation algorithm for both callbacks (if your lazy constraint separation does not rely on the integrality of the solution). So I would put the bulk of your separation code into some function and then call this function from both the cut and the lazy constraint callback.

     

    Tobias

     


    #CPLEXOptimizers
    #DecisionOptimization