learn-prescriptive-analytics-with-phoebe / Leader session 3 of 6
Learn Prescriptive Analytics with Phoebe · Leader session 3 of 6

What a constraint is worth

Every capacity request that reaches you is really a price question: this resource is tight, buying more of it is worth having, please approve the spend. Optimisation answers that question with a figure, and the figure is genuinely useful. At Ravensworth an hour of milling is worth 33.7931 and an hour of blending is worth exactly nothing. Tonight is both of those numbers, and the second half of the milling one, which is the part that almost never travels with it.

🟡 Foundations Anyone who approves capacity spend Anyone quoted a cost per hour 45 min
0-3 · Three prices 3-18 · Worth nothing 18-28 · Up to how many 28-45 · Build-along and Q&A
Part 0

Three constraints, three prices, and one of them is zero

Session 2 left milling hours looking like the pressure point at Ravensworth, and that impression was correct. Tonight it gets a figure attached. Solve the mill's problem and it hands back three prices alongside the plan: milling 33.7931, blending 0, premium protein 8.2759. Those are in pounds, they are per unit of the constraint, and they are the most directly actionable output the whole method produces, which is exactly why the two ways of misreading them are expensive.

Live = presented in the 45 minutes Self-study = the full depth, after class 🔍 Every diagram zooms

★ What you walk out with tonight. The one question to ask whenever somebody quotes what an hour of capacity is worth, which is "up to how many hours". A working grip on why a constraint with room left over is worth nothing at all, no matter how busy the resource looks from the corridor. And Ravensworth's own arithmetic on a purchase that looks like 337.93 and delivers 206.44, which is the kind of gap that gets a business case signed.

LiveWhat the number means, precisely4 min▶

A shadow price is what one more unit of a limit would be worth to the plan. Not what the resource costs to buy, not what it is worth on the open market, not an accounting allocation. It is the answer to a single narrow question: if this ceiling moved up by one, how much better would the best plan get.

That narrowness is the source of its power and of both failure modes. Because it is a real answer to a real question, it looks like a price you can use anywhere. It is not. It is attached to this plan, this week, these three ceilings, and it survives exactly as long as the plan's structure survives, which as we will see is not very long.

Real world

The purchasing conversation at Ravensworth is the ordinary one. Somebody can hire a contractor for extra milling hours, somebody else wants to extend the blending shift, and both requests are competing for the same approval. The mill now has a figure for each, and the two figures are not close to each other.

Self-studyThe words tonight adds3 min▶
  • Shadow price. What one more unit of a constraint would be worth to the best plan. Milling 33.7931, blending 0, premium protein 8.2759.
  • Binding constraint. One the plan has pushed right up against, with nothing left over. Milling and premium protein are binding at Ravensworth.
  • Slack. The unused amount of a constraint under the current plan. Blending hours have slack.
  • Validity range. The interval over which a shadow price stays true. For milling it runs to about +0.46 hours.
  • The binding set. Which constraints are tight. When it changes, the prices change with it, and that is what ends a validity range.
  • Local rate. A figure that is exact for a small move and wrong for a large one. A shadow price is one of these.
  • Dual. The formal object the shadow prices come from. Named here; the practitioner track derives it.
  • Degeneracy. Several plans tied for best, which complicates shadow prices. A real concept, and not a property of Ravensworth: exactly one integer plan reaches 4,656.00.
Part 1 · covers a price of zero

A constraint that is not binding is worth nothing

15 min live

Of Ravensworth's three ceilings, two are pushed right up against and one has room left over. The one with room left over is blending, and its shadow price is not small, not approximately zero, not worth checking again. It is exactly 0. Every pound spent widening the blending ceiling buys the mill precisely nothing, and the reason that money still gets spent in real companies is that blending looks busy from the corridor.

