Module 5 of 6 · Lesson 4 of 4
The Revised Simplex Method
The same algorithm organised around the basis inverse, and what that changes about cost and about what a solver can do.
What you will be able to do
Given a standard-form minimisation and a basis, the learner can compute the basis inverse and basic values, form the multipliers, price nonbasic columns to find an entering variable, compute the direction and step, report the updated basis, and account for which quantities the method stores against those a full tableau would carry.
Orientation
A tableau on a program with 8 constraints and 500 variables updates roughly 4,500 entries per pivot. Most of those columns are never priced, and their updated values are discarded.
The revised method keeps the
What this unit adds is the accounting: which quantities are worth storing, which are cheap to recompute, and what is lost when the state no longer fits on a page.
Procedure
One iteration, in the order the quantities are needed
The order matters: each step uses the previous one's result, and stopping early is possible at two points.
| Step | Compute | Size | Cost |
|---|---|---|---|
| 1 | one matrix-vector product | ||
| 2 | one vector-matrix product, once per iteration | ||
| 3 | scalar, per column | one dot product per column priced | |
| 4 | one matrix-vector product, entering column only | ||
| 5 | scalar | one scan | |
| 6 | update basis and |
Step 2 is the one that makes the method work. Forming
Two places the iteration stops.
At step 3, if every nonbasic column prices nonnegative, the basis is optimal. Under a first-negative rule pricing halts at the first negative column and the remaining columns are never examined; under a most-negative rule every column is priced before choosing. The first is cheaper per iteration and may take more iterations.
At step 5, if no component of
Updating the inverse. The new basis differs in one column, so
where
On carrying an explicit inverse. Real implementations do not. They keep an LU factorisation of
Worked example
Two iterations, with every quantity named
Start from
---
Iteration 1.
Basic values.
Multipliers.
Pricing.
Direction.
Ratio test. Both components positive:
New basis.
---
Iteration 2.
Inverse.
checked by
Basic values.
Multipliers.
Pricing.
Direction.
Ratio test.
New basis.
---
Iteration 3: the optimality check.
Pricing the two nonbasic columns:
Both nonnegative, so the basis is optimal:
Verification against the original program.
What was never computed. At no point was a full tableau formed. Column 2's direction was computed once, in the iteration that used it; column 3 and column 4 were priced as scalars and never had a direction formed at all. On this four-column problem that saves little; on a program with five hundred columns it is the difference between the method being usable and not.
A note on the fractions. The intermediate quantities are fractional while the data is integral. That is ordinary: nothing about a linear program's data makes its basic solutions integral, which is exactly the property the transportation model has and general programs do not.
Derivation
Why the inverse update is one elementary matrix
The claim is that the new basis inverse is
Setup. The entering column is
What changes. The new basis matrix
the identity with its
Inverting
the
The update. From
The cost.
Why this is exactly a tableau pivot. The operations just described, scale the pivot row, subtract multiples from the others, are the row operations a tableau performs. The difference is scope: the tableau applies them to all
Why implementations stop here. Each iteration multiplies by another
Contrast
The same run, both ways
Take the program from the tableau unit:
| Full tableau | Revised | |
|---|---|---|
| Iteration 1, entering | scan objective row: | |
| Iteration 1, ratio test | read column 1: | |
| Iteration 1, update | row-reduce all 5 columns | update |
| Iteration 2, test | scan objective row: | |
| Result | optimal, | optimal, |
Same entering variable, same leaving variable, same step, same optimum. The reduced costs the tableau displays in its bottom row,
Where they diverge in cost. With
Where they diverge in what you can see. Reading optimality off a tableau is one glance. In the revised method it is a conclusion drawn after pricing, with nothing to look at. Conversely, asking why
Which to use when. By hand on a small program, the tableau: the state is visible and the arithmetic is mechanical. In an implementation, or on any program with many more columns than rows, the revised form. For understanding what a solver reports, the revised form again, because its quantities are the ones a solver's log and sensitivity output actually name.
Optional enrichment (1)
Application
Pricing a column that does not exist yet
The revised method prices columns one at a time, using only
Cutting stock. A mill has rolls of fixed width and a set of customer widths to cut. A pattern is one way of cutting a roll, so many of this width, so many of that, and a variable counts how many rolls are cut to that pattern. The number of feasible patterns grows combinatorially; for realistic inputs it runs to millions. Writing the constraint matrix is impossible, so a tableau is impossible.
But the method never needs all of it. Pricing asks one question: is there a column
If its optimum exceeds
Why this is exactly the same algorithm. The entering rule, ratio test, step and basis update are unchanged. Only the search for a negative reduced cost is replaced: an optimisation over implicit columns instead of a scan over stored ones. This is column generation, and it works because the revised method's pricing step was already a per-column question.
What it needs. A subproblem that can be solved efficiently and returns a genuine minimiser of the reduced cost. A heuristic that misses an improving column may stop early and report a non-optimal basis as optimal. The subproblem is usually a combinatorial problem in its own right, and the technique is only worthwhile when it is much easier than the master problem.
A representation choice made for efficiency turned out to change what problems the method can address. The tableau requires every column to exist before the algorithm starts; the revised form requires only that a column can be produced on request.