Decision Optimization

Decision Optimization

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


#Analytics
#DecisionOptimization
#DecisionOptimization
 View Only
  • 1.  Reject optimal found and continue to solve

    Posted 01/27/14 04:00 PM

    Originally posted by: Trino


    Hi all, I have a formulation that yield at the worst case a lower bound for my problem. This formulation is much faster than the other exact formulations and I'm using a branch&cut to solve it, that implements separation procedures in the lazy callback and user cut callback.

    Since in several cases this formulation can give me the optimal solution for my actual problem the idea is: solve the formulation, if the optimal solution found is also feasible for my problem we're done, otherwise I need to add a incumbent callback (that is able to reject valid solutions for the formulation but infeasible for my problem), and continue to solve.

    The only problem here is that I can't find a way to, after solving, add a cut or instruct cplex to reject the optimal found and continue to solve again. I tried to add a IloOr constraint in the form x[0][1] != <value[0][1]> || x[0][2] != <value[0][2]>  || ... x[n][n] != <value[n][n]> but I get an error that says the cut is not valid.

    Does someone knows a way to do that?

     

    Thank you,

    Bruno.


    #CPLEXOptimizers
    #DecisionOptimization


  • 2.  Re: Reject optimal found and continue to solve

    Posted 01/29/14 04:26 AM

    A cut or lazy constraint must be a linear constraint, so logical constraints are not possible here.

    If your variables are all binary the you could instead use something like this (y is the solution you want to cut off):

       sum(i : y[i] == 1) (1-x[i]) + sum(i : y[i] == 0) x[i] >= 1

    This requires at least one variable to be different from y.


    #CPLEXOptimizers
    #DecisionOptimization


  • 3.  Re: Reject optimal found and continue to solve

    Posted 01/29/14 09:00 AM

    Originally posted by: Trino


    Hi Daniel, thank you for the answer, but unfortunately my variables are not binary, they can be equal to 0, 1 or 2, so this type of cut would not work.

    Do you know of other way?

    Bruno.


    #CPLEXOptimizers
    #DecisionOptimization


  • 4.  Re: Reject optimal found and continue to solve

    Posted 02/18/14 01:29 AM

    I don't know of a good way to do this then. I can see the following two options but both are rather impractical:

    1. Replace your integer variables by a sum of binaries. If the range (upper bound - lower bound) of your interger variables is not too large this may work well.
    2. Transform your logical constraints into linear constraint manually and then add those as lazy constraints. Unfortunately, this transformation usually involves creation of new binary variables. Since you cannot create new variables in a callback you would have to create a bunch of auxiliary binary variables in the original models that are not used in any constraint. In the lazy constraint callback you could then start using those variables to transform the logical constraints into linear ones. This of course requires that you have a way to predict how many of those additional variables you will need.

    #CPLEXOptimizers
    #DecisionOptimization