Storerooms That Batch, and a Hub With Other Demand

Manuel D. Rossetti, PhD P.E.

Agenda

  • When the storerooms batch too: Axsäter’s exact results, and where they end
  • Counting a storeroom’s orders from the Poisson table
  • Two views of the same count: a random moment, and one of its own orders
  • A second ledger: a batching storeroom and other demand
  • The hub’s lead time demand: exact, a recipe, and a shortcut to avoid
  • The wait of an order, not a unit
  • A supplier whose lead time varies

Where Deck 1 Left Us

With one-for-one storerooms, everything was exact:

  • the hub was a chapter 8 location
  • its wait was the ready rate at a shorter lead time
  • conditioning on the wait matched Axsäter to the last decimal

Now let the storerooms order \(Q_j\) at a time. The hub no longer sees their customers.

One Storeroom, Counted in Batches

Axsäter counts the hub in storeroom batches: \(Q_w\) batches per hub order, reorder point \(R_w\) batches.

\[ Q_0 = Q_w Q_j \text{ units}, \qquad r_0 = R_w Q_j \]

The storeroom’s order triggered the hub’s, so its position was just reset to \(r_j + Q_j\).

Its next orders come after exactly \(Q_j\), \(2Q_j\), … further demands.

Equation (2): The Move Again

The \(i\)th sub-batch is released against system demand \(iQ_j\), and its units fill the storeroom’s \((r_j + 1)\)th to \((r_j + Q_j)\)th demands.

\[ C = \frac{1}{Q_w Q_j}\sum_{i=R_w+1}^{R_w+Q_w}\ \sum_{k=r_j+1}^{r_j+Q_j} C(iQ_j, k) \]

An average of one-for-one costs, over the hub’s positions and the storeroom’s.

One Batching Storeroom Behind the Hub

Crews draw two cutouts a week. The storeroom orders \(Q_j = 3\), a week from a hub that orders \(Q_w = 2\) batches (six units) with a three-week lead time.

At \((R_w, r_j) = (0, 6)\): hub positions 3 and 6, storeroom positions 7, 8, 9.

\(k = 7\) \(k = 8\) \(k = 9\)
\(S_0 = 3\) 3.6962 3.1290 3.0011
\(S_0 = 6\) 3.1694 3.5117 3.9591

\[ C = \frac{20.4665}{2 \times 3} = \$3.4111 \text{ a week} \]

The Hub Is Nearly a Pass-Through

\((0, 6)\) is the exact optimum, and it holds almost nothing at the hub:

0.52 cutouts on hand at the hub, against 4.13 at the storeroom.

With one storeroom there is nothing to pool, and stock is worth more a week closer to the crews.

Raise the hub’s reorder point to one batch: 1.5 units move to the hub, the best storeroom policy falls to \(r_j = 3\), and the cost rises to $3.5354, 3.6% more.

Several Storerooms

With \(N\) storerooms, the \(i\)th sub-batch is not released at a fixed system demand. It depends on where the other storerooms’ positions sit.

Axsäter’s \(p_{i,j}\): the chance the \(i\)th system demand after a hub order triggers the \(j\)th storeroom order.

The triggering storeroom has just reset. The other \(N - 1\) have positions equally likely to sit anywhere in their ranges. The move, again.

The recursion is in the software. We need its structure, not its algebra.

Where Exactness Ends

Case Status Source
Hub batches, storerooms one for one, Poisson Exact Axsäter (1993), eq. (1)
Both batch, one storeroom Exact Axsäter (1993), eq. (2)
Both batch, identical storerooms, Poisson Exact Axsäter (1993), eq. (6)
Both batch, two storerooms that differ Exact Axsäter (1998)
Both batch, compound Poisson demand Exact Axsäter (2000)
Hub demand as a renewal stream of batches Approximate Deuermeyer and Schwarz; Svoronos and Zipkin

Every exact row assumes no other demand at the hub and constant lead times. A real hub has both. That is the rest of this deck.

Orders in a Window

