hyunjoopark
← Back to Notes

ESM / Concepts

Shadow Price

Created

The shadow price (dual value) belongs to a constraint, not a variable: how much the optimal objective changes when that constraint’s RHS goes up by 1, all else fixed. shadow pricej=Δf∗Δbjunit=objective unitRHS unit(€/hMW=€/MWh)\text{shadow price}_j = \frac{\Delta f^*}{\Delta b_j} \qquad \text{unit} = \frac{\text{objective unit}}{\text{RHS unit}} \quad \left(\frac{€/\text{h}}{\text{MW}} = €/\text{MWh}\right)

Mini dispatch (A: 20 €/MWh, ≤ 100 MW · B: 30 €/MWh, ≤ 500 MW · demand 300 MW → A = 100, B = 200, cost 8000 €/h):

ConstraintRHS +1 doesNew costShadow price
gA + gB >= 300tighten8030+30 (marginal unit B)
gA <= 100loosen7990−10 (1 MW moves B → A: 20 − 30)
gB <= 500nothing (non-binding)80000

Non-binding → 0: Changes nothing → Complementary Slackness.

Demand dual = market price

Essay version

The shadow price of the demand constraint is 30 €/MWh because one extra MW of demand must come from the marginal unit B, which costs 30 €/MWh. Therefore it equals the market price, since at any lower price B stops generating and supply does not meet demand, and at any higher price B runs as much as possible and supply exceeds demand.

The LP contains only costs, no electricity price anywhere. Still, after solving, the dual of the demand constraint (30) is the price → Merit Order, Market Clearing.

Typical traps
  • Total cost is €/h (MW × €/MWh), not €/MWh
  • Recompute at the new optimum (same binding constraints), not at another corner
  • Each constraint has its own shadow price: don’t mix the demand dual with a capacity dual
  • Only valid while the same constraints stay binding (small changes)
  • KKT gives μ≥0\mu \ge 0 (e.g. A capacity μ\mu = 10, not −10) → see KKT Conditions

Links: KKT Conditions, Complementary Slackness, Duality, Merit Order, Market Clearing