Decision Optimization

Decision Optimization

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


#Analytics
#DecisionOptimization
#DecisionOptimization
 View Only

Properly understanding the CPLEX log: best node?

  • 1.  Properly understanding the CPLEX log: best node?

    Posted 10/26/16 12:08 AM

    Originally posted by: excalibur1491


    Hi all,

     

    I have a question about what CPLEX tells me through the log. I have read this, and I have one question.

    It says that the column Best Node tells me the best objective value achievable. Therefore, I understand it's the linear relaxation lower bound. Is this correct?

     

    If so, what I want to know is: if I give CPLEX a problem with some real variable, some Binaries, a budget on how many binaries can be turned on and Indicator constraints for those binaries, what is really the value of the linear relaxation? Is it trying to assign a real value to the binaries like 0.14 for example? If that is the case, and a binary is given 0.14, would the indicators for that binary trigger?

     

    This confuses me, because I have a model (minimizing) where I know that no solution with fewer turned-on binaries is better than a solution with at least one more binary turned on. But:

    -if I remove the budget constraint and turn on all the binaries, I get an objective of 1.51.

    -if I let CPLEX try to solve the problem (binaries unfixed, with budget), the best node I get is ~0.36. But clearly, turning on as many binaries as the budget allows is going to yield something >= 1.51.

    So why is this Best Node worse than something that can be easily found to be the lower bound? What is CPLEX actually doing?

     

    For the record, you can find the models attached. I use the mipex2 example given with CPLEX (also attached, for Python)

     

    Thanks for the clarifications.

     

    ---

    EDIT:

    I just made a much smaller instance. Without budget and all binaries fixed I get 1.2 as the objective. The optimal (proven) solution with the budget is 49.1, but when I look at the log I only see values below 1.2 in the Best Node column. I also attached the files (named *_small.lp). Clearly, any assignment respecting the budget is above 49.1, as CPLEX proved optimality. My assumption is that the LP relaxation would turn on a bunch of binaries, but by turning on just enough that the all budget is used, you would get a solution of 1.2. So why is the Best node < 1.2?

    Tried aggregator 1 time.
    Reduced MIP has 51 rows, 83 columns, and 177 nonzeros.
    Reduced MIP has 12 binaries, 0 generals, 0 SOSs, and 42 indicators.
    Probing fixed 0 vars, tightened 21 bounds.
    Probing time =    0.00 sec.
    Tried aggregator 1 time.
    Presolve time =    0.01 sec.
    Probing time =    0.00 sec.
    MIP emphasis: balance optimality and feasibility.
    MIP search method: dynamic search.
    Parallel mode: deterministic, using up to 8 threads.
    Root relaxation solution time =    0.00 sec.
    
            Nodes                                         Cuts/
       Node  Left     Objective  IInf  Best Integer    Best Bound    ItCnt     Gap
    
          0     0        0.0000    12                      0.0000        3         
    *     0+    0                          120.8333        0.0000        3  100.00%
          0     0        0.0000    12      120.8333   Impl Bds: 8        8  100.00%
    *     0+    0                          103.7043        0.0000        8  100.00%
          0     0        0.0000    12      103.7043       Cuts: 5       12  100.00%
    *     0+    0                           51.8074        0.0000       12  100.00%
          0     2        0.0000    12       51.8074        0.0000       12  100.00%
    Elapsed real time =   0.06 sec. (tree size =  0.01 MB, solutions = 3)
    *    27    21      integral     0       49.1559        0.9901      145   97.99%
    
    Implied bound cuts applied:  6
    
    Root node processing (before b&c):
      Real time             =    0.04
    Parallel b&c, 8 threads:
      Real time             =    0.11
      Sync time (average)   =    0.00
      Wait time (average)   =    0.00
                              -------
    Total (root+branch&cut) =    0.15 sec.
    Time elapsed 0.162537097931
    MIP_optimal
    Solution status =  101 : MIP_optimal
    Objective value =  49.155906651
    
    Column v0: Value =       49.15590665
    Column i_1_0: Value =      0.4915590665
    Column i_2_0: Value =       49.15590665
    Column i_1_1: Value =      0.2108124547
    Column i_2_3: Value =       48.43665326
    Column i_3_1: Value =      0.2108124547
    Column i_4_1: Value =      0.2108124547
    Column i_3_2: Value =      0.1335818869
    Column i_4_4: Value =    0.007296410742
    Column i_5_2: Value =      0.1335818869
    

    And with all fixed:

    Tried aggregator 2 times.
    MIP Presolve eliminated 1 rows and 13 columns.
    Aggregator did 28 substitutions.
    All rows and columns eliminated.
    Presolve time =    0.00 sec.
    Time elapsed 0.00108122825623
    MIP_optimal
    Solution status =  101 : MIP_optimal
    Objective value =  1.20833333333
    
    Column v0: Value =       1.208333333
    Column i_1_0: Value =       1.208333333
    Column i_2_0: Value =       1.208333333
    Column i_1_1: Value =              0.75
    Column i_2_3: Value =      0.6666666667
    Column i_3_1: Value =              0.75
    Column i_4_1: Value =              0.75
    Column i_3_2: Value =      0.5833333333
    Column i_4_4: Value =      0.4583333333
    Column i_5_2: Value =      0.5833333333
    

     

     

     

     


    #CPLEXOptimizers
    #DecisionOptimization