The hub sees one order of \(Q_j\) each time the customers carry the storeroom’s position down through \(r_j\).

How many orders fall in a window?

The storeroom’s orders are its customers’ demand, counted in whole batches.

The Order-Count Law

Let \(u \in \{1, \dots, Q_j\}\) be how far the position sits above \(r_j\) when the window opens. \(D\): the customers’ demand in the window; \(N\): the orders placed.

The first order comes after \(u\) units, each later one after \(Q_j\) more:

\[ N \ge n \iff D \ge u + (n - 1)Q_j \]

\(u\) is uniform on its \(Q_j\) values. Average over them:

\[ P(N \ge n) = \frac{1}{Q_j}\sum_{y=(n-1)Q_j+1}^{nQ_j} P(D \ge y), \qquad n \ge 1 \]

Read It as a Sentence

The chance of at least \(n\) orders is the average of \(Q_j\) consecutive entries of the demand’s tail.

With Poisson customers, that is chapter 8’s table and nothing else.

Two checks, both to be run:

  • At \(Q_j = 1\) it is \(P(D \ge n)\): the hub sees the customers, Part I
  • \(Q_j E[N] = E[D]\): the storeroom passes up exactly its customers’ demand

Seen From One of Its Own Orders

A window ending at one of the storeroom’s orders is not a random moment for that storeroom.

Its position has just reached \(r_j\), so \(u\) is known, not uniform.

