70% cap
lambda = 0.09. The model is still far from its unconstrained target.
A cap dual is not a permanent price. It shrinks as the blocked portfolio weight gets closer to where the optimizer wanted to go anyway.
In Lesson 0009, the A cap at 70% had upper dual 0.09. That dual predicted the value of a small cap relaxation.
cap_A = 0.70
upper dual_A = 0.09
increase cap_A by 0.01:
predicted objective change = -0.09 * 0.01
= -0.0009
The new skill is predicting what happens to the dual itself as the cap moves from 70% toward the unconstrained target at 100%.
Using the two-asset portfolio from Lesson 0007 and writing w_B = 1 - w_A, the objective is:
f(w_A) = 0.15 w_A^2 - 0.30 w_A + 0.08 f'(w_A) = 0.30 w_A - 0.30
The unconstrained minimum is where f'(w_A) = 0, so:
0.30 w_A - 0.30 = 0 w_A = 1.00
Until the cap reaches 1.00, the cap is still blocking the optimizer. But each relaxation blocks less.
For this minimization problem, the upper-cap dual is the blocked downward slope: lambda = -f'(cap) while the cap binds.
lambda = -(0.30 cap_A - 0.30)
= 0.30(1 - cap_A)
lambda = 0.09. The model is still far from its unconstrained target.
lambda = 0.06. The cap binds, but less scarcity remains.
lambda = 0.03. The cap binds, with weaker pressure.
lambda = 0.00. The cap no longer blocks the unconstrained optimum.
Think of the cap as a vertical wall sliding right along a convex curve. At 70%, the curve is still sloping down steeply as you move right, so relaxing the wall is valuable. Near 100%, the curve is almost flat, so relaxing the wall has little value.
cap moves right: 0.70 -> 0.80 -> 0.90 -> 1.00 blocked slope shrinks: 0.09 -> 0.06 -> 0.03 -> 0.00 active status: binds -> binds -> binds -> loose
The 0.09 dual at 70% is a local slope, not a price tag for every future cap level. It works best for small changes near 70%.
small move: cap_A 0.70 -> 0.71 old dual is useful large move: cap_A 0.70 -> 1.00 old dual overstates the total gain active-set change: cap_A reaches 1.00 cap stops binding and dual becomes 0
This is the active-set warning from Lesson 0009 made concrete: when the set of binding constraints changes, the old dual no longer describes the new local problem.
cap_A moves from 0.70 to 0.80, what happens to the upper dual?cap_A = 1.00, what is the active-set status of the A cap?0.09 dual at 70% be trusted for a move all the way to 100%?In real portfolio reports, a large dual on a cap means the model is pressing hard against that limit now. It does not mean the same cap will stay valuable after a large policy change. Relaxing a sector, asset, turnover, or risk limit can change the optimum enough that a new set of constraints becomes binding.
For the formal version, use chapter 5 of Boyd and Vandenberghe's Convex Optimization on dual variables and sensitivity. For solver practice, use CVXPY's dual variables guide. Keep the active-set sensitivity reference open while reviewing.