Postopt
Postopt
W. J. Martin
September 21, 2018
Post-Optimality Analysis
Overview
We consider the situation where, after an optimal dictionary has been reached, a single piece
of data in the original problem changes. The questions to ask are
1. What effect does this have on the optimal primal and/or dual solution?
2. Within what range of modification does the optimal basis remain optimal?
3. When changes to the data push us outside of this range, what steps should be taken
in order to return to optimality?
max c> x
Ax = b
x ≥ 0
At optimality, the variables are partitioned into basic (B) and non-basic (N ). So the matrix
A, the vector x of variables, and cost vector c are partitioned accordingly
. .. > .. >
A = [ B .. AN ], x> = [ x>
B . xN ], c> = [ c>
B . cN ]
When we discuss the optimal dictionary, it is convenient to have both notation for its
individual entries and expressions for these entries in terms of the original data. If we wish
to refer to individual entries, we use the “bar” notation:
X
ζ = ζ̄ + c̄j xj
j∈N
X
xi = b̄i − āij xj (i ∈ B)
j∈N
1
(Note that the numbers c̄j are called “reduced costs”, a term that makes sense for minimiza-
tion problems, but seems odd in our maximization setting.)
But we will also need to know how all of these values b̄i , c̄j , āij depend on the original
data, so we keep track of the optimal dictionary in matrix form:
ζ = c> −1
c> > −1
BB b + N − cB B A N x N
xB = B −1 b − B −1 AN xN
It is important here to know how to recover the matrix B −1 from the optimal dictionary,
given the initial basis. For example, when the equality-form problem is obtained from an
LP in standard form by introducing one slack variable for each constraint, then the slack
variables become the initial basis and we recover B −1 column by column from the final
dictionary — the ith column of B −1 is the column of the final dictionary corresponding to
the ith slack variable, where we multiply by −1 in the case that the variable is non-basic.
We consider here only isolated changes in one datum. We will use δ to indicate the
amount of change, û to indicate the modified value of datum u, and ū¯ to indicate the
resulting modification in an entry ū in the optimal dictionary.
We begin with the objective coefficients, then consider the righthand side values, and
then finally the entries of matrix A.
Ah, but all of the entries of B −1 AN are already in the final dictionary! So we just
update each non-basic reduced cost: c̄¯j = c̄j − δāij (j ∈ N ).
2
Analysis:
case (i): If all c̄¯j ≤ 0, then the current dictionary is still optimal. The primal solution
is the same, but the dual optimal solution y = ĉ> BB
−1
and the optimal objective value
ζ̄ will change.
case (ii): If some c̄¯j > 0, then we need to carry out a primal pivot.
Range for δ under which optimality of the current dictionary is retained is
c̄j c̄j
δ ∈ max , min .
āij >0 āij āij <0 āij
B −1 b̂ = B −1 (b + δei )
= B −1 b + δv
Analysis:
case (i): If all ¯b̄h ≥ 0, then the current dictionary is still feasible. The primal solution
will change accordingly and so will ζ̄, but the dual optimal solution y remains the
same.
case (ii): If some ¯b̄ < 0, then we need to carry out a dual simplex pivot. (Hopefully
h
just one will suffice, but not always.)
Range for δ under which optimality of the current dictionary is retained is
b̄h b̄h
δ ∈ max − , min − .
vh >0 vh vh <0 vh
(Why?)
3
4. For some i, j, aij changes. First consider j ∈ N and assume aij changes to âij = aij +δ.
Consequence: Since this is an entry of AN , and it’s in column j, only c̄j can change.
We need to see if the dictionary is still optimal.
Compute: We have access to the dual optimal solution y. So we just compute
c̄¯j = cj − y > (ÂN )j = c̄j − δyi
where  is the updated matrix (with only the (i, j)-entry changed and (ÂN )j is short-
hand for the j th column of this matrix. (Why does this simplify? Think about it.)
Analysis:
case (i): If c̄¯j = c̄j − δyi ≤ 0, then the current dictionary is still optimal. The primal
solution does not change, nor does the objective value. But if j was a slack variable,
then the corresponding dual variable will change.
case (ii): If we have c̄¯j > 0, then we need to carry out one or more pivots of the simplex
method.
Range for δ under which optimality of the current dictionary is retained is
c̄j
δ∈ ,∞
yi
provided yi > 0.
The analysis involves checking both feasibility and dual feasibility. If one is compro-
mised, then we proceed to pivot with either the primal or dual method. If both are
compromised, we need to appeal to some sort of Phase I algorithm.
4
Adding and Removing Constraints and Variables
One more important component of post-optimality analysis is the addition and deletion
of primal and dual variables. In short,
• if after optimizing, you find a constraint that needs to be removed, then you can make
that slack variable basic and subsequently delete that row from the dictionary; you
don’t care anymore whether that variable is positive or negative or zero.
• if after optimizing, you are forced to add a new constraint, just give it a new slack
variable, insert this slack variable into the basis and the equation for it gets appended
to the bottom of the dictionary. Typically, the right-hand side of this equation will
involve other basic variables, so these need to be eliminated before you can proceed
to analyze this dictionary for optimality. Often, an infeasibility results and the dual
simplex method is employed to return to feasibility.
That’s all I feel like writing about for now. I hope this helps!