A Hub That Orders in Batches

Manuel D. Rossetti, PhD P.E.

Agenda

  • What changes when a location orders in batches
  • The cutout, the hub, and four storerooms
  • Two locations by hand, one event at a time
  • The hub is a chapter 8 problem, exactly
  • The wait it imposes: the whole distribution, not only the mean
  • Axsäter’s exact answer, and three ways to approximate it

Chapter 9 Had One Assumption Doing the Work

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 Batch Changes What the Supplier Sees

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.

Three Things Change at the Hub

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.

Three Parts, Each Earning the Next

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 Item and the Network

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.

The Modeling Questions

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.

Why the Hub Has No Shortage Cost

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.

Notation, Once

  • \(\lambda_j\), \(\lambda_0\): demand rates at storeroom \(j\) and at the hub, units a week
  • \(L_0\): the hub’s lead time from its supplier; \(O_j\): transit, hub to storeroom
  • \((r_0, Q_0)\) and \((r_j, Q_j)\): the two policies; base stock \(S_j\) is \((S_j - 1, 1)\)
  • \(D_0(\ell)\): the hub’s demand in a window of \(\ell\) weeks
  • \(W\): the time a request waits at the hub before it ships
  • \(\bar{B}_0\), \(\overline{\mathit{RR}}_0\), \(\bar{I}_0\): the hub’s backorders, ready rate, on-hand

Running example: \(\lambda_j = 1\), \(\lambda_0 = 4\), \(L_0 = 3\), \(O_j = 1\).

The Ledger, Set Up

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.

The Check on Every Row

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.

Weeks 1 to 7

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.

Week 8: The Storm

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 8, Posted

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\). ✓

Weeks 9 and 10

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.

Week 11: The Payoff Row

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.

Weeks 12 to 15

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.

The Mean Wait, Two Ways

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.

What Else the Ledger Establishes

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.

The Hub Is a Chapter 8 Problem

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.

Recall How Chapter 8 Got Them

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.

The Hub’s Measures

\((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} \]

Always Check It

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.

Sixty Percent Is Deliberate

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\).

Where This Stops Applying

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.

The Mean Wait

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.

A Random Lead Time Needs More Than a Mean

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.

The Lead-Time Shift

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 \]

Read It Against the Ready Rate

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.

Three Conditions, Each of Which Can Fail

  • Requests are filled first come, first served
  • Deliveries from the supplier do not overtake one another
  • \(r_0 \ge 0\)

With a negative reorder point a request can wait for an order placed after it arrives, and the shift no longer holds.

The Running Example’s Wait

\(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 Shape the Mean Hides

  • Six requests in ten ship at once
  • Nine in ten within a week
  • Almost none past two weeks

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.

The Second Moment

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.

Axsäter’s Recursion: Track One Unit

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.

The Recursion

\(\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.

The Costs Give the Stock Levels Too

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.

Now Let the Hub Batch

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.

Exact Measures for the Running Example

\(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. ✓

Why the Example Sits at (9, 3)

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.

Three Routes to the Storeroom’s Lead Time Demand

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.

Priced Against the Exact Answer

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.

Why Conditioning Is Exact Here

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.

The Mean Alone Is Not Enough

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.

Where We Are

  • Batching changes the supplier’s demand, the wait, and the order of solution
  • With one-for-one storerooms, the hub is a chapter 8 location, exactly
  • The wait’s distribution is the ready rate at a shortened lead time
  • Axsäter’s recursion prices everything exactly
  • Conditioning on the wait matches it; the mean alone misses by 30%

Next: let the storerooms batch too, and let other demand reach the hub.

⌂ Index