Solve the newsvendor problem for single-period ordering decisions under uncertain demand. Use this skill when the user needs to determine optimal order quantity for perishable goods, seasonal products, or one-time purchase decisions — even if they say 'how much to order for this season', 'perishable inventory', or 'single-period ordering'.
The newsvendor model determines optimal order quantity for a single selling period with uncertain demand. Balances overage cost (Co = cost - salvage) against underage cost (Cu = price - cost). Optimal Q* satisfies: P(D ≤ Q*) = Cu / (Cu + Co). Known as the critical ratio solution.
Trigger conditions:
When NOT to use:
IRON LAW: The Critical Ratio Determines Optimal Service Level
Q* = F⁻¹(Cu / (Cu + Co)) where F⁻¹ is the inverse demand CDF.
If margin is high relative to cost (Cu >> Co), order MORE (high service level).
If margin is low relative to excess cost (Co >> Cu), order LESS (low service level).
The optimal solution almost NEVER equals expected demand.
Define: unit cost (c), selling price (p), salvage value (v), demand distribution (mean μ, std σ). Compute: Cu = p - c, Co = c - v. Gate: p > c > v (profitable with positive overage cost), demand distribution estimated.
Check: Q* > 0, CR between 0 and 1, Q* is above or below μ depending on whether CR > or < 0.5. Gate: Q* directionally correct relative to mean demand.
Return optimal order quantity with profit analysis.
{
"optimal_quantity": 130,
"critical_ratio": 0.71,
"expected_profit": 2800,
"expected_leftover": 15,
"expected_stockout_probability": 0.29,
"metadata": {"price": 50, "cost": 20, "salvage": 5, "demand_mean": 100, "demand_std": 30}
}
Input: p=$50, c=$20, v=$5, D~Normal(100, 30) Expected: Cu=30, Co=15, CR=30/45=0.667, z=0.43, Q*=100+0.43×30=113 units.
| Input | Expected | Why |
|---|---|---|
| v = 0 (total loss) | Lower Q*, conservative | High overage cost pushes order down |
| p >> c (high margin) | Q* well above mean | Worth risking excess to avoid lost sales |
| σ = 0 (certain demand) | Q* = μ exactly | No uncertainty, order exactly demand |
| Script | Description | Usage |
|---|---|---|
scripts/newsvendor.py | Compute newsvendor optimal quantity, expected profit, and fill rate | python scripts/newsvendor.py --help |
Run python scripts/newsvendor.py --verify to execute built-in sanity tests.
references/constrained-newsvendor.mdreferences/demand-fitting.md