Financial Decision Making & Control

Product mix and simplex

Choose a production mix. Follow each pivot in the graph and the tableau, then try a new set of numbers.

The OmegaTech case

Original workshop case

OmegaTech produces AlphaGadget and BetaGadget. Each unit earns a contribution margin and uses assembly and testing time. Management must choose how many units of each product to make. The available hours and maximum demand limit production.

Your goal is to maximize total contribution margin. Contribution margin per unit equals the selling price less variable cost. Fixed costs stay the same for every production mix in this case.

Available capacity
Product data
Product Maximum demand
units
Contribution margin
$ per unit
Assembly time
hours per unit
Testing time
hours per unit
AlphaGadget a
BetaGadget b

Apply your edits to start a new solution. Reroll numbers generates another practice case. Its page address keeps the seed, so you can reopen or share the same numbers.

Contribution per resource hour
ProductAssembly
$ per hour
Testing
$ per hour

Each value equals contribution margin per unit divided by resource hours per unit. The values update from your inputs. With several capacity limits, use the full model to find the best mix.

The linear program

Let a be AlphaGadget units and b be BetaGadget units.

Follow the simplex algorithm

Each pivot changes the basis. In the graph, the solution moves along an edge to an adjacent corner. A degenerate pivot can leave the point unchanged.

Step 0
Loading the original case.

Production mix

a = Alpha · b = Beta
The OmegaTech production mix The graph shows AlphaGadget units on the horizontal axis and BetaGadget units on the vertical axis. Its point and tableau change together when you apply a pivot.
  • Assembly
  • Testing
  • Demand limits
  • Feasible region
  • Contribution line
  • Current solution

The shaded region contains all feasible production mixes. The contribution line passes through the current solution and moves parallel to itself as total contribution changes.

Simplex tableau

Current simplex tableau
Basisabs1s2s3s4RHSRatio
Entering column Leaving row Pivot element Lowest ratio

The calculations use full precision. Displayed decimals are rounded.

How to read the tableau
Basis
The variables currently in the basis. The other variables equal zero.
RHS
The right-hand side gives the current value of each basic variable. In the objective row, it gives total contribution.
Z row
Read this row as an equation with Z on the left. A negative coefficient identifies a variable to consider increasing. The ratio test determines how far it can increase. The lab normally selects the most negative coefficient. When a zero-length pivot is possible, it uses a fixed variable order to prevent cycling.
Ratio test
Divide each RHS by its positive coefficient in the entering column. The lowest eligible ratio sets the leaving row. Rows marked n/a have a zero or negative coefficient and do not limit this move.
Slack variables
s1 is unused assembly hours. s2 is unused testing hours. s3 and s4 are the remaining demand limits for Alpha and Beta, in units.
Pivot
Divide the leaving row by the pivot element. Then use that row to make every other value in the entering column zero.
How simplex chooses the next corner

Simplex follows edges of the feasible region. Each basis gives a corner. The basis contains four variables in this model, and the other two variables equal zero.

  1. Start with a = 0 and b = 0. The four slack variables equal the available hours and demand limits. This gives a feasible starting point.
  2. Read the Z row. In the starting tableau, Z − 200a − 250b = 0 for the original case. Increasing b can add $250 per unit, so the lab selects b first.
  3. Use the ratio test to find the largest feasible increase. Each current basic variable with a positive entry in the entering column decreases during the move. It reaches zero when the increase equals RHS divided by that entry. The smallest ratio keeps every basic variable nonnegative.
  4. Change the basis. The entering variable replaces the variable that reaches zero. Divide the pivot row by the pivot element, then make the other entries in its column zero. This writes the same model around the next corner.
  5. Read the new Z row and repeat. Stop when all its variable coefficients are nonnegative. The final equation then proves that the current contribution is the maximum.

A zero ratio gives a degenerate pivot. The basis changes while the graph point stays in place. When the usual selection gives a zero ratio, the lab switches to Bland's rule for that pivot and every later pivot. This rule selects eligible variables in a fixed order to prevent cycling.

The current step

Row operations

These operations calculate the next tableau from the current tableau.

Row operations for the pivot
RowOperation
Why does simplex stop and skip other corners?

The number of pivots depends on the inputs and the rule for choosing an entering variable. The original workshop case needs three pivots with this lab's rule.

Simplex selects a path through adjacent corners. A feasible move with a positive length increases contribution when the selected Z-row coefficient is negative. At the final corner, the Z row has no negative variable coefficients. Rearrange that equation to express Z as the current contribution minus nonnegative terms. This sets an upper bound for every feasible mix, and the current mix reaches that bound.

This proof covers the entire shaded region. It makes further corner visits unnecessary. Other inputs can give several mixes with the same maximum, which the lab reports when they occur.