Let \(D'\) be the demand in the window before the triggering demand. Still Poisson.

The storeroom’s earlier orders in the window number \(\lfloor D'/Q_j \rfloor\). That is the whole difference, and the order’s wait will need it.

Counting a Storeroom’s Orders

Two cutouts a week, \(Q_j = 3\), a three-week window: \(D\) is Poisson with mean 6.

\(y\) 1 2 3 4 5 6 7 8 9 10 11 12
\(P(D \ge y)\) .9975 .9826 .9380 .8488 .7149 .5543 .3937 .2560 .1528 .0839 .0426 .0201

Average in threes:

\[ P(N \ge 1) = 0.9727,\quad P(N \ge 2) = 0.7060,\quad P(N \ge 3) = 0.2675,\quad P(N \ge 4) = 0.0489 \]

Difference: \(P(N = 0, 1, 2, 3) = 0.0273,\ 0.2667,\ 0.4385,\ 0.2186\).

Check It

Carry the small masses for four, five and six orders: 0.0443, 0.0044, 0.0002.

\[ 3E[N] = 3(0.2667 + 2 \times 0.4385 + 3 \times 0.2186 + 4 \times 0.0443 + 5 \times 0.0044 + 6 \times 0.0002) \]

\[ = 3(1.9999) = 6.0 \]

The customers’ mean demand. ✓

The Same Count, Seen From an Order

\(\lfloor D'/3 \rfloor\) is 0 when \(D' \le 2\), 1 when \(3 \le D' \le 5\), and so on:

Orders 0 1 2 3
At a random moment 0.0273 0.2667 0.4385 0.2186
Seen from an order 0.0620 0.3837 0.4015 0.1327

Much more weight on few orders. The storeroom has just ordered: its position is at the top of its range, the farthest it can be from its next order.

Lumpy, and Regular

The customers’ demand over three weeks runs from 0 to a dozen or more.

The hub sees 0, 3, 6, 9 or 12 units, with two orders, six units, the most likely.

That is the lumpiness.

And the count bunched tightly around two is the regularity.

A Second Ledger

Hub: \((r_0, Q_0) = (1, 6)\), \(L_0 = 3\) weeks, starts with 7.

Storeroom: \((r_j, Q_j) = (1, 3)\), a week away, starts with 4.

Crew failures in weeks 1, 3, 5, 7, 8, 9, 9, 10, 11.

One unit of other demand reaches the hub in each of weeks 2 and 4.

Same columns, same posting rule, same two-way position check as the first ledger.

Weeks 1 to 6

Week Event \(I_j\) \(B_j\) \(\mathit{IP}_j\) In transit \(I_0\) \(B_0\) On order \(\mathit{IP}_0\)
1 failure 3 0 3 0 7 0 0 7
2 other demand at the hub 3 0 3 0 6 0 0 6
3 failure 2 0 2 0 6 0 0 6
4 other demand at the hub 2 0 2 0 5 0 0 5
5 failure, order of 3 to hub, shipped 1 0 4 3 2 0 0 2
6 storeroom receives 3 4 0 4 0 2 0 0 2

Failures in weeks 1 and 3 never reach the hub. Its position moves only for its own customers.

Week 5: the storeroom hits its reorder point, and an order of 3 arrives at the hub at once.

Week 9: Ship Two, Owe One

Two failures in weeks 7 and 8; the hub sees neither.

Week 9: the storeroom orders three. The hub has two. It ships two and owes one.

The order of 3 takes the hub’s position from 2 to \(-1\), two below its reorder point. The hub orders six, due week 12; position 5.

Undershoot. One order of three carried the position past \(r_0\) in a single step, exactly what a lumpy demand did in chapter 8.

Weeks 7 to 10

Week Event \(I_j\) \(B_j\) \(\mathit{IP}_j\) In transit \(I_0\) \(B_0\) On order \(\mathit{IP}_0\)
7 failure 3 0 3 0 2 0 0 2
8 failure 2 0 2 0 2 0 0 2
9 failure, order of 3: 2 shipped, 1 backordered, hub orders 6 1 0 4 2 0 1 6 5
9 failure 0 0 3 2 0 1 6 5
10 storeroom receives 2 2 0 3 0 0 1 6 5
10 failure 1 0 2 0 0 1 6 5

Check week 9’s first row at the hub: \(0 + 6 - 1 = 5\). ✓

Week 12: The Payoff Row

Week 11: the storeroom orders three more. The hub’s shelf is empty, so the whole order waits; the hub owes four.

Week Event \(I_j\) \(B_j\) \(\mathit{IP}_j\) In transit \(I_0\) \(B_0\) On order \(\mathit{IP}_0\)
11 failure, order of 3 to hub, backordered 0 0 4 0 0 4 6 2
12 hub receives 6, completes the week-9 order, fills week 11’s 0 0 4 4 2 0 0 2
13 storeroom receives 4 4 0 4 0 2 0 0 2

The week-9 order is complete only now. Two thirds of it left at once, and it still waited three weeks: an order is filled when its last unit is.

The Count, Checked

The storeroom ordered in weeks 5, 9 and 11.

Weeks 9 to 11 hold two orders. Weeks 6 to 8 hold none.

Both are values the order-count law gives appreciable probability.

The second is the regularity: a storeroom that has just ordered does not order again for a while.

The Hub With Other Demand

\(X_o(\ell)\): other demand in a window, Poisson with mean \(\lambda_o \ell\). \(N_j(\ell)\): storeroom \(j\)’s orders, by the order-count law.

\[ D_0(\ell) = X_o(\ell) + \sum_j Q_j N_j(\ell) \]

The terms are independent: each storeroom’s position is uniform and independent of every other’s.

A convolution: a short table by hand, a worksheet column otherwise. Then chapter 8’s formulas, unchanged.

Nothing needs the storerooms to be identical. Each adds one term.

A Caution on the Hub’s Position

The hub’s position is uniform on \(r_0 + 1, \dots, r_0 + Q_0\) provided some of its demand comes one unit at a time.

When its only demand is storeroom orders of a common size \(Q_j\), the position moves in steps of \(Q_j\).

It is then uniform on the multiples of \(Q_j\) in that band instead.

That is why Axsäter counts the hub in batches.

A Two-Moment Recipe

The mean is \(\lambda_0 \ell\). For the variance, write the orders as demand plus the change in position:

\[ Q_j N_j = D + U_\ell - U_0 \]

Over a long window, \(U_0\) and \(U_\ell\) are independent and uniform on \(1, \dots, Q_j\), each with variance \((Q_j^{2} - 1)/12\).

\[ \mathit{Var}[D_0(\ell)] \approx \lambda_o \ell + \sum_j \Big(\lambda_j \ell + \frac{Q_j^{2}}{6}\Big) \]

The exact long-window term is \((Q_j^{2} - 1)/6\). The recipe errs by a sixth of a unit squared, on the safe side.

The Shortcut to Warn Against

Treat each storeroom’s orders as Poisson arrivals of \(Q_j\) units at rate \(\lambda_j/Q_j\).

Its variance term becomes \(\lambda_j Q_j \ell\): \(Q_j\) times its customers’ own.

The storeroom’s orders are not random in that way. It orders once per \(Q_j\) units of demand, nearly on a schedule. The shortcut charges the hub for a randomness that is not there.

A Hub With Other Demand: The Setting

The hub serves two cutouts a week of its own customers and the storeroom we just counted (\(\lambda_j = 2\), \(Q_j = 3\), \(r_j = 3\)). The hub runs \(Q_0 = 8\), \(L_0 = 3\).

What is stocked? The cutout, at the hub and one storeroom.

Demand? Poisson, two a week at each, one unit per customer.

Review? Continuous. Replenishment? Storeroom at \(r_j = 3\) for 3; hub at \(r_0\) for 8.

Unmet demand? Backordered at both levels.

Costs? For this example the hub is priced alone, \(h\) and \(b\) per week on its own on-hand and backorders.

Three Variances, Three Policies

\(D_0(3) = X_o(3) + 3N(3)\): Poisson with mean 6, plus 0, 3, 6, 9 or 12.

Variance Reorder point chosen True cost a week
Exact convolution 13.333 13 $4.4054
Recipe: \(6 + 6 + 9/6\) 13.5 13 $4.4054
Shortcut: \(6 + 2 \times 3 \times 3\) 24 15 $4.6533

Check: mean \(4 \times 3 = 12\). The exact variance exceeds the customers’ 12 by 1.333, which is \((3^{2} - 1)/6\). ✓

Read the Table

The shortcut believes the hub faces nearly twice the variance it does.

It holds two cutouts too many and costs 5.6% more.

The recipe is within a sixth of a unit squared and chooses the same reorder point as the exact convolution.

The shortcut is not eccentric. It is the natural reading of “orders of \(Q_j\) at rate \(\lambda_j/Q_j\)”. Check for it in any planning system.

Where the Recipe Stops

At \(Q_j = 1\) the convolution is Poisson with mean 12: the hub of Part I. ✓

The recipe’s error stays bounded as the window grows.

Not as it shrinks: over a window holding one order or none, the rounding term is far from its long-window value.

Short windows: use the convolution.

An Order Waits Differently From a Unit

The lead-time shift still applies: an order placed at \(A\) is complete by \(A + w\) exactly when, with the supplier \(w\) faster, it would have been complete at \(A\).

Three things differ from a customer’s single unit, all visible in the ledger:

  1. The order needs \(Q_j\) units, not one.
  2. Other demand and other storerooms are seen as a random moment sees them.
  3. The storeroom’s own earlier orders are seen from the order: \(\lfloor D_j'/Q_j \rfloor\) of them.

The Order’s Wait

With \(\ell = L_0 - w\) and \(u\) averaged over the hub’s positions:

\[ P(W_j \le w) = \frac{1}{Q_0}\sum_{u=r_0+1}^{r_0+Q_0} P\Big(X_o(\ell) + \sum_{i \ne j} Q_i N_i(\ell) + Q_j\big\lfloor D_j'(\ell)/Q_j \big\rfloor \le u - Q_j\Big) \]

for \(0 \le w < L_0\).

At \(Q_j = 1\) it reduces to deck 1’s customer wait. ✓

Conditioning on this wait is exact, for deck 1’s reason: the wait is fixed by the history up to the order, and the customers after it are independent of that history.

Checked Against Axsäter

The code checks the route wherever both apply:

  • 144 policies with one storeroom, against his equation (2)
  • 96 policies with four identical storerooms, against his equation (6)

Agreement to six decimals or better.

The order’s own view is not a refinement. Using a customer’s wait in its place overstates the cost by 14% on one of those test systems.

The Storeroom of the Hub With Other Demand

Hub at \((r_0, Q_0) = (12, 8)\), storeroom at \((r_j, Q_j) = (3, 3)\), one week away.

\(P(W = 0)\) \(P(W \le 1)\) Mean wait, weeks
A hub customer 0.8228 0.9797 0.0874
The storeroom’s order 0.7626 0.9668 0.1264

Storeroom backorders:

Route Backorders Against conditioned
Conditioned on the order’s wait 0.0823
Two moments 0.0783 5% low
The mean wait only 0.0559 32% low

Why the Order Waits Longer

The storeroom’s orders wait 45% longer on average than the hub’s own customers.

Each needs three units rather than one.

And each arrives just after a draw of three the hub has had no time to recover from.

With the batches held at \(Q_0 = 8\) and \(Q_j = 3\), \((r_0, r_j) = (12, 3)\) is the cheapest pair for the whole system, at $5.6675 a week.

A Supplier Whose Lead Time Varies

Let \(L_0\) take values \(\ell_1, \dots, \ell_K\) with probabilities \(p_1, \dots, p_K\).

Condition on the lead time, then average:

\[ P\big(D_0(L_0) \le x\big) = \sum_k p_k\, P\big(D_0(\ell_k) \le x\big) \]

The measures average the same way, since each is an expectation. So does the wait:

\[ P(W \le w) = \sum_k p_k\, P(W \le w \mid L_0 = \ell_k) \]

provided orders do not overtake and lead times are independent of demand.

The Order of Operations Matters

Both streams are counted over the same lead time.

They are independent only once its value is known.

Average each stream over the lead time on its own, then add them, and you lose the covariance a shared lead time creates:

\[ 2\lambda_o\lambda_j\mathrm{Var}[L_0] \]

The variance is understated.

Two, Three or Five Weeks

The system just priced, but the supplier takes 2, 3 or 5 weeks with probabilities 0.4, 0.4, 0.2.

\[ E[L_0] = 3, \qquad \mathrm{Var}[L_0] = 0.4(1) + 0.4(0) + 0.2(4) = 1.2 \text{ weeks}^{2} \]

Mean Variance
Built at each value, then averaged 12 32.535
Each stream averaged alone 12 22.935

Check: \(32.535 - 22.935 = 9.6 = 2 \times 2 \times 2 \times 1.2\). ✓

What Varying the Supplier Does

At \((r_0, Q_0) = (12, 8)\):

  • the hub’s ready rate falls from 0.8228 to 0.7656
  • its backorders rise from 0.3497 to 0.9948
  • the order’s wait: mean 0.3037 weeks, variance 0.4396
Storeroom planned on \(r_j\) Backorders Cost a week
The mean wait only 3 0.239 $2.7771
Two moments, or the whole wait 4 0.143 $2.7472

Two Numbers, Both Worth Stating

The supplier’s variability multiplies the variance the hub covers by two and a half, and it carries down to the storeroom through the wait.

Planned on the mean wait, the storeroom owes its crews 67% more than it needs to.

At a cost only 1.1% higher.

A utility that watches cost will not notice what its crews do. Report both.

What to Measure

When the supplier delivers in the order orders were placed, use the time from placement to receipt, order by order.

With data: a handful of values at its quantiles, equal weights.

With only a mean and a standard deviation: the values must come from a family you choose, and you should say so.

When orders overtake one another, the model over-protects, as chapter 8 warned. Correcting for it is beyond this chapter.

Where We Are

  • Axsäter is exact for the hub’s own storerooms, constant lead times, no other demand
  • A storeroom’s orders are its demand in whole batches, countable from the Poisson table
  • The hub’s lead time demand is a convolution; the recipe is close, the shortcut over-stocks
  • An order’s wait is its own, and conditioning on it matches Axsäter
  • A random lead time: build at each value, then average

Next: we can evaluate any pair of policies. Now choose them.

⌂ Index