What one more unit of each ceiling is worth to the best plan CONSTRAINT HOW FULL THE PLAN LEAVES IT STATE WORTH PER UNIT Milling hours ceiling 131 in the week Full to the ceiling. The plan has pushed this one all the way up. BINDING 33.7931 an hour Blending hours ceiling 77 in the week Room left over. The plan stops short and never touches this ceiling. SLACK 0 exactly nothing Premium protein ceiling 29 tonnes in the store Full to the ceiling. The store is emptied by this plan. BINDING 8.2759 a tonne Widening a ceiling the plan is not touching changes the plan by nothing at all. If the mill is not using all 77 blending hours, a 78th hour joins the ones already going unused. The best plan does not move. Busy looking is not the same thing as binding, and the confusion is what spends the money. Blending is where the noise is, where the queue is visible, and where anyone walking the floor would point. None of that is evidence. Binding means the plan ran out of it, and only the plan knows which of the three that was.
🔍 Click to zoom - the amber row is the one people buy. It is the one worth nothing.
LiveWhy zero is exactly zero4 min▶

The argument is short enough to say without notes. The best plan does not use all of the blending capacity that already exists. Add one more hour of blending to a pool that already has unused hours in it and the plan has no reason to change, because nothing it wanted to do was being prevented by the blending ceiling. The plan stays the same, the margin stays the same, and the difference is zero.

Say it as a test rather than a result and it becomes portable: if the plan is not running out of something, more of it is worth nothing. That is true of hours, of headcount, of warehouse space and of budget lines. Not worth a little. Worth nothing, until something else changes and the constraint starts to bind.

LiveWhy the money still goes to the wrong resource4 min▶

Because the evidence people actually use is visibility. The resource that looks stretched is the one with a queue in front of it, a supervisor complaining about it, and people visibly working hard at it. Blending at Ravensworth would win all three of those contests and it is worth 0 an hour.

The intuition that a busy-looking resource must be the bottleneck is not stupid, it is just unreliable, and it is unreliable in a specific direction: it favours whatever is most visible over whatever is most constraining. A resource can be fully occupied and still not be what stops the plan from being better, and a resource can be quiet and be the exact thing the plan ran out of. Only the plan knows, and the plan will tell you in one column.

Self-studyZero is a statement about now, not forever4 min▶

The blending price of 0 is true of the current plan and is not a permanent property of the blending line. Change the product mix enough, change the milling ceiling enough, and blending can start to bind, at which point its price becomes positive and the advice reverses. A shadow price of zero means "not the thing stopping you right now", which is useful and is not the same as "never invest here".

This cuts both ways in a discussion. Somebody defending a blending investment can correctly say the figure is conditional. Somebody opposing it can correctly say that no condition currently in view makes it pay. Both are right, and the honest resolution is to name the change that would make blending bind and check whether it is plausible, rather than to argue about whether zero means zero.

Part 2 · covers the validity range

A local rate, and the point where it stops being true

10 min live

Milling is binding and worth 33.7931 an hour. That figure is exact, and it is the number that will get quoted. What travels with it almost never is the range over which it holds, and for Ravensworth that range is short: about 0.46 of an hour. Beyond that the binding set changes, the plan reorganises itself around a different ceiling, and the rate that was precisely right becomes steadily and quietly too high.

Milling hours, measured: what the price of 33.7931 promises against what the mill actually gains EXTRA HOURS PREDICTED ACTUAL AGREE 0.01 0.3379 0.3379 YES 0.10 3.3793 3.3793 YES 0.25 8.4483 8.4483 YES THE PRICE STOPS HOLDING AT ABOUT +0.46 0.50 16.8966 16.4368 NO 1.00 33.7931 26.4368 NO 2.00 67.5862 46.4368 NO The first three rows agree to the last decimal. That is what an exact local rate looks like. The same six measurements, drawn 0 0.5 1.0 1.5 2.0 extra milling hours 0 35 70 gain in margin +0.46 predicted by 33.7931 an hour actual gain, flattening The business case for 10 extra milling hours Written the obvious way: 10 hours at 33.7931 an hour comes to 337.93, and that is the figure in the paper. Measured by re-solving the mill with 10 more hours: the actual gain is 206.44. The naive figure overstates the benefit by 1.64 times, and it does it using a price that was exactly right at +0.01.
🔍 Click to zoom - the two lines leave the origin together. They are already apart by the time anyone rounds to a whole hour.
Live The real solver, running in this page. Ask for extra milling hours and compare the two figures.

