Material Requirements Planning: Demand You Calculate

Manuel D. Rossetti, PhD P.E.

Agenda

  • Demand you should not forecast, and why forecasting it is a mistake
  • The bill of material, its levels, and why an item needs a low-level code
  • The explosion equation: releases, not receipts
  • The six-row record, worked by hand, and the \(\max\) that is the whole idea
  • The deck assembly exploded through all five items
  • How long the planning horizon has to be

Two Kinds of Demand

An item’s demand is independent when it arises outside the firm, and dependent when it arises from the firm’s own plans.

A distributor selling mower deck belts over the counter faces independent demand for them. The manufacturer who puts one belt into every deck it builds does not: the demand for belts is whatever the deck schedule says it is.

The distinction is not about the item. It is about the position. The same belt is independent demand at the distributor and dependent demand at the manufacturer, and the right way to plan it differs accordingly.

Why Forecasting It Is a Mistake

The forecast throws away information. The manufacturer wrote the deck schedule itself, and every belt it will need is implied by it. Replacing that with an extrapolation of past belt usage replaces a known quantity with an estimate of it, and the estimate can only be worse.

Dependent demand is lumpy. A deck assembly built in lots of 300 consumes belts in lots of 300: nothing for several periods, then 300 at once. A forecast fitted to that history produces an average, and an average is the one value the demand never takes.

For example, the belt requirement later today is 420 in one month and nothing at all four months later, and its mean, \(1{,}840/12 = 153.3\), occurs in no month at all.

The Bill of Material

Mower deck assembly (DA), lead time 1
  Deck belt (B), 1 each, lead time 2
  Spindle assembly (S), 2 each, lead time 1
    Spindle housing (H), 1 each, lead time 2
    Bearing (BR), 2 each, lead time 3
  Bearing (BR), 1 each, lead time 3

A bill of material records what goes into what, and how many. The number on an arc is the quantity per: one deck assembly takes two spindle assemblies, and each of those takes two bearings.

Notice that the bearing hangs from two places. One idler bearing is fitted directly to the deck, and two more sit inside each spindle assembly. Thus, one deck consumes \(1 + 2 \times 2 = 5\) bearings.

Low-Level Codes

An item must be planned once, and after every parent that consumes it. If the bearing were planned at level 1, its requirements would be netted against the stock on hand before the spindle assembly had asked for any, and the spindle assembly would then find the stock already spoken for.

Thus, each item carries a low-level code: the deepest level at which it appears anywhere in the structure.

Item Appears at level Low-level code
Mower deck assembly, DA 0 0
Deck belt, B 1 1
Spindle assembly, S 1 1
Spindle housing, H 2 2
Bearing, BR 1 and 2 2

Planning in low-level-code order, shallowest first, guarantees that every parent of an item has a plan before the item does: DA, then B and S, then BR and H.

The Explosion Equation

Let item \(i\) be a parent of item \(j\), and let \(q_{ij}\) represent the number of \(j\) in one \(i\). Let \(\mathit{Rel}_{it}\) represent the quantity of \(i\) that the plan releases in period \(t\). Then the requirement \(j\) inherits in period \(t\) is

\[ G_{jt} = \sum_{i \in \text{parents}(j)} q_{ij} \, \mathit{Rel}_{it} . \]

Releases, not receipts

A parent needs its components in hand when it starts building, and the release is when it starts. Using the receipt row would ask for the components on the day the parent is finished, a whole lead time too late. This is the single most common error in a hand-worked explosion.

For the bearing the sum has two terms, because it has two parents: \(G_{\mathit{BR},t} = 1 \cdot \mathit{Rel}_{\mathit{DA},t} + 2 \cdot \mathit{Rel}_{S,t}\).

The MRP Record

Every item gets a record: six rows over a common horizon, periods across the columns, the reverse of the dynamic lot sizing worksheets. Nothing in the arithmetic depends on the layout.

Let… represent Row
\(G_t\) gross requirement in period \(t\) from the master schedule, or from the explosion
\(\mathit{SR}_t\) scheduled receipt already on order; arrives whether this plan wants it or not
\(I_t\) projected on hand at the end of period \(t\)
\(\mathit{NR}_t\) net requirement what is short after stock and receipts are counted
\(\mathit{POR}_t\) planned order receipt what the lot sizing rule decides should arrive
\(\mathit{Rel}_t\) planned order release the receipt moved back by the lead time

and let \(L\) represent the lead time and \(\mathit{SS}\) the safety stock.

The release row is the record’s output. It is what the explosion reads at the next level down, and the only row the planner will act on.

The Four Equations

\[ \begin{aligned} I_t &= I_{t-1} + \mathit{SR}_t + \mathit{POR}_t - G_t &&\text{the balance, with scheduled receipts added}\\ \mathit{NR}_t &= \max\left(G_t + \mathit{SS} - \mathit{SR}_t - I_{t-1},\; 0\right) &&\text{what is short, never negative}\\ \mathit{POR}_t &= \mathit{NR}_t &&\text{lot-for-lot; any other rule is larger and less frequent}\\ \mathit{Rel}_{t-L} &= \mathit{POR}_t &&\text{offset by the lead time} \end{aligned} \]

