Branch and Bound on Small Mixed-Integer Programs

Extends branch and bound from binary integer programs to mixed-integer programs (MIPs), where integer-required variables may take any nonnegative integer value and other variables may be continuous. Covers branching with floor/ceil constraints, pruning by infeasibility, integrality, and bound, and tracing the full algorithm on small instances.

Step 1 of 157%

Tutorial

Introduction

A mixed-integer program (MIP) is an optimization problem in which some variables must take integer values while others may be continuous. Unlike a binary IP, where integer variables are restricted to {0,1}\{0,1\}, the integer variables in a general MIP can take any nonnegative integer value: 0,1,2,3,0, 1, 2, 3, \ldots

To solve a MIP via branch and bound, we first solve its LP relaxation — the LP obtained by dropping every integrality constraint. If the LP optimum is already integer-feasible in every integer-required variable, we are done. Otherwise, we pick an integer-required variable xjx_j whose LP value vv is fractional and split the problem into two subproblems:

Left child: original LP +(xjv)\text{Left child: original LP } + \, (x_j \leq \lfloor v \rfloor) Right child: original LP +(xjv)\text{Right child: original LP } + \, (x_j \geq \lceil v \rceil)

The interval v<xj<v\lfloor v \rfloor < x_j < \lceil v \rceil is forbidden in both children, yet every integer-feasible point of the original MIP still lies in one of them.

For example, if the LP relaxation gives x1=2.7x_1^* = 2.7 for an integer-required variable, then 2.7=2\lfloor 2.7 \rfloor = 2 and 2.7=3\lceil 2.7 \rceil = 3, so the children add x12x_1 \leq 2 and x13x_1 \geq 3, respectively.

When several integer-required variables are fractional in the LP, a standard rule is to branch on the most fractional one — the variable whose fractional part is closest to 0.50.5.

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