Economic Production Quantity (EPQ): Sizing Batches When Your Line Makes and Ships at Once
The Economic Production Quantity, for schedulers who run lines (not warehouses)
Every scheduler knows the daily tug-of-war. A changeover on your filler is painful — labor, flush, sanitation, and an hour of lost capacity on a line that's already the bottleneck. The instinct is to run long and "dilute" that setup pain across as many cases as possible. But run too long and you drown in inventory: the warehouse fills, cash sits on pallets, and for chilled or frozen SKUs the cold-storage meter never stops running.
There is a math for that sweet spot. It's called the Economic Production Quantity (EPQ), and unlike the more famous Economic Order Quantity (EOQ), it was built for exactly your situation — a line that fills stock gradually while demand keeps drawing it down. This post walks through what EPQ is, the formula, how to get your inputs right, where the model quietly lies to you, and the one lever most people miss.
EPQ vs. EOQ: why the finite production rate changes everything
The EOQ model came first. Ford W. Harris published it in 1913 to answer a warehouse question: given steady demand, how big an order should you place so that the cost of ordering (a fixed fee per order) balances against the cost of holding the resulting inventory? EOQ assumes the whole order arrives at once — one truck, one delivery, full shelf.
In 1918, E. W. Taft extended that logic to production. His Economic Production Quantity model keeps the same balancing act — setup cost against holding cost — but drops the unrealistic delivery assumption. On a production line you never "receive the whole batch." Stock is replenished incrementally at a finite production rate P while it is simultaneously being consumed at demand rate D.
That single change matters enormously. Because you're shipping and consuming product as you make it, your peak inventory is never as high as the full run size. You build up net stock only at rate (P − D). The result: EPQ, not EOQ, is the correct lens for a scheduler sizing a run.
There's a clean sanity check built into the model. When the fill rate is effectively infinite — instant delivery, like a warehouse receiving a full truck — EPQ collapses right back into EOQ. EOQ is just the special case of EPQ where the line is infinitely fast relative to demand.
The trade-off in one picture
Strip away the algebra and EPQ is one idea:
- Setup/changeover cost per unit falls as the run gets bigger. A fixed changeover spread over 500 cases costs more per case than the same changeover spread over 5,000.
- Holding cost per unit rises as the run gets bigger. Bigger runs mean more average inventory, which means more capital tied up, more space, and more refrigeration.
The optimum sits where those two forces balance — the quantity where the marginal saving on setup exactly offsets the marginal rise in holding. That quantity gives you the lowest total annual inventory cost.
One detail surprises people: the optimal quantity depends on demand, setup cost, and holding cost — not on the unit price of the product. A $0.40 can of soda and a $4.00 jar of sauce can have identical optimal run sizes if their demand, setup, and holding costs match. Price affects your total spend; it doesn't move the balance point.
The formulas, kept operator-friendly
Start with the EOQ backbone, because EPQ is built on it:
Q* = sqrt( (2 * D * K) / h )
- D = annual demand (units or cases)
- K = fixed setup/changeover cost per run
- h = annual holding cost per unit
EPQ then multiplies that backbone by a correction factor that accounts for the finite production rate:
EPQ = Q* / sqrt( 1 - D/P )
The intuition behind the (1 − D/P) term is the whole point:
- If your line is much faster than demand (P far bigger than D), then D/P is tiny, the correction factor is close to 1, and EPQ lands near EOQ. You build stock quickly, so the incremental-fill advantage is small.
- If your line is slow relative to demand (D approaching P), then D/P is large, the denominator shrinks, and the optimal run grows. Because you're consuming most of what you make as you make it, you can afford — and the math prefers — a longer run.
A worked CPG example
Say you make a shelf-stable sauce SKU:
- D = 260,000 cases/year
- K = $900 per changeover (labor + flush + sanitation + lost bottleneck time)
- h = $6 per case per year (capital, space, insurance)
- P = 1,040,000 cases/year if the line ran this SKU nonstop (so D/P = 0.25)
EOQ backbone:
Q* = sqrt( (2 * 260,000 * 900) / 6 ) = sqrt( 78,000,000 ) ≈ 8,832 cases
EPQ correction:
EPQ = 8,832 / sqrt(1 - 0.25) = 8,832 / 0.866 ≈ 10,198 cases
So the pure warehouse answer says ~8,800 cases; the production-aware answer says ~10,200. The finite fill rate justifies a somewhat longer run because you're consuming a quarter of output as you produce. If instead this were a refrigerated SKU with holding cost of, say, $18/case (triple, thanks to cold storage), the EOQ backbone would drop to about 5,100 cases — smaller runs suddenly become the economical choice. Holding cost is a powerful dial.
Getting your inputs right (where CPG schedulers go wrong)
The formula is only as honest as its three inputs. Most bad EPQ answers trace back to lazy inputs.
K — setup cost. Count the true cost of a changeover, not just the wrench time. That means direct labor, scrapped or flushed product, sanitation and CIP, QA hold and first-article testing, and — most importantly — lost capacity on a bottleneck line. An hour of changeover on your constraint isn't an hour of labor cost; it's an hour of throughput you can never recover. If you undercount K, EPQ will tell you to run too small. For the full accounting, see the hidden cost of changeovers.
h — holding cost. This is more than warehouse rent. Holding cost includes the capital/opportunity cost of cash tied up in inventory, warehouse space, insurance, and — called out explicitly for a reason — refrigeration. Cold-chain SKUs carry a much higher h, which is precisely why big "efficient" runs of chilled or frozen product can quietly be expensive. If you run a mixed portfolio, don't apply one blanket holding rate across shelf-stable and refrigerated SKUs.
D — demand. Use a clean, deseasonalized annual rate. EPQ assumes steady draw-down, so feeding it a number distorted by a promo spike or a seasonal peak will give you a run size that's wrong for eleven months of the year.
The catch: EPQ assumes a calm world
Be honest with yourself about the assumptions baked in. EPQ presumes steady demand, stable lead times, and constant costs. Real CPG lines rarely oblige. Demand is lumpy, promos distort volume, ingredient availability wobbles, and costs drift.
So treat EPQ as a baseline to sanity-check run sizes, not a set-and-forget answer. It tells you the direction and rough magnitude of the sweet spot. Then layer your real constraints on top:
- Shelf life caps the run up. No matter what the math says, you can't run more than you can sell before the code date. See shelf-life-constrained production scheduling.
- MOQs and campaign rules cap the run down. Minimum ingredient batches, tank sizes, and campaign policies set a floor.
EPQ lives inside those guardrails, not above them.
The lever most people miss: shrink K, don't just live with it
Here's the reframe that turns EPQ from a spreadsheet exercise into a strategy. The setup cost K is not a law of nature. It's a number you can attack.
Look again at the formula: Q* = sqrt(2DK/h). Because K sits inside the square root, cutting changeover cost pulls the optimal batch down. Lean practitioners have hammered this point for decades: long setups force large batches, and large batches create long lead times, excess inventory, and the warehouse space to store it. Quick setups do the opposite — they enable short lead times and minimum inventory.
This flips the usual conversation. A high K isn't a justification for mega-batches; it's a signal to attack changeovers. Reduce setup time through SMED (Single-Minute Exchange of Die) — convert internal setup steps to external, standardize tooling, stage materials ahead — and the economically optimal batch shrinks. Smaller runs become genuinely cheaper, not just aspirationally lean. You get lower inventory, less cold-storage burn, and faster response to demand shifts, all at once.
So the practical loop is: compute EPQ with today's K, find the SKUs where K is punishing, run a changeover kaizen on that line, then recompute. The optimal batch you're chasing moves toward you as you improve.
From one SKU to a whole line: EPQ meets ELSP
EPQ sizes one product's run in isolation. But your reality is one machine making many SKUs, competing for the same hours. That's the multiproduct extension of EPQ — the Economic Lot Scheduling Problem (ELSP), also called the product-cycling problem.
This is where EPQ connects to the sequencing and pacing tools you may already use. EPQ answers how much of each SKU to run; EPEI / the production wheel answers how often each SKU cycles; heijunka levels the mix; and run-order sequencing decides the order that minimizes total changeover cost. EPQ sizes each run; the wheel sequences and paces them. Use them together.
Putting it to work this week
- Pull D, K, and h for your top 10 SKUs by volume. Be rigorous about K (include lost bottleneck capacity) and h (split out refrigerated SKUs).
- Compute EPQ for each and compare to your current run sizes.
- Flag the outliers. SKUs running at 2–3× EPQ are dragging inventory and cold-storage cost. SKUs running well below EPQ are burning changeover capacity.
- Pick one high-K line and scope a changeover kaizen. Then recompute EPQ and watch the optimal batch shrink.
- Cross-check against constraints: shelf life above, MOQ below.
Key takeaways
- EPQ, not EOQ, fits a production line. It accounts for stock building incrementally at rate P while demand draws it down at rate D. When the line is infinitely fast, EPQ becomes EOQ.
- The optimum balances setup cost against holding cost — and it's driven by D, K, and h, not by unit price.
- Refrigeration makes holding cost high, which pushes chilled/frozen SKUs toward smaller runs than intuition suggests.
- K is a lever, not a constant. Attack changeovers with SMED and the economically optimal batch shrinks — turning "lean" from aspiration into arithmetic.
Sources
More from the journal
The Bullwhip Effect on Your CPG Line: Why a 5% Shelf Wobble Becomes a Whipsawing Schedule
Your inbound order signal swings harder than consumers actually buy. That jumpiness is a structural amplification called the bullwhip effect. Here's how to name it, measure it, and dampen it from the plant floor.
Croston's Method for Intermittent SKUs: Forecasting the Slow Movers Your Average Keeps Getting Wrong
Standard moving averages and exponential smoothing quietly mis-forecast your sporadic SKUs. Croston's method forecasts demand size and demand interval separately — here's how it works, when to use SBA or TSB, and how to decide which SKUs need it.
Little's Law for CPG Schedulers: Predict Line Lead Time from WIP and Throughput
The line is running at rate, yet orders keep shipping late. Little's Law explains why: lead time is WIP divided by throughput. Learn to predict flow time, cap queues, and quote promise dates you can keep.