Standard Form

Work in progress. This note is still being written and incomplete.

The graphical method only works for 2 (or 3) decision variables. An algebraic method is needed beyond that, and it starts by rewriting the linear program in a fixed form.

Given an LP in nn variables and mm constraints, with xRnx \in \mathbb{R}^n, cRnc \in \mathbb{R}^n, ARm×nA \in \mathbb{R}^{m \times n}, bRmb \in \mathbb{R}^m, standard form requires:

  • Maximization
    Replace mincTx\min c^T x by max(cTx)\max (-c^T x).
  • Equality constraints
    Convert every inequality with a slack, surplus, or artificial variable, and scale each row so b0b \ge 0.
  • Non-negative variables
    x0x \ge 0.
maximizez=cTxs.t.Ax=bx0,b0\begin{aligned} \text{maximize} \quad & z = c^T x \\ \text{s.t.} \quad & Ax = b \\ & x \ge 0, \quad b \ge 0 \end{aligned}

where nn counts the original variables plus the added ones.

Variable

Assume AA has full row rank mm with nmn \ge m. Pick mm linearly independent columns forming an invertible basis matrix BRm×mB \in \mathbb{R}^{m \times m}; the remaining columns form NN. Partition x=(xB,xN)x = (x_B, x_N) accordingly.

Basic Variable

A component of xBx_B. Setting xN=0x_N = 0 gives xB=B1bx_B = B^{-1} b. The solution is a basic feasible solution when B1b0B^{-1} b \ge 0.

Non-Basic Variable

A component of xNx_N, fixed at 00 while xBx_B is solved for.

Slack Variable

For a constraint aiTxbia_i^T x \le b_i, add si0s_i \ge 0 to get aiTx+si=bia_i^T x + s_i = b_i. Absorbs unused capacity.

Surplus Variable

For a constraint aiTxbia_i^T x \ge b_i, subtract si0s_i \ge 0 to get aiTxsi=bia_i^T x - s_i = b_i. Absorbs excess over the minimum.

Artificial Variable

A variable ai0a_i \ge 0 added to row ii with coefficient +1+1 purely to supply a starting basic variable, with no meaning in the original problem.

When It Is Required

After the RHS of every constraint is made non-negative (multiply the row by 1-1 if needed), each constraint must contribute one variable that appears with coefficient +1+1 in that row and 00 in all others (a unit column). That variable becomes basic in the starting solution.

  • \le constraint
    The slack variable is already such a unit column. No artificial variable.
  • \ge constraint
    The surplus variable has coefficient 1-1, not a unit column. Add an artificial variable.
  • == constraint
    No slack or surplus at all. Add an artificial variable.

So the number of artificial variables equals the number of \ge constraints plus the number of == constraints (after fixing signs).

Handling Them

A valid final solution must have every artificial variable equal to 00 (non-basic, or basic at value 00). If one stays positive, the original problem is infeasible. 2 methods drive them out:

  • Big-M method
  • Two-phase method

Worked Example

Minimize z=2x1+3x2z = 2x_1 + 3x_2 subject to

x1+x24(1)x1+3x26(2)x1x2=1(3)x1,x20\begin{aligned} x_1 + x_2 &\le 4 && \quad (1) \\ x_1 + 3x_2 &\ge 6 && \quad (2) \\ x_1 - x_2 &= 1 && \quad (3) \\ x_1, x_2 &\ge 0 \end{aligned}

Convert each requirement:

  • Objective
    Minimizing zz becomes maximizing z=2x13x2z' = -2x_1 - 3x_2.
  • (1)(1) is \le: add slack s1s_1.
  • (2)(2) is \ge: subtract surplus s2s_2, then add artificial a1a_1.
  • (3)(3) is ==: add artificial a2a_2.

Standard form:

maximize z=2x13x2\text{maximize } z' = -2x_1 - 3x_2 x1+x2+s1=4(1)x1+3x2s2+a1=6(2)x1x2+a2=1(3)x1,x2,s1,s2,a1,a20\begin{aligned} x_1 + x_2 + s_1 &= 4 && \quad (1') \\ x_1 + 3x_2 - s_2 + a_1 &= 6 && \quad (2') \\ x_1 - x_2 + a_2 &= 1 && \quad (3') \\ x_1, x_2, s_1, s_2, a_1, a_2 &\ge 0 \end{aligned}

With x=(x1,x2,s1,s2,a1,a2)Tx = (x_1, x_2, s_1, s_2, a_1, a_2)^T:

A=[111000130110110001],b=[461],c=[230000]TA = \begin{bmatrix} 1 & 1 & 1 & 0 & 0 & 0 \\ 1 & 3 & 0 & -1 & 1 & 0 \\ 1 & -1 & 0 & 0 & 0 & 1 \end{bmatrix}, \quad b = \begin{bmatrix} 4 \\ 6 \\ 1 \end{bmatrix}, \quad c = \begin{bmatrix} -2 & -3 & 0 & 0 & 0 & 0 \end{bmatrix}^T

Starting basis BB = columns of s1,a1,a2s_1, a_1, a_2 = I3I_3, so xB=B1b=(s1,a1,a2)T=(4,6,1)T0x_B = B^{-1} b = (s_1, a_1, a_2)^T = (4, 6, 1)^T \ge 0 and xN=(x1,x2,s2)T=0x_N = (x_1, x_2, s_2)^T = 0.

Written by September 13, 2026 4 min read
Was this helpful?