Sensitivity analysis studies how the optimal solution reacts to changes in the LP data, without solving the LP again from the start.
The optimal tableau is fixed by the choice of basis . A change in the data keeps the same basis optimal as long as 2 conditions still hold:
- Feasibility
Every basic variable value stays . - Optimality
Every objective row entry satisfies the optimality criterion. For a maximization problem this means every reduced cost , where is the objective coefficient of variable and is the rate at which would drop if were forced into the basis.
If both hold, only the affected numbers are recomputed. If one fails, the tableau is repaired with primal or dual simplex.
Notation
The columns of the original constraint matrix belonging to the current basic variables.
The basis inverse. It is read straight off the optimal tableau, in the columns that held the identity matrix in the initial tableau.
The objective coefficients of the basic variables in the original problem, listed in basis order.
The original right hand side vector.
The column of variable in the original constraint matrix, before any pivoting.
The objective coefficient of variable .
The quantity . It is the amount by which changes per unit of brought into the basis, through the forced adjustment of the current basic variables.
The reduced cost of variable . It is the objective row entry under column . Non-negative for every means the basis is optimal for a maximization problem.
Two quantities drive every case:
The RHS column gives the basic variable values, so feasibility needs . The reduced cost is the objective row entry under column , so optimality needs for every in a maximization problem.
Change in a Cost Coefficient
Non-basic variable
Only the objective row entry of that one variable changes.
The coefficient enters with a minus sign and nowhere else, since is not part of . So
The basis stays optimal while this stays , which gives an upper bound on .
Basic variable
The whole objective row is recomputed.
Now sits inside , so it appears in the reduced cost of every non-basic variable. Write and impose for every non-basic . Each inequality bounds . Their intersection is the range over which the basis stays optimal.
Change in the Right Hand Side
Recompute the RHS column with the current basis inverse.
Replace by the new vector . The new basic variable values are
The basis stays optimal while every entry is . This gives the range over which a resource can change without altering the optimal basis. The objective value moves by the shadow price of that resource times the change.
Change in the Coefficient Matrix
- Non-basic variable’s column Recompute and then from the new column. If it stays the basis is still optimal.
- Basic variable’s column The matrix itself changes, so changes. The tableau is rebuilt and the LP effectively re-solved.
Addition of a Variable
Treat the new variable as a new column with cost .
Compute its objective row entry with the current basis inverse:
- Entry The current solution stays optimal. The new variable stays non-basic at value 0.
- Entry Optimality is violated. The new variable can enter the basis and improve the objective.
Addition of a Constraint
- Current optimal solution satisfies the new constraint It stays optimal. No further work.
- Current optimal solution violates the new constraint Add the constraint to the optimal tableau with a slack, surplus, or artificial variable, and row-reduce it against the current basis. The new basic variable gets a negative value, so the tableau is optimal but infeasible. Continue with the dual simplex method.
Worked Example
Base LP, the same as the simplex worked example:
Optimal tableau, basis , , :
| Basic | RHS | |||||
|---|---|---|---|---|---|---|
| 0 | 0 | 0 | 3/2 | 1 | 36 | |
| 0 | 0 | 1 | 1/3 | -1/3 | 2 | |
| 0 | 1 | 0 | 1/2 | 0 | 6 | |
| 1 | 0 | 0 | -1/3 | 1/3 | 2 |
The basis inverse sits in the columns, since those held the identity in the initial tableau:
Values used below:
- , the unit column for the second constraint
- , the unit column for the third constraint
- original RHS
Cost coefficient of a non-basic variable
is non-basic. Its objective row entry:
The bracket equals and does not depend on . Optimality needs
Currently , which reproduces the stored entry . The basis stays optimal for .
Cost coefficient of a basic variable
is basic. Set , so . Every non-basic entry must stay .
For , with (the second column of ):
For , with (the third column of ):
Both together give , so .
Change in the right hand side
Set , so the new RHS vector is with . The new basic values:
Here is the current RHS column and is the first column of . Feasibility needs every entry :
Only the row changes, so there is no upper bound. The basis stays optimal for .
Addition of a variable
Add with cost and original column , meaning coefficient 1 in each constraint. First transform the column:
Then its objective row entry:
Optimality is violated. can enter the basis and improve .
Addition of a constraint
Add . The current optimum gives , so it violates the new constraint. The tableau stays optimal but becomes infeasible. Continued with the dual simplex method in the dual simplex worked example, reaching the new optimum , , .