Calculate Economic Order Quantity to minimize total inventory cost (ordering + holding). Use this skill when the user needs to determine optimal order size, balance ordering frequency against storage costs, or set reorder points — even if they say 'how much to order', 'optimal batch size', or 'inventory cost minimization'.
EOQ determines the order quantity that minimizes total inventory cost = ordering cost + holding cost. Formula: EOQ = √(2DS/H) where D=annual demand, S=ordering cost per order, H=holding cost per unit per year. Assumes constant demand and instantaneous replenishment.
Trigger conditions:
When NOT to use:
IRON LAW: EOQ Assumes CONSTANT, KNOWN Demand
If demand is variable or uncertain, EOQ gives the wrong answer.
Real-world application: use EOQ as a starting point, then add
safety stock for demand variability and lead time uncertainty.
Total cost curve is flat near EOQ — ±20% from optimal Q changes
total cost by only ~2%.
Determine: D (annual demand in units), S (fixed cost per order), H (holding cost per unit per year = unit cost × holding rate, typically 20-30% of unit value). Gate: All costs positive, demand estimate reasonable.
Check: ordering cost component ≈ holding cost component (they're equal at EOQ). Total cost is at minimum. Gate: Ordering cost ≈ holding cost (±5%).
Return EOQ with cost breakdown and reorder point.
{
"eoq": 500,
"orders_per_year": 20,
"reorder_point": 150,
"annual_cost": {"ordering": 2000, "holding": 2000, "total": 4000},
"metadata": {"demand": 10000, "order_cost": 100, "holding_cost": 4.0}
}
Input: D=10,000 units/year, S=$100/order, H=$4/unit/year Expected: EOQ = √(2×10000×100/4) = √500000 = 707 units
| Input | Expected | Why |
|---|---|---|
| Very high S, low H | Large EOQ, few orders | Minimize expensive ordering |
| Very low S, high H | Small EOQ, frequent orders | Minimize expensive holding |
| D = 0 | EOQ = 0, no ordering | No demand, no orders needed |
| Script | Description | Usage |
|---|---|---|
scripts/eoq.py | Compute Economic Order Quantity and cost breakdown | python scripts/eoq.py --help |
Run python scripts/eoq.py --verify to execute built-in sanity tests.
references/eoq-discounts.md