Lesson 0009

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.

Practical rule: trust a dual most for small perturbations that do not change which constraints are active.

Retrieval Practice

In a minimization problem, a binding upper cap has dual 0.09. If the cap rises by 0.01, what is the predicted objective change?

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.