...

...
LiveWhy the rate expires at all4 min▶

The shadow price is the value of relaxing one ceiling while everything about the plan's structure stays the same. Give the mill a tiny bit more milling time and it does more of what it was already doing, in the same proportions, and the extra margin arrives at exactly 33.7931 an hour. That is why the first three rows in the table agree to the last decimal: nothing structural has changed.

Keep going and something has to give. The plan runs into a different ceiling, because premium protein is binding too, and the mix has to reorganise around the new limiting factor. From that point the extra milling hours are no longer the thing in shortest supply, the gain per hour drops, and the original rate keeps quoting the old world. At Ravensworth that handover happens at about +0.46 hours, which is less than one shift's coffee break.

LiveThe question to ask, every time3 min▶

When somebody quotes what an hour of capacity is worth, the second question is always "up to how many hours". Not as a challenge and not as a gotcha. The number is usually correct and the person quoting it is usually right to be excited about it. The range is simply a second fact that has to travel with the first, and in most reporting it does not.

There is a version of this you can use without any of the machinery: multiplying a rate by a large quantity assumes the rate survives the quantity. Ravensworth's milling rate survives 0.46 hours. Somebody multiplied it by 10. The arithmetic was flawless.

Self-studyWhere serious people disagree5 min▶

Everyone accepts the numbers on this page. There is a real and unresolved argument about whether shadow prices should be published to the business at all.

One camp says publish them, prominently, every cycle. They are the only honest internal price signal a business has: they say what each scarce resource is actually worth to the plan rather than what it cost to buy, and they are the thing that would have stopped the blending investment. Withholding them because people might misuse them is paternalism, and it leaves the field to intuition, which is reliably worse. Put the range next to the price and trust adults to read two columns.

The other camp says that a price and a range do not travel together in practice. The price is a single number with a currency symbol and it goes into slides, targets and business cases; the range is a caveat and caveats get dropped in the second retelling. On this view publishing the rate creates the 337.93 error rather than preventing it, and the right thing to publish is not a price at all but the answer to the actual question: re-solve the mill with the purchase in it and report the gain. That costs a solver run and produces a number nobody can multiply by the wrong quantity.

The disagreement is about what happens to a number after it leaves the room, which is not something more computation can settle. It is worth deciding which camp you are in before you build the report, because the two lead to genuinely different reports.

Part 3 · build-along

Price a constraint, then break the price

17 min hands on

No code. Six steps using the live box above and the three prices. The aim is to leave unable to hear a per-hour figure without asking for its range.

Confirm the rate is exact where it is exact

Set the box to 0.01, then 0.10, then 0.25. Check the predicted and the actual against each other each time. Satisfy yourself that this is not an approximation being defended, it is a rate that is precisely right over a short interval.

Find the break by hand

Walk the box up from 0.25 in steps of 0.05 until the two figures part company. Write down the value where it happens and compare it with the 0.46 stated in the table. Then say how much of one shift that is.

Build the bad business case

Set the box to 10. Read the predicted figure of 337.93 out loud, then the actual 206.44, then the ratio. Say who in your own company would have signed the first version, and say honestly whether you would have queried it.

Argue the blending investment

Someone proposes extending the blending shift because the blending line is where the queue is. In one sentence, without using the word bottleneck, say why the proposal buys nothing. Then, in a second sentence, say what would have to change for it to start buying something.

Rank the three requests

Milling at 33.7931 an hour, blending at 0, premium protein at 8.2759 a tonne. Put them in order of what you would fund, then say what you still do not know that would change the order. The missing fact is a range, and there are two of them missing.

