Branch-and-Bound Method



The basic idea of the branch-and-bound method is as follows:
When we solve a problem we make a series of decisions which lead to a solution. Each of these decisions is on the selection of a partial solution from a set of possible partial solutions such as assigning a value to a variable. As we make decisions, partial solutions become more and more complete and in the end they reach a complete solution. A brute force method would explore all those sequences of decisions until a solution is reached.
The branch-and-bound approach is a heuristic method that tries to reduce the number and length of those sequences.
For a minimization problem suppose that we have an upper bound for the optimal value of the objective function. This is usually the value of the objective function for the best feasible solution found so far.
Suppose also that for each of the available partial solutions we can find a lower bound for the value of the objective function. If the lower bound for a partial solution is greater than or equal to the current upper bound then that partial solution need not be considered for completion. If the lower bound is a feasible complete solution and it is smaller than the current upper bound, then a better upper bound has been found. So update the upper bound. This is the bounding part of branch-and-bound. If the lower bound is smaller than the current upper bound, that partial solution need to be examined for possible completion. This partial solution is partitioned into a number of more specific partial solutions such as selecting a variable and possible values for that variable. This is the branching part of branch-and-bound.
The general scheme of branch-and-bound method is given below.

Branch-and-Bound General Scheme for Minimization

Initialization: $Z_{u}$ := $\infty$.
                        Initially the entire solution set is the only remaining subset.
Branching:   Select one of the remaining subsets and partition it
                        into two or more subsets.
                        (Strategy of selection : best first, newest first etc.)
Bounding:     For each new subset obtained in Branching, find a lower bound (i.e. the best you may be able to get) denoted by
                        $Z_{L}$ for the value of the objective function.
Fathoming:   For each new subset, exclude it if
                        (1) $Z_{L} \geq Z_{U}$,
                        (2) the subset is found to contain no feasible solutions or
                        (3) the best feasible solution $Z_{L}$ in the subset has been found.
                        If $Z_{L} < Z_{U}$, then $Z_{U}$ := $Z_{L}$.
Stopping:       If no more remaining subsets, then stop.