Finding an Initial BFS: The Two-Phase Method

Use artificial variables and an auxiliary objective (Phase 1) to construct an initial basic feasible solution for an LP whose constraints include equalities or \ge inequalities, then transition to Phase 2 with the original objective.

Step 1 of 157%

Tutorial

Setting Up Phase 1

The tableau simplex method needs an initial basic feasible solution (BFS) whose basic columns form an identity matrix. When every constraint is \le with a nonnegative right-hand side, the slack variables provide this identity automatically. But many LPs include \ge or == constraints, for which no obvious starting basis exists.

The two-phase method handles this by temporarily adding artificial variables to manufacture an identity basis, then driving them out in a first auxiliary LP called Phase 1.

The setup rules (assuming each constraint's RHS satisfies bi0b_i \ge 0) are:

  • A bi\le b_i constraint gets a slack sis_i added: ()+si=bi.(\,\cdots\,) + s_i = b_i.
  • A bi\ge b_i constraint gets a surplus sis_i subtracted and an artificial aia_i added: ()si+ai=bi.(\,\cdots\,) - s_i + a_i = b_i.
  • A =bi= b_i constraint gets only an artificial aia_i added: ()+ai=bi.(\,\cdots\,) + a_i = b_i.

If any RHS is negative, multiply that row by 1-1 first so that bi0b_i \ge 0.

The Phase 1 objective is to minimize the sum of artificial variables:

min w=iai.\min\ w = \sum_i a_i.

The initial Phase 1 BFS sets each artificial equal to its row's RHS, each slack equal to its RHS, and every other variable to 00. The artificials (and any usable slacks) form an identity, so we can begin pivoting immediately.

For example, consider

max z=2x1+3x2s.t. x1+x262x1+x24x1,x20.\begin{aligned}\max\ z &= 2x_1 + 3x_2 \\ \text{s.t.}\ x_1 + x_2 &\le 6 \\ 2x_1 + x_2 &\ge 4 \\ x_1, x_2 &\ge 0.\end{aligned}

The Phase 1 standard form is

x1+x2+s1=6,2x1+x2s2+a1=4,\begin{aligned} x_1 + x_2 + s_1 &= 6, \\ 2x_1 + x_2 - s_2 + a_1 &= 4, \end{aligned}

with minw=a1\min w = a_1. The initial BFS is s1=6, a1=4s_1 = 6,\ a_1 = 4, all others 00.

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