Decision Optimization

Decision Optimization

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


#Analytics
#DecisionOptimization
#DecisionOptimization
 View Only
  • 1.  solveFixed() does not consider cuts

    Posted 03/17/10 12:19 AM

    Originally posted by: claud10


    Hi everyone,

    After solving a MILP by means of a branch-and-bound algorithm I need to get dual information about the optimal solution. I tried to use the IloCplex::solveFixed() function but I realized that it won't consider the cuts added by either the IloCplex::addCuts function or the CutCallback class, basically obtaining a bound worse than expected.

    I wonder whether it exists an efficient way to solve this issue. Thank you very much in advance

    Claudio

    PS: I'm on CPLEX 10.0 using the Concert Technology interface for C++. At my research center we also have 11.0 available.
    #CPLEXOptimizers
    #DecisionOptimization


  • 2.  Re: solveFixed() does not consider cuts

    Posted 03/17/10 05:29 AM

    Originally posted by: SystemAdmin


    If I understand you correctly, what you want to have is to get the LP relaxation of your problem, including all the cutting planes, then fix the integer variables to the value they have in the MIP solution, solve this LP and query the duals, right?

    If you use Concert, this is not easy to do, because in Concert you do not have access to the presolved model (on which the LP relaxation is defined and in which the cuts live).

    It would be possible in C or Python (available since CPLEX 12).

    But before you try to implement something, you should take a step back and check whether this is really what you want. Your comment about the cuts and the worse bound indicates that something is wrong. Namely, if all integer variables are fixed to their MILP solution values, then the objective value of the LP should be identical to the MILP objective value, independent of whether the cuts are in the model or not. For integral solutions, any cutting plane must be redundant. Otherwise, it cuts off an integral solution and is invalid.

    Why do you want the cuts to be included? Do you want to check something like the effectiveness of your cuts? Then, this approach will not succeed because, as I said, the cuts should be redundant in the fixed model. Most probable, the cuts will introduce degeneracy (because the MILP solution will be included in the hyperplanes defined by some of the cuts). Hence, it is just luck whether you will get an optimal basis with non-zero duals for a cut or not.

    Tobias
    #CPLEXOptimizers
    #DecisionOptimization


  • 3.  Re: solveFixed() does not consider cuts

    Posted 03/17/10 01:19 PM

    Originally posted by: claud10


    Hi Tobias,

    You're right. When taking the cuts off it wouldn't change anything if the MILP solution is optimal. However, what I am actually considering is a relaxation of the original IP that only consider some of these variables to be integer while the remaining are set to be continuous. So, an integer solution of this relaxed problem is not really an integer solution for the whole problem and thus when re-optimized it will produce a solution of worse bound.

    I found a way to solve my problem by storing the cuts in a cut pool during the B&C and then, when solving the linear relaxation of the relaxed problem, I manually add these cuts to the extracted model using the function IloModel::add(). Then you reoptimize and voilà. The problem is... you lose the previous basis of the model and the presolve done before as I guess the solveFixed() function takes into account. That's why I would like to take advantage of it.

    Thannks for your answer!

    Claudio
    #CPLEXOptimizers
    #DecisionOptimization