Originally posted by: rocarvaj
Hello,
I'm using an information callback to log information such as bounds, gap, nodes, etc. When using the CPXgetcallbackinfo function (with CPX_CALLBACK_INFO_BEST_REMAINING) to get the best dual bound available I noticed that in one case (details below), the bound obtained will deteriorate for a couple of calls to the info callback and then go back to normal. It turns out that this happened when CPLEX repeated presolve.
Is this behavior OK? According to the documentation this function should return the best known bound.
Thanks in advance!
Details:
- Problem: satellites-25, from MIPLIB
- CPLEX 12.7.1
- Number of threads set to 32
- Random seed is set to 17567
The following is part of the CPLEX output:
Tried aggregator 2 times.
MIP Presolve eliminated 930 rows and 846 columns.
MIP Presolve modified 3354 coefficients.
Aggregator did 408 substitutions.
Reduced MIP has 4658 rows, 7759 columns, and 50343 nonzeros.
Reduced MIP has 7716 binaries, 0 generals, 0 SOSs, and 0 indicators.
Presolve time = 0.18 sec. (49.97 ticks)
Found incumbent of value 78.000000 after 0.33 sec. (93.37 ticks)
Probing fixed 542 vars, tightened 0 bounds.
Probing time = 1.28 sec. (354.19 ticks)
Tried aggregator 2 times.
MIP Presolve eliminated 440 rows and 704 columns.
MIP Presolve modified 430 coefficients.
Aggregator did 22 substitutions.
Reduced MIP has 4196 rows, 7033 columns, and 45394 nonzeros.
Reduced MIP has 6990 binaries, 0 generals, 0 SOSs, and 0 indicators.
Presolve time = 0.19 sec. (55.15 ticks)
Probing time = 0.06 sec. (9.95 ticks)
Clique table members: 27321.
MIP emphasis: balance optimality and feasibility.
MIP search method: traditional branch-and-cut.
Parallel mode: deterministic, using up to 32 threads.
Root relaxation solution time = 2.99 sec. (899.46 ticks)
Nodes Cuts/
Node Left Objective IInf Best Integer Best Bound ItCnt Gap
* 0+ 0 78.0000 -224.0000 387.18%
0 0 -20.0000 959 78.0000 -20.0000 20 125.64%
* 0+ 0 37.0000 -20.0000 154.05%
0 0 -20.0000 641 37.0000 Cuts: 16 3040 154.05%
* 0+ 0 31.0000 -20.0000 164.52%
0 0 -20.0000 649 31.0000 Cuts: 47 5309 164.52%
* 0+ 0 -3.0000 -20.0000 566.67%
0 0 -20.0000 562 -3.0000 Cuts: 11 6293 566.67%
0 0 -20.0000 713 -3.0000 Cuts: 80 8503 566.67%
Repeating presolve.
Tried aggregator 4 times.
MIP Presolve eliminated 943 rows and 2164 columns.
MIP Presolve modified 698 coefficients.
Aggregator did 597 substitutions.
Reduced MIP has 2656 rows, 4272 columns, and 20972 nonzeros.
Reduced MIP has 4229 binaries, 0 generals, 0 SOSs, and 0 indicators.
Presolve time = 0.22 sec. (69.49 ticks)
Probing fixed 258 vars, tightened 0 bounds.
Probing time = 0.39 sec. (99.02 ticks)
Tried aggregator 2 times.
MIP Presolve eliminated 99 rows and 273 columns.
MIP Presolve modified 138 coefficients.
Aggregator did 72 substitutions.
Reduced MIP has 2483 rows, 3927 columns, and 19543 nonzeros.
Reduced MIP has 3884 binaries, 0 generals, 0 SOSs, and 0 indicators.
Presolve time = 0.07 sec. (22.52 ticks)
Probing time = 0.04 sec. (6.84 ticks)
Tried aggregator 2 times.
MIP Presolve eliminated 14 rows and 6 columns.
MIP Presolve modified 94 coefficients.
Aggregator did 4 substitutions.
Reduced MIP has 2465 rows, 3917 columns, and 19461 nonzeros.
Reduced MIP has 3884 binaries, 0 generals, 0 SOSs, and 0 indicators.
Presolve time = 0.04 sec. (13.84 ticks)
Represolve time = 0.91 sec. (242.22 ticks)
Probing time = 0.03 sec. (6.90 ticks)
Clique table members: 20554.
MIP emphasis: balance optimality and feasibility.
MIP search method: traditional branch-and-cut.
Parallel mode: deterministic, using up to 32 threads.
Root relaxation solution time = 0.57 sec. (194.25 ticks)
Nodes Cuts/
Node Left Objective IInf Best Integer Best Bound ItCnt Gap
* 0+ 0 -3.0000 -20.0000 566.67%
0 0 -20.0000 528 -3.0000 -20.0000 10236 566.67%
After the "Repeating presolve" message the CPXgetcallbackinfo function call (with CPX_CALLBACK_INFO_BEST_REMAINING) inside the info callback returns a bound of -224 and then -217. Then it goes back to -20, as seen in the last two lines.
#CPLEXOptimizers#DecisionOptimization