A new constraint has just been added and the plan breaks it. The temptation is to start again, on the reasoning that the old tableau described the old problem. It described the old basis, and that basis is still a basis of the new problem — just not a feasible one. Restoring feasibility is cheaper than rebuilding, and this is the method that does it.
Definition · The dual simplex methodGiven a tableau whose objective row is non-negative (optimal) but whose right-hand column has a negative entry (infeasible), one dual pivot is: choose as the leaving row r the one with the most negative right-hand entry; choose as the entering column the j minimising |zⱼ| ÷ |a_rj| over the columns with a_rj < 0; and pivot on (r, j).
The dual simplex method repeats that until no right-hand entry is negative, at which point the tableau is both feasible and optimal, or until some leaving row has no negative entry at all, at which point the problem is infeasible.
The ratio is worth reading rather than memorising. The entering column has to have a negative entry in row r, because raising that variable must raise a negative right-hand side towards zero. Among those candidates, |zⱼ| ÷ |a_rj| is the amount of objective given up per unit of infeasibility removed, so choosing the smallest is choosing the cheapest way to become legal. That is why the objective-row entries appear in the numerator: this is a cost-per-unit comparison, not an amount.
And why it is the primal simplex on the dual. A negative right-hand entry in the primal tableau is a violated dual constraint; the row with the most negative entry is the dual's entering variable under the steepest rule; and the ratio test along that row is the dual's own leaving-variable ratio test. Everything happens in the primal tableau, so no second tableau has to be built, which is the practical point.
workshop optimum, then the rule x1 + x2 ≤ 5 added as row 4
append the row and clear the basic variables out of it:
R4 → R4 − R1 removes x1 R4 → R4 − R3 removes x2
x1 x2 s1 s2 s3 s4 | rhs
------------------------------------------------
1 0 0 −1/3 1/3 0 | 2 x1
0 0 1 1/3 −1/3 0 | 2 s1
0 1 0 1/2 0 0 | 6 x2
0 0 0 −1/6 −1/3 1 | −3 s4
------------------------------------------------
z 0 0 0 3/2 1 0 | 36
optimal z-row, and −3 in the right-hand column: exactly the state
PIVOT 1 leave row 4, whose rhs −3 is the most negative
ratios along row 4, over its negative entries only:
s2: |3/2| ÷ |−1/6| = 9
s3: |1| ÷ |−1/3| = 3 smallest, so s3 enters
z: 36 → 27
PIVOT 2 row 1 now has rhs −1, the most negative
ratios along row 1:
s2: |1| ÷ |−1/2| = 2 eligible, and smallest
s4: entry is +1, not negative — raising s4 cannot help
z: 27 → 25
STOP every right-hand entry ≥ 0. z* = 25 at (0, 5)
a fresh solve of the four-row problem gives 25 as well
Example · A rule the plan already obeysAdd x1 + x2 ≤ 10 instead. After the same two row operations the new row's right-hand entry is +1 rather than −3, so there is no negative entry anywhere and the method performs zero pivots. The tableau was already feasible and already optimal.
That is the cheapest possible outcome and it is the common one. The previous lesson's substitution test predicts it without doing even this much work: the plan reads 8 against a limit of 10.
Example · A cut on the three-activity programmeThe plan (2, 6, 0) earns 46 and uses 8 units in total. Add x1 + x2 + x3 ≤ 6, which it breaks by 2. After the row operations the new row reads 0, 0, −1, 0, −1, 0, 1 | −2, and the ratio test over its two negative entries gives |4| ÷ |−1| = 4 for x3 and |2| ÷ |−1| = 2 for s2.
So s2 enters, one pivot is enough, and the answer is 42 at (4, 2, 0). One pivot to re-optimise a programme that a fresh solve would have restarted from an initial basis.
The two ways it stops
It stops successfully when no right-hand entry is negative: the tableau is feasible, the objective row was never allowed to go negative, so the basis is optimal and the number is real. It stops unsuccessfully when the chosen leaving row has no negative entry at all. That row then asserts that a non-negative combination of non-negative variables equals a negative number, which nothing satisfies, and the new problem is infeasible. Adding x1 + x2 ≥ 9 to the workshop does exactly that: the region's largest total is 8, and the lab reports the rule as unsatisfiable rather than pivoting for ever.
One habit is worth building here and the lab's hint asks for it directly: before moving the slider, try to say which plan the method will land on. You will usually be wrong, and being wrong on purpose is how the ratio test along the objective row stops being a rule to apply and starts being a reason. On the workshop cut, most readers predict (2, 3) or (4, 1) — plans that obey the new rule and look like small adjustments — and the answer is (0, 5), which abandons the first product altogether.
This method is also the reason a search tree is affordable. Integer Programming re-solves every branch-and-bound child exactly this way, starting from its parent's final tableau with one bound added, which is one cut and a handful of dual pivots rather than a fresh solve per node. A tree with hundreds of nodes costs what a few dozen solves would, and this lesson is where that becomes believable rather than asserted.