In many applications, the bounding operation is accomplished using the tools of linear programming (LP), a technique first described in full generality by Hoffman and Padberg . This general class of algorithms is known as LP-based branch and bound. Typically, the integrality constraints of an integer programming formulation of the problem are relaxed to obtain a LP relaxation, which is then solved to obtain a lower bound for the problem. In , Padberg and Rinaldi improved on this basic idea by describing a method of using globally valid inequalities (i.e., inequalities valid for the convex hull of integer solutions) to strengthen the LP relaxation. They called this technique branch and cut. Since then, many implementations (including ours) have been fashioned around the framework they described for solving the Traveling Salesman Problem.
with ground set and feasible set be given along with a cost function . The incidence vectors corresponding to the members of are sometimes specified as the the set of all incidence vectors obeying a (relatively) small set of inequalities. These inequalities are typically the ones used in the initial LP relaxation. Now let be the convex hull of incidence vectors of members of . Then we know by Weyl's Theorem (see ) that there exists a finite set of inequalities valid for such that
Once we have failed to either prune the current subproblem or separate the current fractional solution from , we are forced to branch. The branching operation is accomplished by specifying a set of hyperplanes which divide the current subproblem in such a way that the current solution is not feasible for the LP relaxation of any of the new subproblems. For example, in a combinatorial optimization problem, branching could be accomplished simply by fixing a variable whose current value is fractional to 0 in one branch and 1 in the other. The procedure is described more formally in Figure 4.2. Figure 4.3 gives a high level description of the generic branch and cut algorithm.
In the remainder of the manual, we often use the term search tree. This term derives from the common representation of the list of subproblems as the nodes of a graph in which each subproblem is connected only to its parent and its children. Storing the subproblems in such a form is an important aspect of our global data structures. Since the subproblems correspond to the nodes of this graph, they are sometimes be referred to as nodes in the search tree or simply as nodes. The root node or root of the tree is the node representing the initial subproblem.