That is, net, lot size, and offset, in that order, in every period. The first line is the dynamic lot sizing balance equation with one term added.

A Record Without Netting

A reader meeting the record for the first time usually leaves out the net requirement row, and the \(\max\) with it. Let’s take the deck assembly’s master schedule and carry the balance forward with \(\mathit{POR}_t = 0\) throughout.

Period 6 7 8 9 10 11 12 13 14 15 16 17
Gross requirements 40 60 120 300 420 260 120 40 0 80 180 220
Projected on hand \(-40\) \(-100\) \(-220\) \(-520\) \(-940\) \(-1{,}200\) \(-1{,}320\) \(-1{,}360\) \(-1{,}360\) \(-1{,}440\) \(-1{,}620\) \(-1{,}840\)

The balance reaches \(-1{,}840\), the whole year’s requirement. That is correct arithmetic and a useless plan: it reports that if nothing is ordered then everything is short, which the reader knew.

Netting turns each shortage into an order. With nothing on hand and nothing on order, \(\mathit{NR}_t = G_t\) in every period, lot-for-lot sets \(\mathit{POR}_t = \mathit{NR}_t\), and \(I_t\) stays at zero throughout.

What the \(\max\) Itself Does

The \(\max\) only shows when there is stock to spare. Suppose the deck assembly ends period 5 with \(I_5 = 60\) on hand, and nothing is on order.

\[ \begin{aligned} \mathit{NR}_6 &= \max\left(40 + 0 - 0 - 60,\; 0\right) = \max(-20,\; 0) = 0 &&\text{the surplus is not a requirement}\\ I_6 &= 60 + 0 + 0 - 40 = 20 &&\text{the 20 carries into period 7}\\ \mathit{NR}_7 &= \max\left(60 + 0 - 0 - 20,\; 0\right) = 40 &&\text{period 7 needs only 40}\\ I_7 &= 20 + 0 + 40 - 60 = 0 &&\text{and the balance is back to zero} \end{aligned} \]

Without the \(\max\), lot-for-lot would plan a receipt of \(-20\) in period 6: it would cancel stock that period 7 is going to use. Netting turns each shortage into an order, and the \(\max\) stops a surplus being treated as a requirement.

The Record, Period by Period

The same item, opening with 60 on hand, lot-for-lot, lead time 1.

Period 5 6 7 8 9 10
Gross requirements, \(G_t\) 40 60 120 300 420
Scheduled receipts, \(\mathit{SR}_t\) 0 0 0 0 0
Projected on hand, \(I_t\) 60 20 0 0 0 0
Net requirements, \(\mathit{NR}_t\) 0 40 120 300 420
Planned order receipts, \(\mathit{POR}_t\) 0 40 120 300 420
Planned order releases, \(\mathit{Rel}_t\) 0 40 120 300 420

The check. What arrives must equal what is used, less what was there, plus what is left: \(0 + 40 + 120 + 300 + 420 = 880 = 940 - 60 + 0\). That check is worth performing every time, because it catches most netting errors immediately.

Safety Stock and Allocations

Safety stock is the \(\mathit{SS}\) term. It enters every period’s netting, but it raises only the first net requirement. Take an item ordered lot-for-lot, with nothing on hand or on order, whose first requirement falls in period \(t\):

\[ \begin{aligned} \mathit{NR}_t &= \max\left(G_t + \mathit{SS} - 0 - 0,\; 0\right) = G_t + \mathit{SS}, & I_t &= (G_t + \mathit{SS}) - G_t = \mathit{SS}\\ \mathit{NR}_{t+1} &= \max\left(G_{t+1} + \mathit{SS} - 0 - \mathit{SS},\; 0\right) = G_{t+1}, & I_{t+1} &= \mathit{SS} + G_{t+1} - G_{t+1} = \mathit{SS} \end{aligned} \]

Every later period repeats the second line. Thus, the plan holds \(\mathit{SS}\) permanently and plans around what is left.

Allocated stock is physically present but already promised elsewhere. It is handled by reducing the opening balance \(I_0\). Nothing else changes.

The Explosion, as an Algorithm

plan(bill of material, master production schedule):

    assign every item its low-level code
    sort the items by low-level code, shallowest first

    for each item in that order:
        if a master schedule speaks about this item:
            G <- the master schedule
        else:
            G(t) <- sum over parents i of q(i, item) * Rel(i, t)

        NR(t) <- max(G(t) + SS - SR(t) - I(t-1), 0)
        POR   <- the lot sizing rule applied to NR
        I(t)  <- I(t-1) + SR(t) + POR(t) - G(t)
        Rel(t - L) <- POR(t)

    return every item's record

Notice that the sort is what makes the sum over parents safe: by the time an item is reached, every parent of it already has a release row.

The Deck Assembly, All Five Items

