Cap Sensitivity from Duals
A binding cap's dual predicts how much the objective improves when you relax that cap a little.
The One-Step Skill
You can now identify a binding upper cap and read its dual. The next skill is using that dual as a local sensitivity number.
minimization problem: if upper-cap dual = lambda and cap increases by delta then optimal objective change is approximately: new objective - old objective ≈ -lambda * delta
Because Lesson 0007 was a minimization problem, a lower objective is better. So a positive upper dual means relaxing the cap should reduce the objective.
The Same Tiny Portfolio
Lesson 0007 used this two-asset quadratic program:
minimize 0.5 * w' Sigma w - mu' w
subject to w_A + w_B = 1
0 <= w
w <= cap
At cap_A = 0.70, the solution and upper-cap duals were:
weights: [0.7000, 0.3000] upper slack: [0.0000, 0.5000] upper duals: [0.0900, 0.0000]
The A cap binds. The A dual says: near this solution, one extra unit of allowed A weight is worth about 0.09 objective units. Since weight is measured in portfolio fractions, a one percentage point cap relaxation is delta = 0.01.
Predict Before Re-Solving
If the A cap moves from 0.70 to 0.71:
delta cap = 0.01
lambda = 0.09
predicted objective change:
new - old ≈ -0.09 * 0.01
= -0.0009
The objective should drop by about 0.0009. That is the dual doing useful work: it gives a first-order forecast without solving the problem again.
Check by Hand
With the budget constraint, write w_B = 1 - w_A. For the Lesson 0007 numbers, the one-dimensional objective becomes:
f(w_A) = 0.15 w_A^2 - 0.30 w_A + 0.08
Evaluate it at the old and relaxed caps:
f(0.70) = -0.056500
f(0.71) = -0.057385
actual change = -0.057385 - (-0.056500)
= -0.000885
The dual predicted -0.000900. The small mismatch is curvature: duals give a local linear approximation, not an exact forecast over every distance.
Where the Approximation Breaks
The dual itself changes as you keep relaxing the cap. In this toy problem, the A cap dual shrinks as the cap approaches the unconstrained target:
cap_A = 0.70 -> upper dual ≈ 0.09 cap_A = 0.80 -> upper dual ≈ 0.06 cap_A = 0.90 -> upper dual ≈ 0.03 cap_A = 1.00 -> upper dual ≈ 0.00
Once the cap stops binding, the dual goes to zero. There is no more blocked desire for extra A weight.
Retrieval Practice
In a minimization problem, a binding upper cap has dual
If a cap is loose and its upper dual is zero, what does relaxing it predict?
Why did the dual prediction differ slightly from the exact hand calculation?
Portfolio Reading
When a paper or solver report gives dual values, read them as local model diagnostics. A high sector-cap dual says relaxing that sector limit could improve the objective, given the current expected returns, risk model, and active constraints. It does not say the sector is objectively good; it says the current model is pressing against that modeling choice.
Primary Source
For the formal version, use chapter 5 of Boyd and Vandenberghe's Convex Optimization, especially the interpretation of optimal dual variables as sensitivities. For solver practice, use CVXPY's dual variables guide. Keep the dual sensitivity cheat sheet open while reviewing.