Multi-Echelon Systems: Getting the Accounting Right First

Manuel D. Rossetti, PhD P.E.

Agenda

  • Why installation holding rates double count
  • Echelon stock, and the value-added rate
  • Serial chains, and the constraint that intervals must increase
  • Distribution systems, where the constraint runs the other way
  • Rounding a whole network to powers of two

The Third Coupling

A shared resource leaves the cost functions separate and adds a constraint.

A shared setup couples the cost functions and leaves the items unconstrained.

An echelon structure couples them end to end: one stock exists in order to replenish another.

And it needs its accounting fixed before either earlier technique can be applied at all.

The Structure

flowchart RL
    S([Supplier]) --> W[Stage 2<br/>warehouse]
    W --> R[Stage 1<br/>store]
    R --> C([Customers])

Stage 1 faces the customer. Stage 2 replenishes stage 1. Arrows point the way a requirement travels.

Both stages hold stock. Both place orders. Both incur holding cost.

That last sentence contains the problem.

The Double Count

Suppose we charge each stage its own installation holding rate, \(h_i\).

A unit sitting at the store has already passed through the warehouse. The money tied up in it was already being charged upstream.

Charging every stage its installation rate counts the same money at every stage the unit has passed through.

The fix is to charge each stage only for the value it adds.

Echelon Stock and the Value-Added Rate

Echelon stock of a location is everything at that location together with everything downstream of it.

The echelon holding rate is the value added at that stage:

