Why an Applied Optimum Needs a Stress Test
A computed optimum answers a question for a particular model and particular parameter values. In an application, those values may be estimates: a selling price may fall, a resource capacity may be revised, or a design limit may become stricter. A decision that is optimal under the original assumptions may no longer be feasible or best under the revised ones.
A robustness check asks what happens under specified parameter changes. It is not enough to report that the original solution is optimal. One should also ask whether that decision remains feasible, what the re-optimized decision would be, which constraints bind, and how far the model can change before that active-constraint pattern changes.
There are two different checks. First, hold the original decision fixed and test it against the perturbed constraints. This tests whether the decision is still feasible. Second, solve the perturbed optimization problem and test the new candidate optimum. Feasibility of the old decision does not imply it is still optimal; infeasibility of the old decision does not by itself tell us what the new optimum is.
Active Constraints and Feasibility Margins
Write a constrained problem in the form of minimizing \(f(\mathbf{x};\boldsymbol{\theta})\), subject to \(g_i(\mathbf{x};\boldsymbol{\theta})\leq 0\), where \(\mathbf{x}\) is the decision vector and \(\boldsymbol{\theta}\) collects model parameters. A constraint is active at a feasible point if \(g_i(\mathbf{x};\boldsymbol{\theta})=0\). It is inactive if \(g_i(\mathbf{x};\boldsymbol{\theta})<0\). For a maximization problem, the same constraint convention can be used.
For a capacity constraint \(x_1+x_2\leq C\), the slack is \(C-x_1-x_2\). Positive slack means the capacity is not fully used; zero slack means it is active. A small positive slack is a warning that a modest reduction in capacity could make the current decision infeasible. For a bound \(x_1\leq d\), the corresponding slack is \(d-x_1\).
When the constraints and objective are differentiable, a constrained optimum can also have Lagrange multipliers. With the minimization convention \(g_i\leq 0\), the Karush–Kuhn–Tucker conditions include stationarity, primal feasibility, nonnegative multipliers, and complementary slackness. In particular, complementary slackness says that each multiplier \(\lambda_i\) satisfies \(\lambda_i g_i=0\). A positive multiplier therefore requires its constraint to be active. An active constraint can have a zero multiplier, so activity and a positive multiplier are not interchangeable.
A Local Sensitivity Calculation When the Active Set Stays Fixed
For a small change in a parameter, it can be useful to estimate the change in the optimum without solving the entire problem repeatedly. This calculation only applies locally, while the same constraints remain active and the solution varies smoothly. Let \(A\) be the matrix whose rows are the gradients with respect to \(\mathbf{x}\) of the active constraints. Let \(\boldsymbol{\lambda}\) be their multipliers, and define the Lagrangian by \(L=f+\sum_i\lambda_i g_i\).
Here \(\mathbf{g}_{A,\theta}\) is the vector of parameter derivatives of the active constraints. The first block row differentiates stationarity; the second differentiates the active equalities. For a minimization problem, a positive-definite Hessian on feasible directions, independent active-constraint gradients, and suitable strict complementarity provide standard conditions for a stable local active set and a nonsingular system. This is a local result, not a promise that the same active set persists for large changes or that a local optimum is globally best.
The derivation is direct. At a point with a fixed active set, stationarity is \(\nabla_{\mathbf{x}}L=0\), while the active constraints satisfy \(\mathbf{g}_A=0\). Differentiate both equations with respect to \(\theta\). The chain rule gives \(\nabla_{\mathbf{x}\mathbf{x}}^2L\,\mathbf{x}'+A^{\top}\boldsymbol{\lambda}'+\nabla_{\mathbf{x}\theta}^2L=0\) and \(A\mathbf{x}'+\mathbf{g}_{A,\theta}=0\). Putting these equations together gives the displayed system. If it is nonsingular, it determines the local response of both the decision and the active multipliers. A predicted slack reaching zero or a multiplier reaching zero signals that the active set may change; beyond that point, the same derivative formula cannot simply be extrapolated.
Worked Example: A Reduced Shared Capacity
Worked Example: A Reduced Shared Capacity
A firm chooses quantities \(x\) and \(y\) to maximize \(P(x,y)=10x+8y-\tfrac12(x^2+y^2)\), subject to \(x\geq0\), \(y\geq0\), and \(x+y\leq C\). Start with capacity \(C=8\), then reduce it to \(C=7\).
At \(C=8\), the capacity binds at the optimum. The Lagrangian for the capacity constraint is \(L=P-\lambda(x+y-8)\). Stationarity gives \(10-x-\lambda=0\) and \(8-y-\lambda=0\). Since \(x+y=8\), substitute \(x=10-\lambda\) and \(y=8-\lambda\): \(18-2\lambda=8\), so \(\lambda=5\), \(x=5\), and \(y=3\). Both quantities are positive. The objective is \(P(5,3)=50+24-\tfrac12(25+9)=57\).
After the capacity reduction, the old decision uses \(5+3=8\) units, which exceeds the new capacity \(7\). It is infeasible and cannot be retained.
Re-solve at \(C=7\). The same stationarity equations now give \(18-2\lambda=7\), so \(\lambda=5.5\), \(x=4.5\), and \(y=2.5\). The new quantities are nonnegative and satisfy \(4.5+2.5=7\). Their objective is \(P(4.5,2.5)=45+20-\tfrac12(20.25+6.25)=65-13.25=51.75\).
The gradient of \(P\) at this solution is \((10-4.5,8-2.5)=(5.5,5.5)\), equal to \(\lambda(1,1)\), as required by stationarity for the active capacity constraint. Since \(P\) is strictly concave and the constraints are convex, this feasible KKT point is the unique global maximizer. The capacity remains active after the perturbation, but the quantities and profit change. The multiplier also changes, from \(5\) to \(5.5\).
Worked Example: A Price Change Releases a Capacity
Worked Example: A Price Change Releases a Capacity
A producer chooses \(x\) to maximize \(\Pi(x;p)=px-\tfrac12x^2\), subject to \(0\leq x\leq6\). At price \(p=8\), the unconstrained stationary point would be \(x=8\), so the capacity limit is active and the optimum is \(x=6\). The multiplier on \(x-6\leq0\) is \(p-x=2\), which is positive. Profit is \(8(6)-\tfrac12(36)=48-18=30\).
Now reduce the price to \(p=4\). The old choice \(x=6\) is still feasible because the quantity bounds did not change. However, its profit is \(4(6)-18=6\). The new stationary point satisfies \(4-x=0\), giving \(x=4\), which is feasible and leaves capacity slack \(6-4=2\). Its profit is \(4(4)-\tfrac12(16)=16-8=8\), greater than the profit of the old choice under the new price.
The new capacity multiplier is zero because the capacity is inactive. The objective is strictly concave, so the feasible stationary point \(x=4\) is the unique global maximum. More generally, the unconstrained choice is \(x=p\) when \(0\leq p\leq6\); for \(p>6\), the capacity binds at \(x=6\). Thus \(p=6\) is the threshold where the active-constraint pattern changes. This example shows why “still feasible” is not the same as “still optimal.”
Worked Example: A Design Limit Changes the Active Set
Worked Example: A Design Limit Changes the Active Set
Minimize \(F(x,y)=(x-2)^2+(y-2)^2\), subject to \(x\leq d\) and \(x+y\leq c\). Let \(d=1.2\) and initially \(c=3\). Both constraints bind at \((x,y)=(1.2,1.8)\). The objective there is \((-0.8)^2+(-0.2)^2=0.64+0.04=0.68\).
To check the multipliers, use \(L=F+\mu(x-d)+\lambda(x+y-c)\). The gradient of \(F\) at the candidate is \((-1.6,-0.4)\). Stationarity requires \(-1.6+\mu+\lambda=0\) and \(-0.4+\lambda=0\), giving \(\lambda=0.4\) and \(\mu=1.2\). Both are positive, and both constraints are satisfied as equalities. The objective is strictly convex and the feasible region is convex, so these KKT conditions establish the unique global minimum.
Increase the design limit \(c\) from \(3\) to \(3.4\), keeping \(d=1.2\). The old decision remains feasible because \(1.2+1.8=3<3.4\), but it need not remain optimal. With only \(x\leq1.2\) active, minimize over \(y\) by taking \(y=2\), the unconstrained minimizing value of that coordinate. The candidate becomes \((1.2,2)\). Its total is \(3.2<3.4\), so the sum constraint is indeed inactive. The objective is \((-0.8)^2+0^2=0.64\). Stationarity gives \(\mu=1.6\), \(\lambda=0\); both multipliers are nonnegative and the point is feasible. Strict convexity again establishes the global minimum. The sum constraint has released.
Instead, reduce \(c\) to \(2.8\). The old decision has total \(3\), so it is infeasible. The candidate with both constraints active is \((1.2,1.6)\), since \(1.2+1.6=2.8\). Its objective is \((-0.8)^2+(-0.4)^2=0.64+0.16=0.80\). Its gradient is \((-1.6,-0.8)\); stationarity gives \(\lambda=0.8\) and \(\mu=0.8\). These multipliers are positive, and the constraints hold at equality. Convexity and the KKT conditions verify the new global minimum. Comparing the two perturbations shows how the same design constraint can bind in one scenario while the sum limit is either slack or active.
A Practical Robustness-Check Sequence
For an applied problem, a useful check separates the arithmetic from the interpretation. Each proposed parameter change should be recorded along with its units and its direction. Then test both the frozen original decision and the re-optimized candidate; do not silently replace one test with the other.
Write down the parameter values, decision vector, objective value, constraint slacks, and active constraints.
Change prices, capacities, or design limits by explicit amounts. Keep units and any other fixed assumptions clear.
Substitute it into every perturbed constraint. If any inequality fails, the old decision is infeasible under that scenario.
Check feasibility, stationarity and multiplier signs when applicable, and compare objective values with feasible alternatives.
Recalculate slacks and multipliers. A constraint becoming tight or a binding constraint’s multiplier falling to zero may mark a transition.
For small changes, the fixed-active-set derivative can estimate the response. For larger changes, solve the perturbed problem directly and check it again: linear sensitivity estimates can fail near active-set transitions. A local calculation also does not certify the absence of a different, better global solution unless the problem’s structure supports that conclusion.
Common Pitfall: Treating a Binding Constraint as Permanently Binding
A frequent error is to find an active constraint at the baseline and impose it as an equality in every scenario. For example, in the price example, the capacity was active at \(p=8\). Carrying \(x=6\) over to \(p=4\) as though it must still be optimal ignores the new stationarity condition: at \(x=6\), \(4-x=-2\), so the objective decreases as \(x\) increases toward the capacity boundary, and the maximum is instead at the interior point \(x=4\).
The correction is to treat the active set as a result to be checked, not as an assumption to preserve. Re-solve under the changed parameters, test each constraint, and verify whether the multipliers and slacks are consistent with the proposed active set. If the active set changes, use the new set of conditions rather than extending a local sensitivity formula past its valid range.
Check Your Understanding
Use the definitions and checks in this tutorial to answer the following questions.
- What is the difference between testing the old decision for feasibility and re-optimizing under changed parameters?
- If a capacity constraint has positive slack at a solution, is it active? What does its slack say about a small capacity reduction?
- In a fixed-active-set sensitivity calculation, what equations are differentiated, and why can the resulting derivative fail after an active-set change?
- In the price example, why does the original quantity remain feasible after the price falls but cease to be optimal?
- What are two signals that a constraint’s role in the optimum may be changing as a parameter varies?