Question Answer
What is stocked? Five items of one product structure: the deck assembly and what goes into it
What is the demand process? Known, and computed: the master schedule for the deck assembly, and for every other item the releases of the items above it
When is inventory reviewed? Once a month, over a common horizon
What triggers replenishment, and how much? A net requirement in a month, ordered lot-for-lot
What happens to unmet demand? None occurs; a requirement with no time left is a past-due release
What costs are incurred, and when? A setup for every order; nothing is carried under lot-for-lot

Nothing is on hand and nothing is on order. The master schedule carries the twelve-month pattern in months 6 through 17:

Month 6 7 8 9 10 11 12 13 14 15 16 17
Deck assemblies 40 60 120 300 420 260 120 40 0 80 180 220

Levels 0 and 1

Period 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
DA gross requirements 0 0 0 40 60 120 300 420 260 120 40 0 80 180 220
DA releases, \(L = 1\) 0 0 40 60 120 300 420 260 120 40 0 80 180 220 0
B gross, \(1 \times\) DA releases 0 0 40 60 120 300 420 260 120 40 0 80 180 220 0
B releases, \(L = 2\) 40 60 120 300 420 260 120 40 0 80 180 220 0 0 0
S gross, \(2 \times\) DA releases 0 0 80 120 240 600 840 520 240 80 0 160 360 440 0
S releases, \(L = 1\) 0 80 120 240 600 840 520 240 80 0 160 360 440 0 0

Each row is the one above it moved left by a lead time or multiplied by a quantity per. That is, lot-for-lot with nothing on hand makes every record a shift and a scale of the master schedule, and nothing else.

The Bearing, Which Two Levels Feed

Period 4 5 6 7 8 9 10 11 12 13 14 15 16
\(1 \times\) DA releases 0 40 60 120 300 420 260 120 40 0 80 180 220
\(2 \times\) S releases 160 240 480 1,200 1,680 1,040 480 160 0 320 720 880 0
BR gross requirements 160 280 540 1,320 1,980 1,460 740 280 40 320 800 1,060 220

Notice the shape of the last row. It is not the shape of the master schedule, and it is not the shape of either contribution alone. Two streams on different offsets add to a pattern that looks nothing like the demand that caused it, peaking at 1,980 although no deck assembly is ever built in a quantity approaching that. And nobody forecast any of it.

The check. The row sums to \(9{,}200 = 5 \times 1{,}840\): five bearings for every deck assembly scheduled.

What Lot-for-Lot Costs

Under lot-for-lot no item carries anything from one period to the next, so every dollar is setup. Each item orders once in every period with a net requirement:

Item Orders Setup Cost Why that many orders
Deck assembly 11 $500 $5,500 eleven months with a requirement
Deck belt 11 $300 $3,300 one per DA release
Spindle assembly 11 $250 $2,750 one per DA release
Spindle housing 11 $150 $1,650 one per S release
Bearing 13 $100 $1,300 months 4 to 16, from two parents
Total 57 $14,500 every dollar of it setup

That is the plan the next session improves on, and the way it improves on it is not the obvious one.

How Long the Horizon Has to Be

A record cannot release an order before period 1. If a receipt is due in period \(t\) and the lead time is \(L\), the release falls in \(t - L\), and when that is less than 1 the order is past due: the plan has found a requirement it no longer has time to meet.

Lead times accumulate down every path, so the horizon must lead the first requirement by the longest accumulation, the cumulative lead time:

Path DA to B DA to BR DA to S to H DA to S to BR
Lead times \(1 + 2 = 3\) \(1 + 3 = 4\) \(1 + 1 + 2 = 4\) \(1 + 1 + 3 = \mathbf{5}\)

Rerunning the whole explosion with the schedule moved earlier confirms it:

Empty months in front of the schedule 3 4 5 6
Units the plan cannot release in time 520 160 0 0

Five months of lead-in is exactly enough. Thus, the horizon used throughout is 17 months: five empty, then the twelve-month schedule.

Past-due orders at the bottom of a structure are usually not a data problem. They are a horizon problem.

What We Did Today

Dependent demand is calculated, not forecast, and forecasting it discards information the firm already holds.

Low-level codes plan every item once, after all its parents.

The explosion reads releases, not receipts. Using receipts asks for components a lead time too late.

The record nets, lot sizes and offsets. The \(\max\) turns shortages into orders and stops a surplus being treated as a requirement; safety stock raises only the first net requirement.

Lot-for-lot costs $14,500 in 57 setups, and the bearing’s requirement looks nothing like the schedule that caused it.

The horizon must lead by the cumulative lead time down the deepest path: five months here.

For Next Time

Read before next session: What Lot Sizing Does to the Level Below, Distribution Requirements Planning, Nervousness and What Requirements Planning Assumes.

Today’s material was Demand You Should Not Forecast, The Bill of Material, The MRP Record and Running the Explosion.

Next session:

  • How a parent’s lot sizing rule decides what its components’ problem looks like
  • Why the rule that is best at a level is not the rule that is best for the product
  • The same arithmetic on a distribution network, and the bullwhip effect as a mechanism

Bring the $14,500. Next session changes one rule on the deck assembly and watches everything below it move.

⌂ Index