Skip to content

Branch-and-Bound

Definition

Branch-and-bound solves an integer program by solving LP relaxations of subproblems, splitting subproblems when restricted variables are fractional, and discarding subproblems whose bounds cannot improve the best feasible integer solution. If xj=vx_j=v is fractional, branch into

xj≤⌊v⌋andxj≥⌈v⌉.x_j\le\lfloor v\rfloor\qquad\text{and}\qquad x_j\ge\lceil v\rceil.

For a binary variable these branches fix it to 0 and 1.


Interpretation

Branch-and-bound finds the best integer solution by divide and conquer. It splits the problem into subproblems whose integer solutions together are exactly those of the original, and uses LP relaxations, ordinary linear programs, to decide which subproblems are still worth exploring.

A search tree: the root LP relaxation with bound 13 splits on x2 into two branches; the left branch splits again on x1 into an integer node with value 11 and an infeasible pruned node.

The tree belongs to the model max⁡(3x1+2x2)\max(3x_1+2x_2) with 2x1+2x2≤9.52x_1+2x_2\le9.5 and x1≤3.5x_1\le3.5 from the pure integer program page. The root relaxation gives (3.5,1.25)(3.5,1.25) with bound 1313. Branching on x2x_2 gives nodes with bounds 12.512.5 and 12.2512.25. Under x2≤1x_2\le1, branching on x1x_1 gives the integer point (3,1)(3,1) with z=11z=11, the first incumbent, and an infeasible node, since x1≥4x_1\ge4 contradicts x1≤3.5x_1\le3.5. The node x2≥2x_2\ge2 has bound 12.25>1112.25>11, so it must still be explored; it contains no integer point better than 1111, so (3,1)(3,1) is optimal.

The branches xj≤⌊v⌋x_j\le\lfloor v\rfloor and xj≥⌈v⌉x_j\ge\lceil v\rceil, built with the floor and ceiling functions, together keep every point with integer xjx_j and remove only the strip ⌊v⌋<xj<⌈v⌉\lfloor v\rfloor<x_j<\lceil v\rceil, which contains the fractional optimum. So no integer solution is lost, and that fractional point cannot reappear. Each relaxation bounds every integer solution below its node, and the pruning rules close nodes that cannot help.

An integer solution found early is a candidate, not yet the answer: the search ends only when every open node is pruned. The order of exploring nodes changes the amount of work, not the optimum finally proved.


Key Results

  • Carry all ancestor branching constraints into each child.
  • Prune for infeasibility, an integral relaxed optimum, or an uncompetitive bound.
  • Continue until every remaining possibility is resolved or bounded by the incumbent.
  • Branching choices affect the work required but not the correctly proven optimum.

Examples

The figure branches on x2=1.25x_2=1.25, giving x2≤⌊1.25⌋=1x_2\le\lfloor1.25\rfloor=1 or x2≥⌈1.25⌉=2x_2\ge\lceil1.25\rceil=2.

  • A fractional value x1=3.3x_1=3.3 yields branches x1≤3x_1\le3 and x1≥4x_1\ge4.
  • The development-project model has optimum 3.4; recompute the LP relaxation at each node rather than copying intermediate values.

Prerequisites

Sources

Aliases: B&B, branch and bound

Last updated: 20 October 2026 03:02