Shadow Prices Are Clues, Not Answers
How to use dual values and marginal economics to understand constrained supply-chain models without pretending a local LP sensitivity number is a universal business truth.
Shadow Prices Are Clues, Not Answers
A planner asks a reasonable question:
If I could get one more unit of supplier capacity, what would it be worth?
The optimization team opens the solver output, finds a dual value of $8.40 on the capacity constraint, and answers: $8.40 per unit.
That answer might be useful. It might also be completely wrong for the decision the planner is actually making.
Shadow prices are one of the most useful diagnostic tools in optimization, but they are routinely given more authority than they deserve. A dual value is not a permanent price tag attached to a resource. It is a local statement about a particular mathematical model, at a particular solution, under a particular set of assumptions.
In a real supply chain, capacity is discrete, products interact, demand is uncertain, MOQs create jumps, transportation comes in chunks, and the next unit of capacity may be worth something very different from the next truck, shift, container, or 10,000 units of annual supplier commitment.
The practical use of shadow prices is therefore not to ask the solver to tell us what the business should pay. It is to use the solver to tell us where to investigate the economics.
Start with the decision, not the dual
Before looking at any sensitivity report, write down the actual decision.
Suppose a supplier can produce at most 50,000 units next month. We choose order quantities
[ x_i = \text{units ordered for SKU } i ]
with a capacity constraint
[ \sum_i a_i x_i \le C, ]
where (a_i) is the amount of supplier capacity consumed by one unit and (C) is available capacity.
A deterministic LP might maximize
[ \sum_i m_i x_i, ]
where (m_i) is an estimated marginal contribution.
If the capacity constraint binds, its dual value (\lambda) has a clean interpretation: for a sufficiently small relaxation of that constraint, and while the current basis remains valid, the optimal LP objective improves at approximately (\lambda) dollars per unit of capacity.
That is precise. It is also narrower than the business question.
The business may actually be deciding whether to:
- buy an additional supplier shift,
- pay for overtime,
- qualify a second source,
- reserve 5,000 units of flexible capacity,
- expedite a container,
- move capacity from one product family to another,
- or sign a twelve-month capacity commitment.
None of those is necessarily a one-unit perturbation.
Ask what resource is actually scarce
A model can make the wrong constraint look important because the model framed the resource incorrectly.
For supplier production, the scarce resource may be machine minutes rather than finished units. For a warehouse, it may be labor hours during a four-hour outbound window rather than weekly throughput. For transportation, it may be pallet positions, cube, weight, containers, or departure slots.
Before interpreting a dual, ask:
- What physical or financial resource does this row represent?
- At what time and location is the resource scarce?
- Can the business actually buy or relax it?
- In what increments can it be changed?
- How quickly can the change take effect?
- What other constraints become binding after it changes?
That last question matters a lot.
If supplier capacity is increased but port capacity immediately becomes the bottleneck, the value of additional supplier capacity can collapse. A shadow price calculated at the original solution does not promise that the same marginal value continues indefinitely.
The next unit and the next block are different questions
Suppose an LP reports a capacity shadow price of $8.40 per unit. Management is considering buying 10,000 additional units of capacity for $50,000.
Multiplying
[ 10{,}000 \times 8.40 = 84{,}000 ]
and declaring an expected $34,000 gain is tempting.
Do not do that without re-solving.
The $8.40 is local. As capacity increases, the model reallocates decisions. High-value shortages are addressed first. Lower-value opportunities remain afterward. Other constraints begin to bind. The marginal value generally changes by breakpoint.
A much better experiment is a capacity sweep:
[ C,\ C+1{,}000,\ C+2{,}500,\ C+5{,}000,\ C+10{,}000. ]
Solve the model at each level and calculate
[ V(\Delta C)=Z(C+\Delta C)-Z(C), ]
where (Z(C)) is the optimized economic objective at capacity (C).
Now compare the incremental value of each capacity block with its actual acquisition cost.
This gives the business a curve instead of a single number.
MILPs make the economics lumpy
The cleanest dual interpretation belongs to linear programming. Real supply-chain models are often mixed-integer.
Suppose a SKU must be ordered in cases of 24:
[ x_i = 24k_i, \qquad k_i \in \mathbb{Z}_{+}. ]
A vendor MOQ may require
[ \sum_i x_i \ge M y, ]
with (y\in{0,1}) indicating whether an order is placed.
A truck may have a fixed activation cost:
[ \sum_i v_i x_i \le Qz, ]
where (z) is an integer number of trucks.
Now an extra unit of nominal capacity may have zero executable value. It might take 24 units to buy another case, 500 units to clear an MOQ breakpoint, or enough volume to justify another truck.
Many solvers can report dual information for an LP relaxation or for a fixed-integer subproblem. That information can still be useful diagnostically, but it is not the same thing as the marginal value function of the original MILP.
For a MILP, I usually trust perturb-and-resolve experiments more than a single dual number.
Uncertainty changes what capacity is worth
Deterministic capacity values are especially dangerous when demand, lead time, yield, or supply availability is uncertain.
Imagine two SKUs competing for supplier capacity. SKU A has a high point forecast and high margin. SKU B has a lower point forecast but much greater upside uncertainty. A deterministic model may allocate nearly everything to A.
But capacity itself creates optionality. If capacity can be assigned after some uncertainty resolves, flexible capacity may be worth more than capacity committed today.
The decision timeline matters:
- What is known when capacity is purchased?
- What is known when capacity is allocated?
- Can capacity be moved across SKUs later?
- Can unused capacity be carried forward?
- What recourse actions exist if demand surprises us?
A useful simulation experiment evaluates the same capacity alternatives across common scenarios.
For scenario (s), let
[ \Pi_s(C,\pi) ]
be realized profit under capacity level (C) and operating policy (\pi).
Then estimate
[ \Delta V(C’) = \frac{1}{S}\sum_{s=1}^{S} \left[\Pi_s(C’,\pi’)-\Pi_s(C,\pi)\right]. ]
Use the same scenarios for both alternatives. Otherwise Monte Carlo noise can masquerade as economic value.
And do not stop at expected profit. If the capacity is intended to protect the business against severe shortages, examine the distribution of outcomes: downside profit, shortage cost, lost contribution, and perhaps a tail-risk measure if that matches the economics.
Shadow prices are excellent debugging tools
Where dual values become extremely useful is model diagnosis.
A constraint with a large dual says, roughly, that the model is feeling economic pressure there. That gives you somewhere to look.
If warehouse capacity has a huge shadow price every Tuesday but operations says Tuesday capacity is routinely underutilized, something is inconsistent. Possible explanations include:
- the capacity data is wrong,
- the time bucket is wrong,
- a unit conversion is wrong,
- the model omitted an operational recourse action,
- inventory availability is timestamped incorrectly,
- another constraint is forcing artificial congestion,
- or the objective is rewarding something the business does not actually value.
The dual did not prove which explanation is correct. It exposed a place where the model’s implied economics deserve inspection.
That is incredibly valuable.
Log the constraint economics
Production optimization systems should not only log solve time and MIP gap. They should log enough information to explain why the recommendation changed.
For important resource constraints, capture at least:
- available capacity,
- used capacity,
- slack,
- whether the constraint binds,
- relevant dual or reduced-cost information when mathematically meaningful,
- the products consuming the resource,
- objective contribution by major economic component,
- and the change from the previous run.
Then add perturbation tests offline for the constraints that repeatedly appear important.
If a planner asks why SKU 381 received less inventory this week, the solver optimized it is not an explanation. A useful explanation is closer to:
Supplier line 4 was fully utilized. The next case of SKU 381 displaced a higher-value case of SKU 912 under the current demand scenarios. When we add one production shift, both orders increase and expected contribution improves by about $27,000.
That is a decision explanation.
Reduced costs answer a related question
Reduced costs are also useful when interpreting LP models.
If a variable is currently at zero, its reduced cost can indicate how much its objective coefficient would need to improve before it becomes attractive, subject again to the local LP interpretation.
This can help diagnose questions such as:
- Why did this lane receive no flow?
- Why did this supplier receive no volume?
- How far is this product from entering the allocation?
But the same warnings apply. Integer restrictions, fixed costs, nonlinear economics, and uncertainty can turn a smooth local threshold into a discrete business breakpoint.
Use reduced costs to generate hypotheses. Then test the actual decision.
Do not confuse a binding constraint with an important constraint
A constraint can bind and have little economic importance.
For example, a bookkeeping equality may always bind by construction. A redundant upper bound may bind because another constraint forces the same value. Conversely, a constraint with slack today may be strategically important because uncertainty makes it bind frequently across future scenarios.
Useful importance measures therefore include more than current slack:
- frequency of binding across scenarios,
- economic loss when the resource is tightened,
- economic gain when it is relaxed,
- probability that it changes the chosen action,
- and the cost of acquiring flexibility around it.
This moves the analysis from constraint status to decision consequence.
A practical capacity-value workflow
When someone asks, What is more capacity worth?, I would use the following workflow.
1. Define the executable capacity decision
Do not analyze an abstract +1 if the business can only buy a shift, truck, container, machine, or supplier commitment.
2. Verify the resource equation
Check units, calendars, yields, changeovers, eligibility, and time buckets. Make sure the constraint represents the physical bottleneck you think it represents.
3. Inspect the baseline solution
Look at utilization, slack, allocations, objective decomposition, dual information where appropriate, and nearby competing constraints.
4. Perturb and re-solve
Evaluate realistic capacity increments. Record the full optimized objective and the decisions that changed.
5. Evaluate under uncertainty
Replay alternatives over the same demand, lead-time, yield, and supply scenarios. Include the recourse actions the business would actually use.
6. Compare with the acquisition cost
Capacity is worth buying when its incremental risk-adjusted economic value exceeds its full incremental cost, including fixed fees, overtime premiums, transportation effects, inventory consequences, and commitment risk.
7. Check robustness
Ask whether the conclusion survives reasonable changes in forecast vintage, economic coefficients, scenario sample, and nearby constraints.
If a $500,000 capacity contract is justified only because one uncertain penalty coefficient was set to $17 instead of $15, management should know that.
Metrics that actually help
For capacity and constraint analysis, I care about metrics such as:
Incremental economic value
[ Z(C’)-Z(C) ]
or its out-of-sample simulated equivalent.
Value per purchased block
Economic improvement divided by the actual executable capacity increment.
Utilization
Useful context, but not a value metric by itself. A resource can be 100% utilized and still not justify expansion.
Binding frequency
Across time or scenarios, how often does the constraint actually limit the policy?
Decision change rate
How often does additional capacity change an executable order, allocation, production, or transportation action?
Regret from insufficient capacity
The economic difference between the current policy and a relevant capacity alternative under realized scenarios.
These metrics connect the mathematical constraint back to the business decision.
Common failure modes
Treating the LP dual as a purchase price
A local sensitivity number gets multiplied by a large capacity increment without re-optimization.
Ignoring integer breakpoints
The analysis says another 10 units are valuable even though orders move only in cases of 24.
Valuing the wrong resource
The model measures finished units while the real bottleneck is machine time, cube, labor, or a departure slot.
Ignoring the next bottleneck
Capacity is expanded in one stage and the economic value disappears because another constraint immediately takes over.
Using point forecasts
Capacity is valued against one demand trajectory even though its real benefit is flexibility across uncertain outcomes.
Looking only at utilization
High utilization gets interpreted as proof that more capacity is valuable. Utilization tells you that a resource is busy, not what another block is worth.
Forgetting acquisition structure
A supplier does not sell 1.0 extra unit of annual capacity. It sells a shift, tooling investment, reserved block, contract, or other discrete commitment with its own cost and timing.
What to do in practice
Keep the duals. They are useful.
Just stop asking them to answer a question they were never designed to answer.
Use shadow prices to identify economic pressure inside the model. Use reduced costs to understand nearby alternatives. Use slack and binding status to inspect resource usage. Then test the actual executable decision by perturbing the resource, re-solving the optimization, and evaluating the resulting policy under uncertainty.
The important question is not:
What is the shadow price?
It is:
If I change this resource in a way the business can actually execute, what decisions change, and what are those changed decisions worth?
That is the number worth taking to management.