Skip to main content

9. Distribution MEIO and Serial Simulation

The previous chapter introduced multi-echelon inventory optimization (MEIO) and the simplified guaranteed-service risk-period model for a serial chain. This lesson extends that toolkit in two directions that appear constantly in practice:

  1. Distribution networks — one upstream node can serve several downstream branches (a central warehouse feeding stores or regions).
  2. Policy simulation — turn local and echelon targets into a short, inspectable time loop so you can check service before trusting a spreadsheet answer.

Original teaching rewrite for this course. Numbered network examples are constructed for the drills below; they mirror the structure of classic GSM results without reprinting a commercial textbook.

Distribution topology under guaranteed service​

In a distribution network each node has at most one supplier, and possibly many customers. A common pattern is:

  • Node 1: central stocking point (incoming lead time L1L_1)
  • Node 2: regional hub fed by node 1 (incoming lead time L2L_2)
  • Nodes 3–5: demand-facing sites fed by node 1 or node 2 (incoming lead times L3,L4,L5L_3,L_4,L_5)

Under the same GSM assumptions used for serial chains (aligned review period RR, deterministic lead times, bounded demand with an explicit exception response), Inderfurth-type results say that a distribution network can still be optimized by checking a small set of all-or-nothing buffer placements: each candidate stocking point either covers the full risk segment back to the next upstream buffer, or holds none.

For a three-echelon distribution sketch with five nodes, four representative placements are enough to illustrate the idea (not every industrial network collapses to four cases, but the search tree stays small compared with a naïve continuous allocation).

Risk-period table for a concrete sketch​

Take L=[4,2,1,1,1]L=[4,2,1,1,1] and R=1R=1. Label nodes upstream → branches as 1,…,51,\ldots,5. Four feasible placements (periods of demand protected by safety stock at each node) are:

Casex1x_1x2x_2x3x_3x4x_4x5x_5Idea
142222Buffer at every echelon
240233Skip the regional buffer; branches absorb more
306522Push the first buffer to the hub
400577Hold only at demand-facing sites

Each row covers the network’s exposure: demand nodes always include RR, and a “transparent” intermediate node (xi=0x_i=0) shifts protection onto its downstream clients. The arithmetic is the same as the serial lesson once each node’s xix_i is known:

SSi=z σd,i xi,Ch=∑ihiSSiSS_i = z\,\sigma_{d,i}\,\sqrt{x_i},\qquad C_h=\sum_i h_i SS_i

Use the local demand standard deviation at that node (see pooling below). Minimizing total units is again not the same as minimizing holding cost when hih_i rises downstream.

The serial lesson’s cost explorer still applies once each node’s xix_i and σd,i\sigma_{d,i} are set—compare holding-cost weighted cases rather than raw unit totals.

Demand pooling at aggregation nodes​

A regional or central node does not see a single store’s demand; it sees the sum of branch demand that flows through it.

If branch demands are independent and Normal,

dhub∼N ⁣(∑kμk,  ∑kσk2).d_{\text{hub}} \sim \mathcal{N}\!\left( \sum_k \mu_k,\; \sqrt{\sum_k \sigma_k^2} \right).

If branches are positively correlated, the hub variance is larger than the independent case; if negatively correlated, it is smaller. When distributions differ (Normal at one branch, gamma at another) or correlation is unknown, estimate the hub series directly from historical throughput rather than assuming independence.

Pooling is one reason MEIO often places less safety stock upstream than a naive sum of store-level buffers would suggest—provided the shared demand model is honest.

Quick pooling check​

Stores A and B have independent weekly demand with (μ,σ)=(40,10)(\mu,\sigma)=(40,10) and (60,15)(60,15). The hub that serves both has mean 100100 and SD 102+152=18.03\sqrt{10^2+15^2}=18.03 under independence—not 10+15=2510+15=25. Using 2525 as the hub SD would overstate the buffer.

Serial simulation: why “almost 95%” still happens​

Even with GSM risk periods chosen for cycle service α\alpha, a multi-node simulation often shows slightly lower measured cycle service at intermediate placements than at “all stock downstream.” Upstream nodes are themselves imperfect; a demand-facing node protected only against its local segment still feels occasional shortages of supply from above. When every unit of risk is pooled at the customer-facing site and the external supplier is modeled as perfectly reliable, the measured cycle service matches the Normal calculation more closely.

That gap is a reminder: spreadsheet GSM is a planning approximation. Simulation (or field measurement) remains the check on service, fill rate, and exceptional-response volume.

Timing conventions used in the drill​

For a short serial simulator with sites ordered upstream → downstream:

  1. Advance on-hand by receipts due this period.
  2. Consume final demand at the last site; record a stockout period if on-hand goes negative (or lost sales, if you clamp at zero).
  3. For each site from upstream to downstream (or reverse, consistently), compute echelon inventory = sum of on-hand and in-transit for that site and all downstream sites.
  4. Order up to the echelon target Si\mathcal{S}_i, but for every site except the external supplier, cap the order by stock available at its immediate supplier.

The previous chapter already built Si\mathcal{S}_i from local SiS_i. The drill below focuses on one update step of that loop.

Practice​

Concept check​

Quiz

Distribution networks and pooling

1 / 4

In a distribution network under the simplified GSM idea, what does an intermediate x_i = 0 mean?

Pick an answer to see if you are right.

Rank the distribution analysis​

Quiz

From network sketch to costed cases

1 / 1

A distribution sketch, lead times, R, branch demand models, and holding costs are given.

OrderDrag the handle to rearrange — top should be first.

  1. 1Compute SS_i = z σ_{d,i} sqrt(x_i) and holding cost Σ h_i SS_i for each case.
  2. 2List a small set of feasible all-or-nothing risk-period allocations that cover the network.
  3. 3Estimate demand mean and SD at each node, pooling branches where they aggregate.
  4. 4Choose by cost (or service trade-off), then validate with simulation or history.

Drag items into the correct order (or use ↑↓), then check.

Python practice: pool independent Normal branches​

Implement hub_demand_moments(means, sds) for independent Normal branches. Return (hub_mean, hub_sd) with floating results.

Python practice: one serial echelon order step​

Given local on-hand by site (upstream → downstream), in-transit totals by site (already summed over pipeline positions), and echelon targets S\mathcal{S}, compute orders max⁡(0,Si−Ii)\max(0,\mathcal{S}_i-\mathcal{I}_i) where echelon inventory Ii\mathcal{I}_i is the sum of on-hand and in-transit from ii through the demand end. Then, from upstream to downstream, cap every site except the external supplier by the supplier’s current on-hand (do not model consumption of that on-hand beyond the cap for this drill).

SiteOn-handIn-transitEchelon target
Upstream30001224
Middle2500742
Demand-facing1000371

Raw shortfalls are 574574, 392392, 271271; after caps by supplier on-hand they become 574574, 300300, 250250.

Takeaways​

  • Distribution MEIO under GSM still uses sparse all-or-nothing placements; the hard part is honest demand at aggregation nodes.
  • Independent Normal branches pool by adding variances, not standard deviations.
  • Serial simulation explains why upstream buffers can leave measured cycle service a little short of the Normal plan.
  • Cap echelon orders by real supplier availability; unconstrained shortfalls are planning signals, not guaranteed shipments.

Previous: Multi-Echelon Inventory Optimization.

Next: Newsvendor Model — one-period order quantity with discrete demand and the critical ratio.