Capacity-constrained pricing for perishable inventory. Booking limits, bid-price controls, markdown optimization. Littlewood's rule and network revenue management.
Selling a fixed number of perishable units (seats, rooms, ad impressions) at the right time and to the right customer can double or triple revenue — revenue management gives you the rules and math to decide who to sell to, when, and at what price.
Revenue management studies optimal allocation and pricing of capacity-constrained perishable inventory using booking limits, bid-price controls, and markdown policies; it combines dynamic programming, Bayesian decision rules, and deterministic approximations to produce practically effective controls such as Littlewood's rule and network bid prices.
Revenue management (RM) is the study of how to maximize expected revenue from a perishable, capacity-constrained resource by controlling whether to accept requests (or which price to post) over time. Classic examples are airline seats, hotel rooms, spoilable advertising impressions, and limited edition product runs. The inventory is perishable because unsold units expire after the selling horizon (a flight departs; a night passes). Capacity is fixed and often small relative to demand variability, so correctly withholding capacity from low-paying customers in anticipation of high-paying customers can be valuable.
Formally, consider a finite time horizon t = 0,1,...,T (e.g. booking periods before departure), capacity (inventory) , and a sequence of stochastic demand arrivals for fare classes or products. Let be the fare (price) for class . At each arrival (or decision epoch) the manager chooses an action (accept or reject a request, or set a price). The goal is to choose a policy to maximize expected total revenue:
where is realized revenue at epoch , subject to the constraint that the total units sold never exceed initial capacity .
In Dynamic Programming (a prerequisite), this becomes a stochastic dynamic program: define the value function as the maximum expected revenue from time onward with units remaining. The Bellman recursion for a single arrival in period with an arriving class request is:
with boundary . Example (numeric): suppose (one decision epoch), capacity , and a single arrival that is class 1 with probability 1 and fare . Then ; the Bellman equation gives a trivial decision to accept. For multi-period, stochastic arrivals the Bellman recursion quickly grows in state and action branching.
Key conceptual tools that RM uses (and that you know from prerequisites):
Intuition: the manager should accept a low fare only if the expected future revenue from holding the unit (the option value) is less than the low fare. Littlewood's rule (derived shortly) gives a crisp form of this intuition for two classes; bid-price controls generalize it to many resources and products by pricing capacity via dual variables.
Why perishable + capacity? Because perishable inventory destroys inter-temporal substitution — unsold inventory is forever lost — so the manager faces a stochastic stopping/acceptance problem. In contrast to static price discrimination (one-shot), RM trades off present vs. future sales under capacity scarcity, leveraging Dynamic Programming and posterior expectations (Bayesian Decision Theory) to produce implementable heuristics.
Booking limits and Littlewood's rule are the foundation of two-class revenue management. Consider two fare classes: high () with price , and low () with price where . Future high-fare demand is stochastic; we want a simple rule to decide whether to accept an arriving low-fare request given remaining capacity and remaining booking horizon.
Littlewood's rule (classic statement): Maintain a protection level (number of seats reserved for high-fare passengers). Accept a low-fare booking only if the remaining capacity strictly exceeds (i.e., accept if ). The protection level is chosen to solve
where is the random number of arriving high-fare passengers in the remainder of the selling horizon. Equivalently, set as the smallest integer such that .
Derivation (short, rigorous sketch): Consider the moment a single low-fare request arrives, with remaining capacity and future high-fare demand random variable (not counting the current low request). Rejecting the low fare leaves capacity to capture future high fares; accepting reduces capacity to . The expected incremental value of keeping one seat for high fares equals the high-fare revenue times the probability that at least one high-fare customer will arrive to use that seat: . If we accept the low fare, we get now; if we reject we expect to earn with probability . Accept iff
Rearrange and define ; then accept iff . Choosing to satisfy the equality gives the canonical protection level. This uses Bayesian decision thinking: the posterior expectation of future reward (here ) is compared to immediate reward and the action minimizing expected loss (regret) is chosen.
Concrete numeric example: Suppose , so . Suppose future high-fare demand is Poisson(). Then compute tail probabilities:
We need . From above, , . So solution is . Interpretation: protect seat for high fare; accept a low-fare booking only when (i.e., when at least 2 seats remain). If , accept low; if , reject low.
Mechanistic intuition: Littlewood uses only the distribution of future high demand and the two prices – it doesn't require computing the full DP. It is exact for two classes under the assumption that high-fare requests are i.i.d. in remaining horizon and that high fares are first-come-last-served in reservation logic. It is also expressible via a marginal-value comparison: accept iff expected increment from saving the seat, .
Multiple classes and nested protection levels: If there are more than two fare classes ordered , we can sequentially apply Littlewood's rule to compute a nested set of protection levels . For example, to decide whether to accept class we compute the protection level against all higher classes combined (treating their aggregate demand distribution) and accept only if .
Limitations and when Littlewood is exact: Littlewood is exact under independent, stationary arrivals and for the two-class case. For more general arrival processes (choice-based demand, nonstationary Poisson), it is an approximation; it is often a very good one in practice when demand forecasts are accurate.
Connection to Dynamic Programming and Bayesian Decision Theory: The inequality is a one-step Bayes-risk minimizing rule: the posterior expected value of rejecting equals ; accept if immediate reward exceeds that posterior expectation. From Dynamic Programming, this rule is equivalent to comparing fare with the marginal value of capacity when the value function has particular structure (monotone marginal values) — this is why Littlewood emerges as a closed-form policy.
Real problems rarely have a single resource and two fares. Airline problems involve many itineraries that consume multiple flight legs; hotels combine room-types and dates; advertising sales allocate impression bundles across campaigns. In multi-resource, multi-product settings we use bid-price controls derived from a deterministic linear program (DLP) approximation, whose dual variables act as shadow prices (bid prices) for scarce resources.
Network model: Let there be resources (e.g., flight legs) with capacities for . There are products (offers), each with price and a deterministic or expected demand over the horizon (the DLP uses expected demand). Product consumes units of resource (often 0 or 1). The deterministic LP (DLP) allocates expected sales to maximize expected revenue:
Numeric example: Two legs () with capacities seats; three products : product 1 is nonstop on leg 1 only () with price and expected demand ; product 2 is nonstop on leg 2 only () with , ; product 3 is a connecting itinerary using both legs () with , . The DLP is:
maximize s.t.
Solving by inspection: we would prefer to sell connecting product 3 whenever both legs have capacity because is greater than ? (Note: check arithmetic: , so in this example selling two separate nonstops generates more revenue than one connecting ticket — this is a modeling choice.) Suppose connecting revenue is attractive relative to single legs; we find the LP solution using simplex or intuition. For this particular example, assume the LP's optimal corner solution is (because nonstops individually have higher combined revenue than connection). The dual variables (shadow prices) associated with leg capacities, call them , satisfy dual constraints:
Dual (informal): minimize subject to the covering constraints; the dual values give the marginal value of an extra unit of capacity on leg . In our (assumed) primal solution , both legs are not at full capacity simultaneously (leg 1 used 80/100, leg 2 used 90/100), so dual prices may be if demand bounds bind; more realistic examples will have binding capacity and positive duals.
How to use duals as a control: At runtime, when a booking for product arrives, compute its resource cost under duals: . Accept the booking if
This is exactly the expected-revenue criterion: accept if fare exceeds the expected value of capacity consumed (the posterior expected opportunity cost). Numeric demo: suppose the LP dual yields and . For product 3 (uses both legs), opportunity cost = . Compare to ; since , we accept; for product 1 (uses leg 1 only), opportunity cost , compare to accept.
Relation to Littlewood: For a single resource () with two fares, the dual price reduces to interpreted as the marginal expected value of capacity, and Littlewood's inequality is the same as . Thus the bid-price rule generalizes Littlewood to networks by replacing the scalar with dual prices that aggregate expected marginal values across resources.
Why the DLP? The exact DP for networks suffers from curse of dimensionality (state space is inventory vector in ). The DLP is a fluid (deterministic) approximation: it optimizes expected usage of capacity and ignores stochastic sequencing. Its dual gives economically interpretable shadow prices. Even though the DLP ignores stochasticity, the resulting bid-price controls are often very good in practice, especially when re-solved frequently and combined with stochastic protection updates (EMSR variations).
Refinements and theory:
Connection to Bayesian Decision Theory: The dual price is an estimator of the shadow value of capacity. The decision "accept if " minimizes expected one-step regret when equals the posterior expected marginal value of capacity. Thus bid-price controls are just Bayes-optimal greedy rules under an approximation where the future value function is replaced by its linear estimate derived from the DLP.
Revenue management is pervasive across perishable-inventory industries. I list key applications, extensions, and practical considerations, showing how the theory connects to implementation.
Airline and Transportation: Airlines were the originators of modern RM. Each flight has multiple legs (resources), itineraries (products) that consume subsets of legs, and many fare classes. Practical systems implement nested booking limits and bid-price or EMSR controls derived from DLPs that are frequently re-optimized. Real systems face cancellations, overbooking, no-shows, and fare class granularities with integer seat blocks.
Example numeric application: A low-cost carrier manages a single flight with capacity 150 and a forecast that 60 passengers will buy a refundable flexible ticket at 100 with time-varying arrival rates over 30 days. Using Littlewood one can compute protection for flexible fares; using DLP one can allocate expected sales across fare types and set bid prices; the dual price (say ) implies reject any request below $180$ (so accept only flexible or large group budget requests).
Hotels and Perishable Retail: Hotels have per-night per-room perishability. Markdown optimization (dynamic pricing) is typically used near-date where remaining inventory is large relative to remaining demand. A canonical markdown model: continuous price , demand per remaining period. The DP chooses to maximize expected revenue subject to inventory depletion. While closed-form solutions exist for special cases, in practice heuristic rules like "price so that expected sales per remaining period equal remaining inventory divided by remaining periods" are used, or numerical DP is employed. Concrete numeric example: inventory 10, periods 2, demand . One computes the optimal and by enumerating feasible sales and their values.
Advertising and Online Platforms: Perishable inventory is impressions for a given time window. Demand is stochastic and often modeled via auctions. RM in this setting involves real-time bid prices for budgets and pacing; dual prices come from a DLP that allocates impressions to campaigns subject to budget constraints.
Choice-based demand and robustification: Real customers choose among offered prices or fare classes; choice models (MNL, nested logit) replace independent arrival models and change optimal controls from booking limits to assortment/price decisions. Bayesian estimation is used to update demand model posteriors; decisions are then Bayes-optimal given current beliefs.
Machine Learning + RM: Modern systems use ML to forecast demand (conditional on context) and feed those forecasts into DLP or DP approximations. Combination is nontrivial because forecasts are inevitably biased; safe policies use robust optimization, constrained re-optimization, or end-to-end policies trained by reinforcement learning.
Limitations and practical adjustments:
Theoretical frontier: Network revenue management remains an active research area in applied probability and optimization. Results include asymptotic optimality of static bid-price policies under scaling (fluid and diffusion limits), performance bounds for EMSR heuristics, and improved policies via approximate dynamic programming with provable regret bounds.
Connection to your prerequisites and next steps: The DP backbone is essential to derive value-function-based policies (Dynamic Programming). Bayesian Decision Theory explains decision thresholds as posterior expected value comparisons (accept iff price >= expected shadow price). Price Discrimination provides the microeconomic intuition about segmenting customers by willingness-to-pay. Looking forward, mastering RM enables work in choice-based revenue management, reinforcement-learning-powered dynamic pricing, and robust optimization for uncertain demand.
Practical rule-of-thumb summary:
This completes the core mechanics and their connection to practical revenue management.
Two fare classes: high fare , low fare . Future high-fare demand . Remaining capacity can be 0,1,2. Use Littlewood to compute protection level and specify when to accept low fare.
Compute the price ratio: .
For Poisson() compute tail probabilities: (approx).
Compute (approx).
Find smallest integer with . From the numbers, and . So choose .
Interpretation: Protect seat for high fare. Accept a low-fare request only if , i.e., accept only when ; if reject low fare.
Insight: This example shows how Littlewood converts a demand distribution and price ratio into a simple protection level. It demonstrates how the rule uses tail probabilities rather than full DP computation and clarifies why the protection level is integer-valued.
Two resource legs with capacities , . Three products: product 1 uses leg 1 only with and ; product 2 uses leg 2 only with and ; product 3 uses both legs with and . Solve DLP and compute dual prices ; then state accept/reject rule for an arriving product 3 booking.
Write the DLP: maximize subject to , , and demand bounds , , .
Look for capacity-binding constraints. Check if selling all demands violates capacities: total leg1 use if sell all = , so capacities bind.
Consider candidate solution: sell full demands , and then allocate remaining capacity to but note legs limit to on leg1 and on leg2, so max (bottlenecked by leg2). So feasible point is with revenue .
To compute duals, note that both leg constraints are tight at this solution: leg1 used actually is NOT tight — recompute: leg1 usage = (so slack 10), leg2 usage = (tight). Thus only leg2 is binding; its dual , is possible. The dual conditions require for each product : unless is at its upper demand bound, in which case complementary slackness applies.
Assume complementary slackness gives (intuitively since product 2 saturated demand at price 150) and . Then opportunity cost for product 3 is . Since , the bid-price rule accepts product 3 bookings.
Thus the runtime rule: accept product 3 if (true), so accept until leg2 capacity is exhausted; product 3 acceptance will be curtailed when leg2 has no capacity left.
Insight: This example shows how the DLP yields intuitive dual prices that aggregate resource scarcity into per-product opportunity costs. Even with simplifications, duals guide accept/reject decisions without solving a high-dimensional DP.
Inventory 5 identical units, horizon of 3 discrete selling periods (t=1,2,3). Demand in a period given price is deterministic expected sales (i.e. linear inverse demand with integer rounding). No replenishment and no salvage value. Compute optimal posted prices and resulting expected revenue via dynamic programming.
State definition: = max expected revenue from periods with units remaining. Terminal for all .
At period 3, choose price to maximize since only one period remains. Enumerate candidate prices because becomes 0 at .
Construct a small table for : for each compute best and . For example, if : revenue candidates are gives => revenue ; gives but capped by so revenue $4$; best is . Thus . Similarly compute : try gives => revenue $8$, gives revenue $5$, so best and .
Now proceed to period 2: for each compute . For , one candidate is sells 2 now for revenue 8 and leaves 0 so . Try sells 3 but capped at s=2 so sells 2, revenue $6$ then V_3(0)=0 so worse. So .
Repeat to compute similarly by enumerating prices: one optimal policy (calculated by full enumeration) is (sell 3 units), (sell 2 units), irrelevant. Revenue = matching DP value .
Thus the optimal dynamic pricing is to charge a moderate price early to ration inventory and raise price later when inventory is lower. The DP computed exact integer-optimal prices for this toy model.
Insight: This worked example demonstrates how dynamic programming produces nontrivial markdown schedules: price depends on remaining inventory and time. It also shows the computational burden even in a small discrete model — motivating approximations (e.g., continuous-time elasticities, myopic heuristics) in larger problems.
Revenue management frames selling of perishable, capacity-constrained inventory as a stochastic dynamic optimization where the marginal value of capacity drives acceptance decisions.
Littlewood's rule gives an exact acceptance/protection rule for two-class problems: protect seats so that , and accept the low fare iff remaining capacity exceeds .
In networks of resources, deterministic LP (DLP) approximations yield dual variables that serve as bid prices; accept a request iff its revenue exceeds the sum of dual prices of consumed resources.
Bid-price rules are Bayes-optimal one-step greedy policies when duals estimate the posterior marginal value of capacity; frequent re-solving and stochastic adjustments improve performance.
Markdown optimization is the pricing analogue: dynamically choose prices to ration inventory over remaining periods according to demand elasticity and remaining stock.
Practical systems combine forecasting (ML) with DLP/DP approximations, and must cope with cancellations, strategic customers, and forecast uncertainty using robust or stochastic extensions.
Mastering DP, Bayesian decision comparisons, and price discrimination intuition allows you to derive, justify, and refine RM heuristics used in production.
Treating DLP dual prices as exact shadow prices without accounting for stochasticity — DLP ignores variance and sequencing; duals are approximations and should be updated periodically or combined with stochastic buffers.
Misapplying Littlewood's rule by equating to instead of (i.e., swapping numerator/denominator) — sign/direction errors reverse protection decisions and cause revenue loss.
Assuming bid prices are static through the horizon — capacities and remaining demand change, so bid prices should be recomputed or adjusted over time for good performance.
Treating arrivals as independent of price in markdown models — if customers are strategic (time their buy), the naive DP with price-elastic demand may be biased; model strategic behavior explicitly.
Easy: Two fare classes with , , future high demand . Compute protection level via Littlewood's rule (choose smallest integer with ) and state for which remaining capacities you accept low fares.
Hint: Compute . Evaluate using Poisson formulas until tail probability drops to .
Compute Poisson pmf: , , so , . So choose . Accept low fare iff remaining capacity , i.e., accept when and reject when or 0.
Medium: Consider a network with two legs, capacities . There are two products: product A uses leg1 only (, expected demand ) and product B uses both legs (, ). Formulate the DLP and compute the dual price(s). Use the dual(s) to decide whether to accept an arriving product B booking when both legs have full initial capacity.
Hint: Set variables , constraints (leg1), (leg2) plus demand bounds. Solve primal corner solution and derive dual prices by complementary slackness.
DLP: max s.t. , , , . Selling all demands would require leg1 usage so capacity binds. Candidate primal: saturate (its demand cap) and then allocate up to leg1 capacity: (because leg1 has space 10). Revenue = . Leg1 is tight (), leg2 is not (). Dual prices: let correspond to leg1, and to leg2. Complementary slackness suggests . Dual constraints require for product A if at bound? Since is at its demand upper bound, the corresponding dual for demand cap will adjust; practically we can take . Then opportunity cost for product B is . Since accept product B. Thus at start with full capacity the DLP-informed bid-price rule accepts product B.
Hard: Consider a single product with inventory and selling horizon T=2 periods. Demand per period is stochastic: if price is set, demand is Poisson with mean for integer (assume ). No cancellations. Formulate the exact DP for optimal posted prices and compute the optimal prices and expected revenue by enumerating the state-space.
Hint: State is (period,remaining inventory). For each state compute expected revenue for each candidate price by summing over Poisson probabilities truncated by inventory. Use backward induction from period 2 to 1.
Define . For period 2, , because leftover inventory has no salvage. Compute for each s=0..3 and p=1..4 the expected sold units and revenue . For example, for s=1 and p=4, , , , so , revenue = . Compute all p and pick best; suppose results give with (numeric values after enumeration). Then compute . Evaluate for p=1..4 using Poisson probabilities (e.g., if p=2 then , compute for k=0..3, multiply and sum). After full enumeration (mechanical but finite), you obtain optimal initial price (numerically, say ) and expected revenue . The full numeric table requires standard Poisson calculations; the key is that DP with small state is computable by brute force enumeration and yields an optimal nontrivial pricing policy that depends on remaining inventory.
This lesson uses and extends the prerequisites in explicit ways. From Price Discrimination we import the idea of segmenting customers by willingness-to-pay; RM operationalizes this through fare classes or posted-pricing menus and uses segmentation to ration capacity. From Dynamic Programming we import backward induction and value functions: the core decision criterion in RM is comparing immediate reward to the marginal value of capacity, , which is the DP notion of opportunity cost. From Bayesian Decision Theory we import posterior expected-loss comparisons: accept/reject rules (e.g., Littlewood's inequality, bid-price threshold) are pointwise Bayes-optimal decisions when the estimated opportunity cost is the posterior expectation. Looking forward, mastering these RM tools enables work in choice-based revenue management (requires incorporating discrete choice models into DP), reinforcement learning for dynamic pricing and allocation (where value-function approximation and policy gradient methods replace the DLP), and robust/stochastic optimization for uncertain demand (where distributional robustness modifies DLP duals to produce conservative bid prices). Specific downstream concepts that require this material include Expected Marginal Seat Revenue (EMSR) heuristics, assortment optimization under capacity constraints, and dual-based online allocation algorithms for ads and cloud resources.