455. Multi-Echelon

Relax one dimension from basic EOQ: number of echelons is no longer one. Inventory is held at multiple stages of a supply chain (warehouse → retailer, supplier → factory → distributor, etc.). Orders cascade up the chain, and each stage has its own setup and holding costs.

Key concept: echelon inventory − at each stage, count not just on-hand but also all downstream inventory you’ve already paid to put in motion.

455.1. Setup (two-echelon: warehouse → retailer)

The retailer pulls from the warehouse every 𝑇𝑟. The warehouse re-orders from the upstream supplier every 𝑇𝑤. Nesting requirement: 𝑇𝑤 must be an integer multiple of 𝑇𝑟 (otherwise the warehouse stocks fractionally, which is wasteful).

455.2. Cost model

Annual cost = sum across stages:

TC(𝑇𝑟,𝑇𝑤)=𝑆𝑟𝑇𝑟+ℎ𝑟𝑑𝑇𝑟2⏟retailer+𝑆𝑤𝑇𝑤+ℎ𝑤𝑑𝑇𝑤2⏟warehouse

Constraint: 𝑇𝑤=𝑘𝑇𝑟 for some integer 𝑘≥1.

455.3. Unconstrained optimum (relax integer 𝑘)

If we ignored nesting, each stage would independently optimize:

𝑇𝑟basic=2𝑆𝑟ℎ𝑟𝑑𝑇𝑤basic=2𝑆𝑤ℎ𝑤𝑑

This is just basic EOQ at each stage. But a non-integer ratio 𝑇𝑤/𝑇𝑟 wastes capacity — the warehouse would carry partial cycles. Nesting is required for clean operation.

455.4. Roundy’s power-of-two policies

Restrict cycle times to powers of two of a base period: 𝑇𝑖=2𝑘𝑖𝑇0 for integer 𝑘𝑖≥0, where 𝑇0 is fixed (e.g., 1 day).

Then any two cycles are nested: a stage with 𝑘𝑖=3 orders 8 base periods; another with 𝑘𝑖=5 orders every 32 base periods − the second is always a multiple of the first.

Roundy’s 98% theorem: the best power-of-two policy achieves at least 98% of the unconstrained optimum (worst-case cost ratio ≤2/ln(2)/(1+1/2)≈1.06). So a 6% penalty is the worst case for using powers of two.

455.5. Algorithm

  1. Compute unconstrained 𝑇𝑖basic at each stage.
  2. Round each to the nearest power of two: 𝑇𝑖∗=2𝑘𝑖∗𝑇0 where 𝑘𝑖∗=round(log2(𝑇𝑖basic/𝑇0)).
  3. Compute resulting cost TC∗ and verify it’s within 6% of ∑𝑖2𝑆𝑖ℎ𝑖𝑑.

455.6. Final formulas (two-stage, nested with 𝑇𝑤=𝑘𝑇𝑟)

Substitute 𝑇𝑤=𝑘𝑇𝑟 into TC:

TC(𝑇𝑟,𝑘)=𝑆𝑟+𝑆𝑤/𝑘𝑇𝑟+(ℎ𝑟+𝑘ℎ𝑤)𝑑𝑇𝑟2

Optimize over 𝑇𝑟 for fixed 𝑘:

𝑇𝑟∗(𝑘)=2(𝑆𝑟+𝑆𝑤/𝑘)(ℎ𝑟+𝑘ℎ𝑤)𝑑TC∗(𝑘)=2(𝑆𝑟+𝑆𝑤/𝑘)(ℎ𝑟+𝑘ℎ𝑤)𝑑

Now optimize over integer 𝑘≥1 — small search (typically 𝑘∈{1,2,4,8}).

Example

Given (two-echelon: warehouse → retailer):

  • Retail demand: 𝑑=12000 units/year
  • Retailer: 𝑆𝑟 = $50 / order, ℎ𝑟 = $2 / unit / year
  • Warehouse: 𝑆𝑤 = $200 / order, ℎ𝑤 = $1 / unit / year (echelon — added cost over nothing)

Step 1 — unconstrained 𝑇𝑖basic at each stage

𝑇𝑟basic=2⋅502⋅12000≈0.0645yr≈24days𝑇𝑤basic=2⋅2001⋅12000≈0.1826yr≈67days

Ratio 𝑇𝑤basic𝑇𝑟basic≈67/24≈2.83 — roughly 3, but not an integer.

Step 2 — search nested integer 𝑘

Try 𝑘=1,2,3,4:

TC∗(𝑘)=2(𝑆𝑟+𝑆𝑤/𝑘)(ℎ𝑟+𝑘ℎ𝑤)𝑑:

𝑘𝑆𝑟+𝑆𝑤/𝑘ℎ𝑟+𝑘ℎ𝑤TC∗(𝑘)
150 + 200 = 2502 + 1 = 32⋅250⋅3⋅12000≈4243
250 + 100 = 1502 + 2 = 42⋅150⋅4⋅12000≈3795
350 + 67 = 1172 + 3 = 52⋅117⋅5⋅12000≈3742
450 + 50 = 1002 + 4 = 62⋅100⋅6⋅12000≈3795

Optimal 𝑘∗=3 (warehouse cycle is 3× the retailer cycle).

Step 3 — cycle times at 𝑘∗=3

𝑇𝑟∗=2(50+200/3)(2+3⋅1)⋅12000=2⋅1175⋅12000≈0.0625yr≈23days𝑇𝑤∗=3⋅𝑇𝑟∗≈68days

Order quantities: retailer 𝑄𝑟∗=𝑑𝑇𝑟∗≈750, warehouse 𝑄𝑤∗=𝑑𝑇𝑤∗≈2280.

Step 4 — compare to basic EOQ at each stage independently

Treating the two stages independently (no nesting):

  • Retailer: TC𝑟=2⋅50⋅2⋅12000≈1549
  • Warehouse: TC𝑤=2⋅200⋅1⋅12000≈2191
  • Sum (independent): $3740/year

Multi-echelon nested: TC∗(3)≈3742.

They almost coincide! The 6% Roundy bound is achieved here at 0.05% — the integer-𝑘 constraint costs almost nothing because 𝑇𝑤basic/𝑇𝑟basic≈2.83 was already close to a small integer (3). This is the Roundy theorem at work: with two stages, the worst-case nesting penalty is bounded by 6%, and in practice it’s usually much less.

The deeper takeaway: power-of-two policies generalize this beyond two stages — at any number of echelons, restrict each cycle to 𝑇𝑖=2𝑘𝑖𝑇0 and the worst-case penalty stays below 6%. Predictable, nestable, near-optimal.