\[ h'_i = h_i - h_{i+1} \]

with \(h'_n = h_n\) at the most upstream stage.

These telescope: \(h'_1 + h'_2 + \cdots + h'_n\) recovers \(h_1\), the full installation rate at the customer-facing stage.

Does It Actually Reconcile?

A two-stage chain, nested, \(T_1 = \tfrac{1}{2}T_2\), \(\lambda = 100\), \(T_1 = 1/2\) year, so \(Q_1 = 50\) and \(Q_2 = 100\).

Installation rates \(h_1 = \$2.00\), \(h_2 = \$1.20\). So \(h'_1 = \$0.80\) and \(h'_2 = \$1.20\).

Stage 1 on hand is an ordinary sawtooth: \(\bar{I}_1 = Q_1/2 = 25\).

Stage 2 on hand is not. It receives \(Q_2\), ships \(Q_1\) downstream at once, holds the remainder until stage 1 reorders, and is then empty:

\[ \bar{I}_2 = \frac{(Q_2 - Q_1)T_1}{T_2} = 25 \]

Stage 2 echelon stock is a clean sawtooth of height \(Q_2\): \(\bar{I}^{\,e}_2 = 50\).

The Same System, Costed Twice

Accounting Term Average Rate Cost rate
Installation stage 1 25 $2.00 $50.00
stage 2 25 $1.20 $30.00
total $80.00
Echelon stage 1 25 $0.80 $20.00
stage 2 50 $1.20 $60.00
total $80.00

Perform this check every time echelon rates are introduced. It catches a sign error in \(h'_i = h_i - h_{i+1}\) immediately.

What Changed, and What Did Not

Installation accounting charges the two stages $50 and $30.

Echelon accounting charges them $20 and $60.

Echelon accounting moves cost upstream, because stage 2’s echelon stock includes what stage 1 is holding.

Echelon accounting reassigns cost between stages and preserves the total.

That is the licence to use it. No money is invented or lost.

And in exchange, one awkward rectangle becomes a sawtooth, so every stage looks like an EOQ.

Serial Chains

Now \(n\) stages, \(n \to \cdots \to 1\), every stage seeing the same \(\lambda\).

  • \(k_i\), the fixed cost of an order at stage \(i\)
  • \(g_i = \tfrac{1}{2}\lambda h'_i\), the holding coefficient
  • \(T_i\), the reorder interval

\[ \min \; \sum_{i}\left[\frac{k_i}{T_i} + g_iT_i\right] \]

subject to \(T_i = 2^{\ell_i}T\) and, crucially,

\[ T_i \ge T_{i-1} \]

Nestedness

\[ T_i \ge T_{i-1} \]

Whenever a stage orders, every stage below it orders too. No stage can replenish more often than the one it supplies.

Nestedness keeps work in process from piling up between stages.

With power-of-two intervals it comes for free, because any two powers of two divide one another.

Drop the power-of-two restriction and keep nesting: that is the relaxation we solve first.

When the Constraint Binds

Without nesting, each stage separates and takes \(T_i = \sqrt{k_i/g_i}\).

So the constraint binds exactly when those intervals fail to increase up the chain.

The key structural fact: stages that would violate the constraint are merged into a block and share one interval.

\[ T(r) = \sqrt{\frac{k(G_r)}{g(G_r)}} \]

using the block’s totals. Which is the same formula again, one level up.

A Five Stage Chain

\(\lambda = 500\) per year, weekly base period.

Stage \(i\) 1 2 3 4 5
\(k_i\) $10 $12 $25 $7 $2
\(h_i\) $0.60 $0.50 $0.35 $0.10 $0.05
\(h'_i = h_i - h_{i+1}\) 0.10 0.15 0.25 0.05 0.05
\(g_i = \tfrac{1}{2}\lambda h'_i\) 25 37.5 62.5 12.5 12.5
\(k_i/g_i\) .400 .320 .400 .560 .160

Stage by stage the intervals are 0.632, 0.566, 0.632, 0.748, 0.400 years.

Not nondecreasing. Stage 2 would order less often than stage 1 supplies, and stage 5 less often than anything below it. Infeasible.

The Partition, Step by Step

Walk up the chain, absorbing a stage when it wants a shorter interval than the current block.

\(i\) Block ratio \(k_i/g_i\) Action
2 \(10/25 = .400\) \(12/37.5 = .320\) \(.400 > .320\), absorb: \(G_1 = \{1,2\}\)
3 \(22/62.5 = .352\) \(25/62.5 = .400\) \(.352 \le .400\), start \(G_2 = \{3\}\)
4 \(25/62.5 = .400\) \(7/12.5 = .560\) \(.400 \le .560\), start \(G_3 = \{4\}\)
5 \(7/12.5 = .560\) \(2/12.5 = .160\) \(.560 > .160\), absorb, then merge

The merge: \(G_3\) now has ratio \(9/25 = .360\), below \(G_2\)’s \(.400\), so the two combine into \(G_2 = \{3,4,5\}\) with ratio \(34/87.5 = .389\).

That exceeds \(G_1\)’s \(.352\), so the walk stops.

The Relaxed Solution

\[ G_1 = \{1, 2\}, \qquad G_2 = \{3, 4, 5\} \]

\[ T(1) = \sqrt{\frac{22}{62.5}} = 30.9 \text{ weeks}, \qquad T(2) = \sqrt{\frac{34}{87.5}} = 32.4 \text{ weeks} \]

Nondecreasing, so feasible, at a cost of $183.25 a year.

The infeasible stage-by-stage solution would have cost $181.81, so nesting the chain costs 0.8%.

Rounding the Chain

\(G_1\): \(2^{\ell} \ge 30.9/\sqrt{2} = 21.8\), so \(\ell^{*} = 5\).

\(G_2\): \(2^{\ell} \ge 32.4/\sqrt{2} = 22.9\), so \(\ell^{*} = 5\).

Both blocks land on \(2^{5} = 32\) weeks, at a total of $183.31, which is 0.03% above the relaxed solution.

The two blocks were distinguished by the relaxation and then rounded back together.

That is not a failure. Intervals within a factor of two of one another often round to the same power, and 30.9 and 32.4 weeks differ by 5%.

When it happens, the whole chain replenishes on one schedule: the strongest form of coordination available.

Now Reverse the Geometry

A central warehouse supplies several regional warehouses.

flowchart TB
    CW[Central warehouse<br/>index 0] --> R1[Region 1]
    CW --> R2[Region 2]
    CW --> R3[Region 3]

Index 0 is the center, and \(\lambda_0 = \sum_{i \ge 1}\lambda_i\) passes through it.

Two Things Change

The echelon rate. The center’s echelon stock is everything in the system, so its echelon rate is its installation rate, \(h'_0 = h_0\), and each region is charged only what it adds:

\[ h'_i = h_i - h_0 \]

The holding coefficient carries each location’s own demand rate, \(g_i = \tfrac{1}{2}\lambda_i h'_i\), unlike a serial chain where every stage shares one \(\lambda\).

And the Constraint Runs the Other Way

\[ T_0 \ge T_i \qquad \text{for every region } i \]

In a chain, a stage cannot order more often than the stage it supplies.

Here the center supplies everyone, so nothing downstream may wait longer than the center.

A region ordering less often than the center would leave stock sitting at the center with nowhere to go.

This is the constraint students most often write down backwards.

The Shape of the Answer

Regions split into two groups.

Those whose unconstrained interval \(\sqrt{k_i/g_i}\) is short enough keep it and order on their own schedule.

Those that would have wanted a longer interval than the center can offer are pinned to the center’s interval and nested with it.

Call the pinned set \(\mathcal{C}^{0}\): the center together with every region sharing its interval.

Building the Pinned Set

Relabel the regions in ascending order of \(k_i/g_i\), then work down from the largest, adding a region only when leaving it out would be infeasible.

\[ T_0 = \sqrt{\frac{\sum_{j \in \mathcal{C}^{0}}k_j}{\sum_{j \in \mathcal{C}^{0}}g_j}} \]

Six regions each facing \(\lambda_i = 200\), so the center sees 1,200.

Step Candidate Its \(k_i/g_i\) Pooled ratio Action
1 (6) .625 \(500/6000 = .0833\) larger, add
2 (5) .200 \(625/6200 = .1008\) larger, add
3 (4) .1875 \(725/6700 = .1082\) larger, add
4 (3) .1286 \(875/7500 = .1167\) larger, add
5 (2) .110 \(965/8200 = .1177\) smaller, stop

The Result

\[ \mathcal{C}^{0} = \{0, (3), (4), (5), (6)\} \]

Regions \((1)\) and \((2)\) are left alone.

\[ T_0 = \sqrt{\frac{965}{8{,}200}} = 17.8 \text{ weeks} \]

shared by the center and four regions, while \((2)\) takes 17.2 weeks and \((1)\) takes 14.2.

This is a scan, not a search. One pass down the list suffices, because the regions were sorted first.

Rounding, and a Property Worth Knowing

Center: \(2^{\ell} \ge 17.8/\sqrt{2} = 12.6\), so \(\ell^{*} = 4\): 16 weeks.

Region (2): needs \(2^{\ell} \ge 12.2\). Region (1): needs \(2^{\ell} \ge 10.1\).

Both also give \(\ell^{*} = 4\). Every location ends on a sixteen-week cycle.

By the rounding rule, \(\ell^{*} = 4\) covers every interval from \(8\sqrt{2} = 11.3\) weeks to \(16\sqrt{2} = 22.6\) weeks, and 14.2, 17.2 and 17.8 all sit inside it.

Does Rounding Ever Break Feasibility?

No. The exponent \(\ell^{*}\) is a non-decreasing function of \(T^{*}\).

So if \(T_i^{*} \le T_j^{*}\) then \(\ell_i^{*} \le \ell_j^{*}\), hence \(T_i \le T_j\). Two intervals cannot cross when both are rounded by the same rule.

Together with the fact that any two powers of two divide one another, that is why nesting comes for free once the restriction is imposed.

Merging into blocks is needed for the relaxed problem, before rounding. Not after.

What We Did Today

Installation rates double count, because a unit downstream has already been charged upstream.

Echelon stock and the value-added rate fix it, reassigning cost between stages while preserving the total. $50 and $30 became $20 and $60, both totalling $80.

Serial chains need intervals to increase; stages that violate that are merged into blocks sharing one interval.

Distribution systems have the constraint reversed: nothing downstream may wait longer than the center.

Rounding preserves feasibility, because the exponent is monotone.

For Next Time

Read before next session: When the Demand Rate Changes, and What a Plan Costs.

That closes multi-item. Next we keep items independent again and remove a different assumption: that the demand rate holds still.

Next session:

  • Why the economic order quantity has nothing to be derived from once demand varies by period
  • The requirements schedule, and what a plan actually is
  • Zero-inventory ordering, the property that makes the problem small
  • Window costs, and why they can all be computed before any search begins

We are leaving the world of a single repeating cycle. Everything built on the general cycle assumed one, so almost none of it survives.

⌂ Index