Skip to main content

Markdown Optimisation

Finite-season pricing · Stochastic DP

A retailer starts a season with inventory \(I_0\) and chooses a nonincreasing price path \(p_1 \geq p_2 \geq \cdots \geq p_T\) to clear stock at maximum revenue. Exact solution is a stochastic dynamic program over (period, inventory, price-level) states. Foundational papers: Smith & Achabal (1998); Bitran & Mondschein (1997); Caro & Gallien (2012) on Zara.

Why it matters

Scale of markdown in retail · documented operational lift

15–50%
Documented gross-margin lift from OR-driven clearance pricing at Zara, 2008–2011 rollouts across 6,000 stores.
Source: Caro & Gallien (2012), Operations Research 60(6).
~30%
Typical share of US apparel retail revenue sold at a marked-down price — a structural feature of fashion, not a failure mode.
Source: Pashigian (1988), AER.
~10%
Revenue lift reported by Smith & Achabal (1998) applying optimised markdowns vs. rule-of-thumb depth schedules at a US chain-store retailer.
Smith & Achabal (1998), Management Science 44(3).
T · |P|
Small state-space of the markdown DP (periods × discrete price levels) makes exact solution tractable on a laptop for any realistic season.
Bitran & Mondschein (1997), Management Science 43(1).

Where the decision sits

Fashion season · seasonal merchandise · end-of-life electronics

Markdown decisions apply whenever a retailer holds a fixed starting inventory facing a fixed selling window. Price can be cut but typically not raised (regulatory + customer-expectation constraint); demand responds to price; inventory not sold by the season end has only salvage value. Examples: fashion apparel (8-12 week season), seasonal holiday goods, end-of-life electronics, produce approaching its sell-by date, event merchandise. In a multi-period (s,S) replenishable setting the markdown question disappears; in single-lot settings it is often the dominant revenue lever.

Buypre-season order \(I_0\)
Listinitial price \(p_1\)
Markdowncascade \(p_2 \geq \cdots\)
Clearsalvage leftover

Problem & formulation

Stochastic DP with nonincreasing price constraint

OR family
Stochastic Dynamic Programming
Complexity
\(\mathcal{O}(T \cdot I_0 \cdot |P|^2)\)
Solver realism
★★★ Exact DP
Reference
Bitran & Mondschein (1997)

Sets and indices

SymbolMeaningDomain
\(t \in \{1, \ldots, T\}\)Period in the finite selling seasondiscrete
\(p \in P\)Allowed price level (full, −30%, −50%, −70%, clearance)discrete, ordered

Parameters

SymbolMeaningUnit
\(I_0\)Initial season inventory (buy quantity)units
\(d(p)\)Expected single-period demand at price \(p\)units / period
\(v\)Salvage value per unit not sold by \(T\)$ / unit
\(\gamma\)Discount factor per period (often 1 within one season)\(\in (0, 1]\)

Decision variable

SymbolMeaningDomain
\(p_t \in P\)Price chosen for period \(t\) (possibly depending on observed state)discrete

State and Bellman equation

State is the triple (period, remaining inventory, current price level) — the last needed to enforce the nonincreasing constraint. Under the expected-demand approximation (replace random demand by mean \(d(p)\)):

$$V(t, I, p_{\text{prev}}) \;=\; \max_{p \in P,\; p \leq p_{\text{prev}}} \Big\{\, p \cdot \min\bigl(d(p), I\bigr) \;+\; \gamma \, V\bigl(t+1,\; I - \min(d(p), I),\; p\bigr) \,\Big\}$$

Boundary: \(V(T+1, I, \cdot) = v \cdot I\). Solve backwards from \(t = T\).

Stochastic variant

When demand is random \(D_t(p)\), take expectations inside:

$$V(t, I, p_{\text{prev}}) \;=\; \max_{p \leq p_{\text{prev}}} \mathbb{E}\Big[\, p \cdot \min(D_t(p), I) \;+\; \gamma \, V(t+1,\, I - \min(D_t(p), I),\, p) \,\Big]$$

Demand model

The three families used most in the markdown literature:

$$d_{\text{linear}}(p) \;=\; a - b\,p \qquad d_{\text{exp}}(p) \;=\; a\,e^{-b\,p} \qquad d_{\text{iso-elastic}}(p) \;=\; a\,p^{-\epsilon}$$

Smith & Achabal use linear; Bitran & Mondschein use exponential and iso-elastic.

Deterministic LP relaxation

Drop the nonincreasing constraint and the min with inventory:

$$\max_{p_1, \ldots, p_T} \; \sum_{t=1}^{T} p_t \, d(p_t) \qquad \text{s.t.} \qquad \sum_{t=1}^{T} d(p_t) \;\leq\; I_0$$

When demand functions are identical across periods, the LP yields a constant price. Markdowns emerge only when inventory is too deep for the constant-price plan to clear by \(T\).

Real-world → OR mapping

How a merchant’s vocabulary translates to the DP

On the sales floorIn the DP
Season length (weeks)\(T\)
Pre-season buy quantity\(I_0\)
Allowed markdown depths (list, 30% off, 50% off, clearance)\(P\)
Sell-through at price \(p\)\(d(p)\)
Clearance / liquidation per unit\(v\)
Weekly price decision\(p_t\)
Season-end leftover\(I_T\)

Interactive solver

Expected-demand DP on a discrete price ladder; re-solve in browser

