Branch-and-Price: Column Generation Inside Branch and Bound

Combines column generation with branch-and-bound: solve LP relaxations at every node via Dantzig–Wolfe column generation, branch on original variables (not master variables), embed branching constraints in the pricing subproblem, and prune by bound or integrality.

Step 1 of 157%

Tutorial

Branch-and-Price and the Implied Original Solution

In branch-and-price, every node of a branch-and-bound tree has its LP relaxation solved by column generation on a Dantzig–Wolfe master. After CG converges at a node, the master LP solution λ\boldsymbol{\lambda}^* defines an implied solution in the original variables:

x=jλjxj,\mathbf{x}^* = \sum\limits_j \lambda^*_j \mathbf{x}^j,

where xj\mathbf{x}^j is the integer pattern (extreme point of the subproblem polytope) attached to master variable λj\lambda_j. If x\mathbf{x}^* is integer, the node is solved. Otherwise we must branch to drive the relaxation toward integrality.

For example, suppose CG terminates at a node with λ1=0.4,\lambda_1^* = 0.4, λ2=0.6\lambda_2^* = 0.6 (others zero) and patterns

x1=[101],x2=[011].\mathbf{x}^1 = \begin{bmatrix} 1 \\ 0 \\ 1 \end{bmatrix}, \qquad \mathbf{x}^2 = \begin{bmatrix} 0 \\ 1 \\ 1 \end{bmatrix}.

The implied original solution is

x=0.4[101]+0.6[011]=[0.40.61],\mathbf{x}^* = 0.4 \begin{bmatrix} 1 \\ 0 \\ 1 \end{bmatrix} + 0.6 \begin{bmatrix} 0 \\ 1 \\ 1 \end{bmatrix} = \begin{bmatrix} 0.4 \\ 0.6 \\ 1 \end{bmatrix},

which is fractional in x1x_1 and x2x_2. The node is not yet integer-feasible, so branching is required.

navigate · Enter open · Esc close · ⌘K/Ctrl K toggle