Reading a MIP Solver Log
Interpret the running output of a branch-and-bound MIP solver: identify the incumbent and best bound, track their convergence, compute the relative MIP gap, and determine which termination condition was triggered.
Tutorial
Anatomy of a MIP Solver Log
A MIP solver log is the stream of text a branch-and-bound solver prints while it runs. Each row summarizes the solver's state at one moment in the search. Although the exact column names differ between solvers (Gurobi, CPLEX, CBC, SCIP), every log reports the same five core quantities:
- Nodes — the number of subproblems examined so far.
- Incumbent — the objective value of the best integer-feasible solution found so far. We denote it .
- Best Bound — the tightest bound on the optimal objective coming from unsolved nodes. For a minimization problem this is a lower bound ; for a maximization problem it is an upper bound .
- Gap — a relative distance between the incumbent and the best bound.
- Time — elapsed wall-clock time.
A typical minimization log line looks like:
This line says: after exploring nodes, the best integer-feasible solution has objective the tightest lower bound across the remaining open nodes is and the relative gap between them is Because this is a minimization problem, the true optimum is sandwiched between the bound and the incumbent:
For a maximization problem the inequality flips: the incumbent is a lower bound on and the best bound is an upper bound, so