flowchart LR V[Supplier] -->|"L0 = 3 weeks"| H[Hub<br/>r0 = 9, Q0 = 8] H -->|"Oj = 1 week"| S1[Storeroom 1<br/>Sj = 3] H --> S2[Storeroom 2<br/>Sj = 3] H --> S3[Storeroom 3<br/>Sj = 3] H --> S4[Storeroom 4<br/>Sj = 3]
Every demand at a storeroom sent one unit’s request to its supplier, at once.
So the supplier saw the storeroom’s customers, arrival for arrival.
That is what made two levels tractable: the stream a location passes up is its own demand.
This chapter removes it.
A storeroom ordering \(Q_j\) at a time sends one request per \(Q_j\) customers.
The supplier sees nothing for a while, then \(Q_j\) units at once.
That stream is lumpier than the customers’ demand.
And it is steadier in its timing: one order per \(Q_j\) units of demand, nearly on a schedule.
The hub’s demand is not the customers’ demand. It arrives in lumps of \(Q_j\).
An order waits for its last unit. Two on the shelf and an order of three: ship two, owe one, and the order is not filled until the third arrives.
The policies cannot be set one after the other. The hub’s demand depends on \(Q_j\), and the storeroom’s lead time depends on the hub.
What does not change: the hub’s backorders still become a delay by Little’s law.
Part I (this deck): only the hub batches. Everything is exact.
Part II: the storerooms batch, and other demand reaches the hub.
Part III: choose both policies together.
One move carries the chapter: condition on the position, then average.
Chapter 8 built the \((r, Q)\) measures that way. Watch for it.
The fuse cutout: cheap, consumable, stocked at a central hub and at the storerooms crews draw from.
flowchart LR V[Supplier] -->|"L0 = 3 weeks"| H[Hub<br/>r0 = 9, Q0 = 8] H -->|"Oj = 1 week"| S1[Storeroom 1<br/>Sj = 3] H --> S2[Storeroom 2<br/>Sj = 3] H --> S3[Storeroom 3<br/>Sj = 3] H --> S4[Storeroom 4<br/>Sj = 3]
Each storeroom: Poisson demand at one unit a week, one unit per customer.
What is stocked? The cutout, at the hub and four storerooms.
What is the demand process? Poisson, one unit a week at each storeroom, one unit per customer.
When is inventory reviewed? Continuously, everywhere.
What triggers replenishment, and how much? Storerooms: base stock \(S_j = 3\), one unit at a time. Hub: position reaching \(r_0 = 9\), for \(Q_0 = 8\).
What happens to unmet demand? Backordered at both levels. The hub fills first come, first served, and ships part of an order when it has only part of it.
What costs are incurred? Holding everywhere; shortage only at the storerooms.
A unit short at the hub costs nothing until a crew is short of it.
So the hub’s shortages are priced through the storerooms, or not at all.
In weeks:
\[ h = \frac{\$28.75}{\text{unit}\cdot\text{year}} \times \frac{1 \text{ year}}{52 \text{ weeks}} = \$0.5529, \qquad b = \frac{\$287.50}{52} = \$5.5288 \]
per unit per week.
Running example: \(\lambda_j = 1\), \(\lambda_0 = 4\), \(L_0 = 3\), \(O_j = 1\).
One storeroom and its hub, small numbers so events are few.
Hub: \((r_0, Q_0) = (1, 4)\), \(L_0 = 3\) weeks, starts with 5 on the shelf.
Storeroom: base stock \(S_j = 2\), one week from the hub, starts with 2.
Failures in weeks 1, 3, 6, 8, 9, 10 and 14. A storm in week 8 takes out three.
One row per event, state after posting. Same week: the hub’s receipts first, then the storeroom’s, then demands in arrival order.
At the hub:
\[ \mathit{IP}_0 = I_0 + \text{on order} - B_0 \]
At the storeroom: on-hand less backorders, plus what is in transit, plus what the hub still owes it.
Compute both positions two ways on every row. Stop when they disagree.
| Week | Event | \(I_j\) | \(B_j\) | \(\mathit{IP}_j\) | In transit | \(I_0\) | \(B_0\) | On order | \(\mathit{IP}_0\) |
|---|---|---|---|---|---|---|---|---|---|
| 1 | failure, request to hub | 1 | 0 | 2 | 1 | 4 | 0 | 0 | 4 |
| 2 | storeroom receives 1 | 2 | 0 | 2 | 0 | 4 | 0 | 0 | 4 |
| 3 | failure, request to hub | 1 | 0 | 2 | 1 | 3 | 0 | 0 | 3 |
| 4 | storeroom receives 1 | 2 | 0 | 2 | 0 | 3 | 0 | 0 | 3 |
| 6 | failure, request to hub | 1 | 0 | 2 | 1 | 2 | 0 | 0 | 2 |
| 7 | storeroom receives 1 | 2 | 0 | 2 | 0 | 2 | 0 | 0 | 2 |
Six weeks in, nobody has waited and the hub has not ordered.
It has been spending its opening stock one unit at a time: position 5, then 2, one step above its reorder point.
Three failures, posted one at a time.
First: storeroom 2 → 1, request up. The hub ships its second-to-last unit; position hits \(1 = r_0\). The hub orders 4, due week 11. Position 5.
Second: the storeroom’s last unit. The hub ships its last. Position 4.
Third: the storeroom’s shelf is empty, so a crew waits, \(B_j = 1\). Its request finds the hub empty too: \(B_0 = 1\). Position 3.
| Week | Event | \(I_j\) | \(B_j\) | \(\mathit{IP}_j\) | In transit | \(I_0\) | \(B_0\) | On order | \(\mathit{IP}_0\) |
|---|---|---|---|---|---|---|---|---|---|
| 7 | storeroom receives 1 | 2 | 0 | 2 | 0 | 2 | 0 | 0 | 2 |
| 8 | failure, request, hub orders 4 | 1 | 0 | 2 | 1 | 1 | 0 | 4 | 5 |
| 8 | failure, request to hub | 0 | 0 | 2 | 2 | 0 | 0 | 4 | 4 |
| 8 | failure, request backordered | 0 | 1 | 2 | 2 | 0 | 1 | 4 | 3 |
Check the last row. Hub: \(0 + 4 - 1 = 3\). ✓
Storeroom: \(-1\) net, two in transit, one owed: \(-1 + 2 + 1 = 2\). ✓
Week 9. The two units arrive. The receipt posts first: one to the waiting crew (waited one week), one to the shelf. A failure takes it, and its request finds the hub empty: \(B_0 = 2\).
Week 10. A failure finds the shelf empty: a second crew waits. Its request is the hub’s third backorder and carries its position to 1 again.
The hub orders another 4, while the first is still on its way.
On order reads 8: two hub orders outstanding at once.
The first order arrives. The hub owes three requests, from weeks 8, 9 and 10.
| Week | Event | \(I_j\) | \(B_j\) | \(\mathit{IP}_j\) | In transit | \(I_0\) | \(B_0\) | On order | \(\mathit{IP}_0\) |
|---|---|---|---|---|---|---|---|---|---|
| 9 | receives 2, serves the waiting crew | 1 | 0 | 2 | 0 | 0 | 1 | 4 | 3 |
| 9 | failure, request backordered | 0 | 0 | 2 | 0 | 0 | 2 | 4 | 2 |
| 10 | failure backordered, request backordered, hub orders 4 | 0 | 1 | 2 | 0 | 0 | 3 | 8 | 5 |
| 11 | hub receives 4, fills three waiting requests | 0 | 1 | 2 | 3 | 1 | 0 | 4 | 5 |
One delivery clears three waiting requests at once. The fourth unit goes on the hub’s shelf.
| Week | Event | \(I_j\) | \(B_j\) | \(\mathit{IP}_j\) | In transit | \(I_0\) | \(B_0\) | On order | \(\mathit{IP}_0\) |
|---|---|---|---|---|---|---|---|---|---|
| 12 | receives 3, serves the waiting crew | 2 | 0 | 2 | 0 | 1 | 0 | 4 | 5 |
| 13 | hub receives 4 | 2 | 0 | 2 | 0 | 5 | 0 | 0 | 5 |
| 14 | failure, request to hub | 1 | 0 | 2 | 1 | 4 | 0 | 0 | 4 |
| 15 | storeroom receives 1 | 2 | 0 | 2 | 0 | 4 | 0 | 0 | 4 |
The crew waiting since week 10 waited two weeks. The hub’s second order arrives with nothing owed. The system is quiet again.
Nine failures, nine requests, three waited at the hub, two crews waited because of them.
Follow the requests. Six waited nothing; weeks 8, 9 and 10 waited 3, 2 and 1.
\[ \bar{W} = \frac{6}{9} = 0.667 \text{ weeks} \]
Weight the backorder level by time. 1 for a week, 2 for a week, 3 for a week: \(1 + 2 + 3 = 6\) unit-weeks, over nine requests. The same 0.667.
Little’s law again: the same area, counted along different axes.
The three waits of week 11 are one event. One delay, seen three times; not three independent draws.
The crews waited because the hub did. The storeroom’s stock never changed. Its shortages were manufactured at the hub.
A request that finds the hub’s position high waits nothing. In weeks 1 to 7 every request shipped at once.
Whether a request waits depends on where the hub’s position sits when it arrives. That observation is the next section.
Storerooms ordering one at a time pass each customer up the moment it occurs.
Four Poisson streams merge into one: \(\lambda_0 = \sum_j \lambda_j = 4\).
So the hub is exactly a chapter 8 location: \((r_0, Q_0)\) against Poisson demand with a constant lead time.
\(D_0(L_0)\) is Poisson with mean \(\theta_0 = \lambda_0 L_0 = 4 \times 3 = 12\). The \((r, Q)\) formulas apply unchanged.
The position of an \((r, Q)\) location is equally likely to sit at each of \(r + 1, \dots, r + Q\).
And it is independent of the demand that follows.
So its measures are base-stock measures averaged over \(Q\) positions.
Condition on the position, then average. That is the move.
\((r_0, Q_0) = (9, 8)\), loss functions read at mean 12:
\[ \bar{B}_0 = \frac{G^{2}(9) - G^{2}(17)}{8} = \frac{8.3910 - 0.1726}{8} = 1.0273 \text{ units} \]
\[ \overline{\mathit{RR}}_0 = 1 - \frac{G^{1}(9) - G^{1}(17)}{8} = 1 - \frac{3.3212 - 0.1451}{8} = 0.6030 \]
\[ \bar{I}_0 = \frac{8 + 1}{2} + 9 - 12 + 1.0273 = 2.5273 \text{ units} \]
On-hand less backorders must be the average position less the mean lead time demand.
\[ 2.5273 - 1.0273 = 1.5000, \qquad 9 + 4.5 - 12 = 1.5 \]
Do this every time. It catches most errors in reading a loss table at the wrong index.
The hub has stock only 60% of the time and holds about two and a half cutouts.
Thin for a central warehouse?
The hub carries no shortage cost of its own. Its shortages matter only through the storerooms, and each storeroom holds three units against them.
We will see this pair of policies is the exact optimum for \(Q_0 = 8\).
At \(Q_0 = 1\) the hub runs base stock, and the formulas collapse to chapter 9’s depot.
Eight positions here: eight such depots, averaged.
What breaks this: the Poisson stream at the hub. The moment a storeroom orders more than one unit at a time, the hub is no longer a chapter 8 location.
Little’s law never used one-for-one ordering at the supplier:
\[ \bar{W} = \frac{\bar{B}_0}{\lambda_0} = \frac{1.0273}{4} = 0.2568 \text{ weeks} \]
\(0.2568 \times 7 = 1.80\) days.
An average over every request, including the 60% filled at once.
The storeroom’s lead time is \(O_j + W\).
Chapter 8 handles a random lead time, but it needs the lead time’s distribution, or at least its variance.
So we want \(P(W \le w)\) for every \(w\).
One argument gives it: the lead-time shift of van der Wal.
Suppose the hub’s supplier were \(w\) weeks faster.
A request that waits at most \(w\) in the real system is exactly a request filled at once in the faster one.
Filled at once means the position one lead time earlier, \(L_0 - w\) in the faster system, covered the demand since, the request’s own unit included.
The position is uniform and independent of that demand, so:
\[ P(W \le w) = \frac{1}{Q_0}\sum_{u=r_0+1}^{r_0+Q_0} P\big(D_0(L_0 - w) \le u - 1\big), \qquad 0 \le w < L_0 \]
At \(w = 0\) the formula is the ready rate.
At any other \(w\):
\(P(W \le w)\) is the ready rate the hub would have with a lead time \(w\) shorter.
That is how the workbook computes the whole distribution: one formula to a row, a row per day.
With a negative reorder point a request can wait for an order placed after it arrives, and the shift no longer holds.
\(w = 0\): the window is the full lead time, mean 12. Positions \(u = 10, \dots, 17\), so average \(G(9)\) through \(G(16)\):
\[ P(W = 0) = \tfrac{1}{8}(0.2424 + 0.3472 + 0.4616 + 0.5760 + 0.6815 + 0.7720 + 0.8444 + 0.8987) = 0.6030 \]
\(w = 1\): mean \(4 \times 2 = 8\). The same eight entries of the mean 8 column average to 0.9117.
\(w = 2\): mean 4. They average to 0.9985.
Check: \(P(W = 0)\) is the ready rate, 0.6030. ✓
The mean of 1.8 days is the average of a wait that is usually zero and occasionally a week or more.
A second check: the area under \(P(W > w)\) on a day-wide grid is 0.2575, against Little’s 0.2568.
Little’s law has a distributional form (Bertsimas and Nakazato), in factorial moments, for Poisson arrivals served first come, first served:
\[ E[B_0(B_0 - 1)] = \lambda_0^{2} E[W^{2}] \]
Subtract the square of the mean:
\[ \mathit{Var}[W] = \frac{\mathit{Var}[B_0] - \bar{B}_0}{\lambda_0^{2}} = 0.1825 \text{ weeks}^{2} \]
Integrating the distribution gives the same figure to nine decimals. Two routes, checking each other.
Start with both levels one for one, chapter 9’s setting.
A unit the hub orders fills the \(S_0\)th hub demand after the order.
At the storeroom it fills the \(S_j\)th demand after that storeroom’s order.
Its cost depends on when those demands arrive, and Poisson demand makes that computable.
\(C(S_0, S_j)\): the system’s exact cost per week, both levels one for one.
\(\pi^{S_j}\): cost per unit at a storeroom whose supplier never runs out. \(\Pi^{S_j}(S_0)\): that cost when the hub sits at \(S_0\). For \(S_0 > 0\):
\[ \Pi^{S_j}(S_0 - 1) = \frac{\lambda_j}{\lambda_0}\Pi^{S_j - 1}(S_0) + \frac{\lambda_0 - \lambda_j}{\lambda_0}\Pi^{S_j}(S_0) + \frac{\lambda_j}{\lambda_0}\big(1 - P(D_0(L_0) \ge S_0)\big)\big(\pi^{S_j} - \pi^{S_j - 1}\big) \]
Started where the hub never runs out, it runs down a column. That is the workbook’s Exact sheet.
We do not derive it; Axsäter (1990) does. What matters: it is exact.
Every term is linear in the three cost rates.
Set the storerooms’ shortage cost to one and both holding costs to zero.
The “cost” the recursion returns is then the storerooms’ expected backorders.
The same trick returns either location’s expected on-hand.
The \(k\)th unit of a hub order of \(Q_0\) fills the \((r_0 + k)\)th hub demand after the order.
Exactly as if the hub ran base stock at \(S_0 = r_0 + k\).
Averaging over the units of a batch is averaging over the hub’s positions:
\[ C = \frac{1}{Q_0}\sum_{S_0 = r_0+1}^{r_0+Q_0} C(S_0, S_j) \]
Condition on the hub’s position, then average. The move, a second time.
\(S_j = 3\). One-for-one costs at \(S_0 = 10, \dots, 17\), dollars a week:
7.2105, 6.7516, 6.5493, 6.5587, 6.7352, 7.0373, 7.4296, 7.8837
\[ C = \frac{56.1559}{8} = \$7.0195 \text{ a week} \]
Backorder-only rates: 0.2906 across four storerooms, 0.0726 at each.
Check: the recursion’s hub on-hand is 2.5273, the \(\bar{I}_0\) we computed from chapter 8 an entirely different way. ✓
Search every \(r_0\) from \(-4\) to 16 and every \(S_j\) from 0 to 6, with \(Q_0 = 8\).
\((9, 3)\) is the cheapest.
Each storeroom owes its crews 0.07 of a cutout on average.
At one failure a week, that is about one crew-week of waiting in fourteen weeks.
The storeroom’s lead time is \(O_j + W\).
1. The mean wait only. Poisson, mean \(\lambda_j(O_j + \bar{W})\). METRIC’s move.
2. Two moments. Negative binomial, variance \(\lambda_j(O_j + \bar{W}) + \lambda_j^{2}\mathit{Var}[W]\). VARI-METRIC’s move.
3. Conditioned on the wait. Poisson at \(\lambda_j(O_j + w)\) for each \(w\), averaged over the wait’s distribution. The move, a third time.
| Route | Backorders per storeroom | Against exact |
|---|---|---|
| Exact, Axsäter | 0.0726 | |
| Conditioned on the wait | 0.0726 | exact |
| Two moments | 0.0712 | 2% low |
| The mean wait only | 0.0505 | 30% low |
The route that carries the whole distribution of the wait is not an approximation at all.
With first come, first served and \(r_0 \ge 0\), a request’s wait is fixed by what happened before it arrived: the hub’s position, its orders outstanding, the queue ahead.
The storeroom’s customers after the request are independent of all of that.
So each unit’s cost is the cost at lead time \(O_j + w\), averaged over the wait.
The linked waits of week 11 are real. For a base-stock storeroom they do not matter: what matters is that each unit’s wait is independent of the demand it will meet.
Little’s law gets the mean right.
The mean alone understates the storeroom’s backorders by 30%.
A wait that is usually zero and occasionally long hurts more than a steady wait of the same mean.
Carrying the variance recovers nearly all of it: chapter 9’s VARI-METRIC lesson, now made exact.
Next: let the storerooms batch too, and let other demand reach the hub.