Take a side on publishing

Publish the prices with their ranges, or publish only the re-solved answer to each specific purchase. Pick one in a sentence, and name the failure you are accepting by picking it. There is a failure on both sides.

The habit to keep. Two questions, in this order, whenever a capacity price appears. First: is the resource actually binding, or does it merely look busy. Second: up to how many units does the quoted rate hold. A price with no range attached is half a number, and the missing half is the half that gets multiplied.

Check yourself

Three questions

Blending hours have a shadow price of 0 while the blending line is the busiest looking part of the plant. What follows?

The best plan does not run out of blending. Relaxing a ceiling the plan never reaches cannot change the plan, so the gain is exactly zero. Looking busy is about visibility; binding is about what the plan ran out of, and only the plan knows which.

The milling shadow price is 33.7931. A paper proposes buying 10 extra hours and values the benefit at 337.93. What is wrong with it?

The arithmetic is flawless and the rate is exactly right at +0.01, +0.10 and +0.25. What breaks is the assumption that a rate survives being multiplied by a large quantity. Past about +0.46 the binding set changes and the real gain flattens.

A supplier offers Ravensworth premium protein at a price. Which figure tells you whether to take the deal, and what else do you need?

The shadow price is exactly the right figure for a buy-or-not question on a binding constraint. It is also a local rate, so the deal's size matters: the same two questions apply here as to milling, and a large enough offer will run past whatever range this rate has.

Before session 4

Homework

Twenty minutes, on a capacity number your own organisation quotes.

Find a rate that gets multiplied

Locate one per-unit figure your company uses to size an investment: cost per hour saved, value per seat, revenue per square metre, hours released per automation. Write down the largest quantity anyone has multiplied it by, and then write down the largest quantity it was measured over. If the second number does not exist, that is the finding.

Bring your ranked three

The funding order from step 5 of the build-along and the two missing ranges you named. Session 4 stops asking what the plan is worth and starts asking whether the plan survives a week where demand does not arrive as forecast.

Covered tonight

What this session covers

✓What a shadow price isWhat one more unit of a limit is worth to the best plan, and nothing wider.
✓Ravensworth's three pricesMilling 33.7931, blending 0, premium protein 8.2759.
✓A non-binding constraint is worth nothingBlending has slack and a price of exactly 0, while looking like the busiest line.
✓Binding against busy lookingVisibility is not evidence, and the confusion is what spends the money.
✓The validity range33.7931 is exact at +0.01, +0.10 and +0.25, and breaks from +0.50 onward.
✓The 10 hour business case337.93 predicted against 206.44 actual, overstating by 1.64 times.
◐The dualNamed tonight as where the prices come from. Derived in the practitioner track.
◐Ranges for the other two constraintsMeasured tonight only for milling. Named as the missing fact in the funding exercise.
○How the ranges are computedSensitivity analysis as mechanics belongs to the practitioner track.
○Whether the plan holds under uncertain demandEvery price tonight assumes the plan sells. Session 4 tests that.
○What the extra capacity costs to buyShadow prices say what a unit is worth, never what a supplier will charge.
Take this with you

Cheat sheet

The one question. When somebody quotes what an hour of capacity is worth, ask "up to how many hours".
Shadow price. What one more unit of a limit is worth to the best plan. Not a market price and not a cost.
The three prices. Milling 33.7931 an hour, blending 0, premium protein 8.2759 a tonne.
Not binding, worth nothing. Blending has slack, so an extra hour joins the ones already unused.
Busy is not binding. The visible queue is not evidence, and it is where the money goes.
Exact, then not. 33.7931 is right to the decimal at +0.01, +0.10 and +0.25, and wrong from +0.50 on.
The range. About +0.46 milling hours, after which the binding set changes and the gain flattens.
The expensive multiplication. 10 hours looks like 337.93 and delivers 206.44, overstating by 1.64 times.