Skip to main content

Replenishment policies

The replenishment policies that compete per SKU over the same scenarios, and how the winner is chosen by lowest expected total cost.

Canonical model: five policies

AInventory evaluates five replenishment policies (Fixed Coverage, Analytic Newsvendor, Proportional Variance, Historical Standard Error, Empirical Bootstrap) over a four-level statistical cascade, choosing the one with the lowest expected total cost. The 2026 User Manual shows a simplified two-policy view (Dynamic/RMSE); we document the five-policy model here. See ESTRUCTURA.md §5.1.

The shared mechanics

Every policy computes a target stock B: the inventory quantity desired at the start of the analysis window. The resulting order is:

Q = max(0, B − IP₀)

where IP₀ = on-hand inventory + in-transit inventory. If the positioned inventory already exceeds B, nothing is ordered (Q = 0).

All five policies are evaluated over the same Monte Carlo scenarios for the same SKU, with the same seed, ensuring their costs are directly comparable. The winner is the policy that minimizes expected total cost:

policy* = argmin_{p} E[total_cost(p)]

This comparison over identical scenarios eliminates sampling noise: differences in cost between policies reflect genuine performance differences, not artifacts of different random draws.

The five policies

Fixed Coverage

B = N · μ_W

The knob is N (number of coverage periods, explored on the grid 2, 3, 4, 5, 6, 7, 8). μ_W is the expected demand in the window W.

This is the most intuitive policy: "I want to hold stock for N periods." It makes no assumption about the shape of the demand distribution; its only lever is how many periods to cover. It is robust when demand is stable and the planner has good judgment about a reasonable coverage horizon. Its weakness is that it does not adapt to volatility: two SKUs with the same μ_W but different variance receive the same B even though their risks differ substantially.

Analytic Newsvendor

q* = c_s / (c_s + c_h)
B = μ_W + z_{q*} · σ_W

where c_s is the shortage cost, c_h is the holding cost, z_q* is the standard Normal quantile at q*, and σ_W comes from the scenarios.

This policy has no knob: the optimal point emerges directly from the cost structure. This is the classic newsvendor model solution (also called the newsboy model): under Normal demand and linear costs, the optimal service level is exactly q*. It works well with stable demand and symmetric errors. When demand has asymmetric tails or the true distribution departs from Normal, its performance degrades — which is why it competes against the other four rather than being the default policy.

Proportional Variance

B = μ_W + k · √μ_W

The knob is k. This policy assumes that the standard deviation of demand grows approximately as the square root of the mean — an assumption consistent with Poisson or negative-binomial distributions — making safety stock scale with the demand level rather than being an absolute amount.

This policy is especially useful for slow-moving or intermittent demand SKUs, where absolute variability is small but relative variability (coefficient of variation) can be high. Because it does not depend on σ_W estimated from historical errors, it is less sensitive to history quality.

Historical Standard Error

B = μ_W + k · RMSE_hist

The knob is k. The historical RMSE (Root Mean Squared Error) measures the average size of past forecast errors. This value is a direct proxy for forecast uncertainty: if the forecast has historically been off by ±50 units, safety stock should reflect that magnitude.

The strength of this policy is robustness: it requires no distributional assumption, only that past errors are representative of future ones. Its weakness is that the historical RMSE can become stale if demand behavior changes structurally (for example, after a product launch or discontinuation).

Empirical Bootstrap

B = μ_W + k · σ_W

The knob is k (grid 0.1, 0.5, 1.0, 1.5, 2.0, 2.5, 3.0, 3.5, 4.0, 4.5, 5.0; k = 0 is discarded). Here σ_W is computed directly from the scenario bundle — not from the raw historical data — making it consistent with the empirical distribution of simulated demand, including its asymmetries and extreme values.

With broad history (mature product), this is the most precise policy because it incorporates all available information about real demand behavior. It captures heavy tails and seasonal patterns that parametric formulas only approximate. With little history, the empirical σ_W can be noisy, which is why parametric policies are more relevant when history is scarce or moderate.

How the winning policy is chosen

For each knob value (or with no knob, in the Analytic Newsvendor case), the system simulates policy performance over the Monte Carlo scenarios and computes expected total cost = holding + shortage. The policy and knob value producing the lowest expected total cost win:

(policy*, k*) = argmin_{(p, k)} E[holding(p,k) + shortage(p,k)]

The result visible to the planner is the winning policy, the chosen k value, the recommended order Q, and the breakdown of expected costs. The other four policies and their costs are available in the SKU detail so the planner can understand why the winner won.

Comparability guaranteed by fixed seed

All five policies see exactly the same scenarios. A planner reviewing results will find that the summary table and the SKU detail produce the same numbers: the fixed seed ensures that any subsequent calculation over the same scenario set is reproducible.