Markdown DP solver
Linear demand · 5-level price ladder · nonincreasing constraint
★★★ Exact DP
Number of pricing periods
Units bought pre-season
\(d(p) = a - b\,p\)
Price sensitivity
Recovery on leftover
e.g., 20% off
Expected revenue ($)
Total sold (units)
Leftover at T
Salvage revenue ($)
Realised average price ($)
Markdowns taken
Price path \(p_t\) Inventory \(I_t\) Demand \(d(p_t)\) (outline) Sold \(\min(d, I)\) (solid)

Under the hood

We discretise the state space over \((t, I, p_{\text{prev}})\) with \(I \in \{0, 1, \ldots, I_0\}\) and iterate the Bellman equation backward from \(t = T+1\) (salvage) to \(t = 1\). At each state we evaluate all admissible prices \(p \leq p_{\text{prev}}\), compute per-period sales as \(\min(\max(d(p), 0), I)\) using linear demand \(d(p) = a - b\,p\), and keep the price that maximises period revenue plus continuation value. The optimal policy \(p^{\ast}_t(I)\) is extracted by a forward pass. Full DP runs in \(\mathcal{O}(T \cdot I_0 \cdot |P|^2)\); for \(T=6\), \(I_0=200\), \(|P|=5\) that’s ~30,000 operations — sub-millisecond in the browser.

Reading the solution

What a merchant actually does with the optimal policy

Three patterns to watch for

  • Hold-at-full vs markdown-early. When demand at full price is strong relative to inventory, the policy holds full price most of the season and marks down only at the end. When inventory is deep, the policy moves to middle price levels early.
  • Monotone steps down. Because of the nonincreasing constraint, the policy is always a step function. Gaps between levels tend to be wide — one 30%-off, one 50%-off — because the discrete menu \(P\) forces jumps.
  • Endgame clearance. In the last one or two periods, if inventory remains above what full price can sell, the DP skips intermediate levels and goes straight to the deepest price. This is the “clearance rush” every retailer recognises.

Sensitivity questions the model answers instantly

  • Add a depth between 30% and 50%? — finer \(P\) often lifts revenue; try \(p_{2.5} = 25\).
  • Tighter pre-season forecast (lower \(I_0\))? — the policy holds full price longer and marks down less. Inventory discipline beats pricing discipline.
  • Salvage drops to zero (destruction instead of outlet resale)? — optimal policy becomes more aggressive in early markdowns.

Model extensions

From single-SKU baseline to retail-OR variants that matter

Stochastic demand

Replace expected-demand recursion with expectation over the demand distribution. State unchanged; value function becomes an expectation.

Multi-product markdown

Shared promotion budget or shared shelf constraint across SKUs. Cross-product cannibalisation makes the problem a stochastic program or approximate DP.

Clearance-deadline constraint

Force \(I_T = 0\) (regulatory or contractual end-of-season clean-out). Adds terminal penalty; optimal policy marks down faster.

Markdown with demand learning

Price probes demand. Bayesian updating of \(a, b\) after observed sales. See Dynamic Pricing with Learning.

Strategic consumers

Customers anticipate markdowns and wait. Caro & Gallien 2012; Cachon & Swinney 2011. Quick-response inventory mitigates the strategic wait.

Fashion buying →
Competitive markdown

Competitor pricing affects demand; problem becomes a stochastic game. Nash-Markov equilibria are the standard solution concept.

Pre-season buy + markdown

Jointly decide \(I_0\) and the markdown schedule before observing demand. Link to newsvendor.

Newsvendor →
Revenue-management framing

Finite capacity (= inventory) plus intensity-based demand gives the classical RM formulation. Talluri-van Ryzin 2004.

Revenue management →

Key references

Foundational markdown and clearance-pricing literature

Smith, S. A. & Achabal, D. D. (1998).
Clearance pricing and inventory policies for retail chains.
Management Science 44(3): 285–300. doi:10.1287/mnsc.44.3.285
Bitran, G. R. & Mondschein, S. V. (1997).
Periodic pricing of seasonal products in retailing.
Management Science 43(1): 64–79. doi:10.1287/mnsc.43.1.64
Caro, F. & Gallien, J. (2012).
Clearance pricing optimization for a fast-fashion retailer (Zara).
Operations Research 60(6): 1404–1422. doi:10.1287/opre.1120.1102
Heching, A., Gallego, G. & van Ryzin, G. (2002).
Mark-down pricing: an empirical analysis of policies and revenue potential at one apparel retailer.
Journal of Revenue and Pricing Management 1(2): 139–160. doi:10.1057/palgrave.rpm.5170016
Pashigian, B. P. (1988).
Demand uncertainty and sales: A study of fashion and markdown pricing.
American Economic Review 78(5): 936–953.
Elmaghraby, W. & Keskinocak, P. (2003).
Dynamic pricing in the presence of inventory considerations.
Management Science 49(10): 1287–1309. doi:10.1287/mnsc.49.10.1287.17315
Cachon, G. P. & Swinney, R. (2011).
The value of fast fashion: Quick response, enhanced design, and strategic consumer behavior.
Management Science 57(4): 778–795. doi:10.1287/mnsc.1100.1303
Phillips, R. L. (2005, 2nd ed. 2021).
Pricing and Revenue Optimization.
Stanford Business Books / Stanford University Press.
Talluri, K. T. & van Ryzin, G. J. (2004).
The Theory and Practice of Revenue Management.
Kluwer / Springer. doi:10.1007/b139000

Back to the retail domain

Markdown optimisation sits in the Price × Tactical cell of the 4P decision matrix — the revenue lever that rescues seasonal inventory from total loss.

Open Retail Landing
Educational solver · linear-demand assumption and fixed price ladder · validate against your own price-response elasticity before pricing live.