A crew that draws eight connectors, or a storm that takes out four cutouts on one pole, does not demand one unit at a time.
Let a demand epoch represent an occasion on which a demand arrives, let \(\lambda_{e}\) represent the rate of epochs, and let \(Y\) represent the lot size, the units demanded at one epoch. Assume the epochs are Poisson, the lots are independent of each other and of the timing, \(Y \ge 1\), and \(P\{Y = 1\} > 0\).
\[ \lambda = \lambda_{e}E[Y] \qquad \text{(units per year = epochs per year} \times \text{units per epoch)} \]
Notice that the epoch rate is not the demand rate. Demand over an interval is compound Poisson.
Two modeling choices are built in. A lot can be partly filled: a crew asking for five when two are on the shelf takes two and is owed three. Service is measured in units: \(\bar{B}\) counts units owed, not crews waiting.
A compound Poisson sum needs only the second moment of the lot size:
\[ \begin{aligned} \theta &= \lambda_{e}E[Y]L = \lambda L &&\text{epochs in } L \text{, times units each}\\ \sigma^{2} &= \lambda_{e}E[Y^{2}]L &&\text{compound Poisson variance}\\ \mathit{VMR} &= \frac{\sigma^{2}}{\theta} = \frac{E[Y^{2}]}{E[Y]} > 1 &&Y^{2} \ge Y \text{, equal only when } Y = 1 \end{aligned} \]
Lumpy demand is never Poisson, however the lot size is distributed, and the negative binomial is where its lead time demand will usually be found.
The mean is \(\lambda L\) as before. An organization looking only at averages will see nothing at all. Everything lumpiness does, it does to the variance.
The storeroom’s fuse cutout: 800 a year, \(c = \$115\), \(k = \$82.50\), \(h = 0.25(115) = \$28.75\), and \(b = \$287.50\) per unit per year, ten times \(h\), since a cutout short holds up a restoration. Two weeks’ lead time.
| Lot size \(Y\) | 1 | 2 | 4 |
|---|---|---|---|
| Probability | 0.40 | 0.40 | 0.20 |
\[ \begin{aligned} E[Y] &= 0.4 + 0.8 + 0.8 = 2.0\\ E[Y^{2}] &= 0.4 + 1.6 + 3.2 = 5.2\\ \lambda_{e} &= 800/2.0 = 400 \text{ lots a year} \end{aligned} \]
\[ \begin{aligned} \theta &= 800\left(\tfrac{1}{26}\right) = 30.77 \text{ units}\\ \sigma^{2} &= 400(5.2)\left(\tfrac{1}{26}\right) = 80.00, \quad \sigma = 8.94 \end{aligned} \]
One at a time, the same 800 a year would be Poisson with \(\sigma = \sqrt{30.77} = 5.55\). The lots raise it to 8.94, a 61% increase in the standard deviation at an unchanged mean. The ratio is \(5.2/2.0 = 2.60\): negative binomial.
An \((r, Q)\) policy assumed the position lands exactly on \(r\). With lots it can jump straight past.
The \((r, S)\) policy. At or below \(r\), order up to \(S\). The order size \(S - \mathit{IP}\) is at least \(S - r\) and is random. Written \((s, S)\) later today.
The \((r, nQ)\) policy. Order whole multiples of a basic batch \(Q\) until the position is back above \(r\). The one to use when there is a natural batch: a case, a reel, a truckload.
Almost nothing else changes. Under \((r, nQ)\) the position is still uniform on \(r+1, \ldots, r+Q\), so the four exact measures, the cost average, the bounds and Algorithm Optimize_rq all apply as written, with the compound Poisson loss functions and \(\theta = \lambda_{e}E[Y]L\).
The best \((r, S)\) policy is optimal among all policies; \((r, nQ)\) is not, and is usually close.
Lot epochs are Poisson, so by PASTA an arriving lot sees the time-stationary \(\mathit{IN} = \mathit{IP} - D(L)\). The ready rate is the share of lots that find a unit on the shelf. A lot of \(Y\) takes \(\min(Y, \mathit{IN}^{+})\):
\[ \begin{aligned} \min(Y, \mathit{IN}^{+}) &= \textstyle\sum_{j \ge 1} 1\{Y \ge j\}\,1\{\mathit{IN} \ge j\} &&\text{unit by unit}\\ P\{\mathit{IN} \ge j\} &= \frac{1}{Q}\sum_{s=r+1}^{r+Q}G(s-j) &&\text{average over the position}\\ &= 1 - \frac{1}{Q}\left[G^{1}(r-j+1) - G^{1}(r+Q-j+1)\right] &&\text{tail sums}\\ \overline{\mathit{FR}}(r, Q) &= \frac{1}{E[Y]}\sum_{j=1}^{y_{\max}}P\{Y \ge j\}\,P\{\mathit{IN} \ge j\} &&\text{lot independent of state} \end{aligned} \]
Notice the \(j = 1\) term is the ready rate, with weight 1. Every further term has \(P\{\mathit{IN} \ge j\}\) no larger, and the weights sum to \(E[Y]\). Thus, under lots the unit fill rate is below the ready rate.
Algorithm Optimize_rq runs unchanged on the compound Poisson loss functions.
| Lots of 1, 2 or 4 | One at a time | |
|---|---|---|
| \(\sigma\) of lead time demand | 8.94 | 5.55 |
| \(S^{*}\) | 43 | 38 |
| \((r^{*}, Q^{*})\) | \((25, 75)\) | \((24, 73)\) |
| \(C^{*}\) | $2,010.22 | $1,921.64 |
| Ready rate | 0.9060 | 0.9038 |
| Unit fill rate | 0.8978 | 0.9038 |
| Lot fill rate | 0.8957 | 0.9038 |
Lumpiness costs $88.58 a year, 4.6%, on identical average demand. The reorder point rises by one and the batch by two; almost all of the extra cost is carrying the stock that covers the larger tail.
Notice the last three rows. One at a time they coincide; under lots they separate.
The storeroom reports a 90.6% service level on the cutout. What share of the cutouts asked for does it fill?
| \(j\) | 1 | 2 | 3 | 4 |
|---|---|---|---|---|
| \(P\{Y \ge j\}\) | 1.00 | 0.60 | 0.20 | 0.20 |
| \(P\{\mathit{IN} \ge j\}\) at \((25, 75)\) | 0.9060 | 0.8960 | 0.8855 | 0.8746 |
\[ \begin{aligned} \overline{\mathit{FR}} &= \frac{0.9060 + 0.60(0.8960) + 0.20(0.8855) + 0.20(0.8746)}{2.0} = \frac{1.7956}{2.0} = 0.8978\\ \text{lot fill rate} &= 0.40(0.9060) + 0.40(0.8960) + 0.20(0.8746) = 0.8957 \end{aligned} \]
The check. The weights of the first row sum to 2.0, which is \(E[Y]\).
It fills 89.8% of the cutouts asked for and sends 10.4% of its crews away short.
Let \(s\) represent the reorder point and \(S > s\) the order-up-to level. Whenever the position falls to \(s\) or below, order enough to bring it back to \(S\). The order size \(S - \mathit{IP}\) is random. Let
\[ U = s - \mathit{IP} \text{ just before the order} \]
represent the undershoot, the amount by which the position passes \(s\).
Ordering a fixed \(Q\) leaves the position at \(s - U + Q\), which is random, so successive cycles start from different places.
Ordering up to \(S\) starts every cycle at \(S\), whatever the undershoot was. That is why the policy exists.
When \(S - s\) is wide compared with a lot, \(U\) has the equilibrium distribution
\[ \begin{aligned} P\{U = j\} &= \frac{P\{Y > j\}}{E[Y]}, \quad j = 0, 1, \ldots\\ E[U] &= \frac{1}{E[Y]}\sum_{j \ge 0} j\,P\{Y > j\} = \frac{E[Y^{2}] - E[Y]}{2E[Y]} \end{aligned} \]
Treat it as \((r, Q)\) with \(r = s\) and \(Q = S - s\), with one correction:
\[ \begin{aligned} \text{order size} &= S - (s - U) = (S - s) + U &&\text{every order follows an undershoot}\\ E[\text{order size}] &= S - s + E[U] &&\text{take expectations}\\ \overline{\mathit{OF}} &= \frac{\lambda}{S - s + E[U]} &&\text{orders at the rate demand consumes them} \end{aligned} \]
For the cutout, \(E[U] = (5.2 - 2.0)/(2 \times 2.0) = 0.8\) units.
| \((s, S)\) | \(S - s\) | Exact | Uncorrected | Error | Corrected | Error |
|---|---|---|---|---|---|---|
| \((40, 44)\) | 4 | $14,578.99 | $17,001.21 | \(+16.61\%\) | $14,251.21 | \(-2.25\%\) |
| \((38, 48)\) | 10 | $6,635.86 | $7,117.18 | \(+7.25\%\) | $6,628.30 | \(-0.11\%\) |
| \((36, 56)\) | 20 | $3,755.69 | $3,876.25 | \(+3.21\%\) | $3,749.33 | \(-0.17\%\) |
| \((25, 100)\) | 75 | $2,010.10 | $2,010.22 | \(+0.01\%\) | $2,000.93 | \(-0.46\%\) |
Uncorrected, the approximation overstates how often the system orders, and so overstates the ordering cost. It is excellent when the spread is wide and badly wrong when it is narrow.
Corrected, the error is under half a percent at every spread down to ten.
The rule of thumb. The uncorrected form is safe when \(S - s\) is large compared with the lot sizes, here compared with 4. At a spread of 75 the correction makes no difference. At a spread of 4, the size of one large lot, nothing about the policy resembles \((r, Q)\) and only the exact treatment is trustworthy.
The check. The correction predicts \(800/(75 + 0.8) = 10.554\) orders a year at \((25, 100)\), and an exact calculation gives 10.554. At \((36, 56)\) it predicts \(800/20.8 = 38.462\) against an exact 38.462. The correction is not a fudge factor; it is the average order size.
Scarf (1960)
Consider a stock point reviewed at fixed intervals over a finite horizon, facing independent random demands, charging a fixed cost \(k\) per order and convex holding and shortage costs per period. Then in every period there exist \(s \le S\) such that ordering up to \(S\) when the position is at or below \(s\), and nothing otherwise, minimizes expected total cost.
What it delivers. The \((s, S)\) form is right, so nothing is gained by searching over more complicated rules.
What it does not. It does not say what \(s\) and \(S\) are, and it does not make the cost convex in them.
The condition. Scarf’s result is for a system reviewed at fixed intervals, not one watched continuously. When review is periodic the same rule becomes \((R, s, S)\): every \(R\), look, and if the position is at or below \(s\), order up to \(S\).
Lots leave the mean alone and raise the variance. The cutout’s lead time standard deviation rose 61% at the same 800 a year.
Under \((r, nQ)\) the machinery carries over unchanged, with compound Poisson loss functions in place of Poisson ones.
The fill rate separates from the ready rate. On the cutout, a 90.6% ready rate is an 89.8% unit fill rate and an 89.6% lot fill rate.
The \((s, S)\) policy orders up to a level because of the undershoot. Treated as \((r, Q)\), it needs \(E[U]\) added to the average order size.
Scarf’s theorem says the form is right, for periodic review, and says nothing about the numbers.
Read before next session: When Review Is Periodic.
Today’s material was Lumpy Demand and The (s, S) Policy.
Next session:
The undershoot returns next session for a second reason: a review interval lets the position fall past \(s\) even when demand arrives one unit at a time.