EOQ quantity discount model
When a supplier offers an all-units price break schedule, the optimisation is no longer a single closed-form. You compute Q* at each tier’s holding cost H_k = i * C_k, test feasibility against the tier’s quantity range, then compare total annual cost (holding + ordering + purchase) across the feasible candidates. The winning tier is the global minimum[1].
All-units vs incremental discounts
All-units: the lower unit price applies to every unit if you cross the break point. Single discontinuous step down in unit cost. This is the common SMB supplier format.
Incremental: the lower unit price applies only to units above the break point. Total cost function is continuous; algebra is messier but no "forced jump" decision. Less common in industry but standard in academic problem sets[2].
When the forced jump pays
The forced jump (rounding Wilson Q* upward to the next break point) pays when the unit-price saving across the full annual demand D outweighs the increased carrying cost of holding a larger Q. Practical heuristic: if Wilson Q* at the lower-tier price is within 50 percent of the next break point, the jump usually wins; outside that band, the carrying penalty usually dominates. The calculator will tell you exactly.
Handling a supplier MOQ on top
- If Wilson Q* >= MOQ at the lowest available tier, ignore MOQ; it is non-binding.
- If Wilson Q* < MOQ, treat MOQ as the binding constraint and document the over-order penalty.
- If MOQ is a case-pack rounding (e.g. ship in cases of 24), round Wilson Q* up to the nearest case multiple and quantify the rounding penalty as ((Q_rounded - Q*)^2 * H) / (2 * Q*) - a small Taylor approximation that almost always sits under 1 percent of total annual variable cost.