Arte SheetsLearn. Try. Understand.

Operations Research & Revenue Management

Littlewood Rule and EMSR-b Seat Protection Booking Limit Formula

Aggregate high-fare classes via Belobaba’s EMSR-b weighted fare p_pool, pooled SD SQRT(SUM sigma^2), and Littlewood’s critical ratio 1 - p_low / p_pool to set discount booking limits.

Pool higher fare buckets via EMSR-b to protect cabin seats against early discount demand

When discount leisure bookings (fare p_3) arrive before higher-yield business fares (p_1 > p_2 > p_3), selling too many discount seats cannibalizes late high-fare revenue, while protecting too many leaves empty seats at departure! Belobaba’s EMSR-b heuristic pools Classes 1 and 2 into one virtual class with mean demand mu_pool = mu_1 + mu_2, independent standard deviation sigma_pool = SQRT(sigma_1^2 + sigma_2^2), and demand-weighted fare p_pool = (p_1*mu_1 + p_2*mu_2) / mu_pool, then applies Littlewood’s rule: CDF(y_prot) = 1 - p_3 / p_pool!

Verify on a 150-seat aircraft (B2): Class 1 (p_1 = 500 in B3, mu_1 = 24 in B4, sigma_1 = 6 in B5) and Class 2 (p_2 = 400 in B6, mu_2 = 16 in B7, sigma_2 = 8 in B8) pool to mu_pool = 40 seats, sigma_pool = SQRT(36 + 64) = 10.0000 seats, and weighted fare p_pool = 18,400 / 40 = 460.00! Against discount fare p_3 = 230 (B9), Littlewood’s critical CDF is 1 - 230 / 460 = 0.5000 (z = 0), protecting y_prot = 40.00 seats and setting Discount Booking Limit BL_3 = 150 - 40 = 110 seats. Lower p_3 to 184 (CDF = 0.6000, z = 0.2529) and protection rises to 42.53 -> 43 seats (BL_3 = 107)!

EMSR-b Quantity (Cabin C = 150)FormulaSample Value (p_3 = 230)
Pooled High-Fare Demand & SDmu_1 + mu_2; SQRT(sig_1^2 + sig_2^2)40.00 seats, SD = 10.00
Weighted Pooled Fare (p_pool)(p_1*mu_1 + p_2*mu_2) / (mu_1 + mu_2)460.00
Littlewood Critical Fractile1 - p_3 / p_pool0.5000 (z = 0.0000)
Protected Seats & Booking LimitMIN(C, MAX(0, mu + z*sig)) -> C - y40 Protected / BL_3 = 110

EMSR-b Pooled Protection Level y_prot Formula (Hastings Rational Inverse Normal)

Validate fare hierarchy (0 < p_3 < p_pool) and positive demand before inverting u = 1 - p_3 / p_pool via Abramowitz-Stegun 26.2.23 (with exact z = 0 at u = 0.50).

=LET(cap_c, B2, p_1, B3, mu_1, B4, sd_1, B5, p_2, B6, mu_2, B7, sd_2, B8, p_3, B9, mu_pl, mu_1 + mu_2, IF(OR(cap_c <= 0, mu_1 < 0, mu_2 < 0, mu_pl <= 0, sd_1 < 0, sd_2 < 0, p_3 <= 0), "Invalid EMSR Input", LET(p_pl, (p_1 * mu_1 + p_2 * mu_2) / mu_pl, IF(p_3 >= p_pl, "Invalid Fare Hierarchy (Require p3 < p_pool)", LET(sd_pl, SQRT(sd_1^2 + sd_2^2), u_pr, 1 - p_3 / p_pl, z_val, IF(ABS(u_pr - 0.5) < 1E-12, 0, LET(p_tl, MIN(u_pr, 1 - u_pr), t_v, SQRT(-2 * LN(p_tl)), z_mg, t_v - (2.515517 + 0.802853 * t_v + 0.010328 * t_v^2) / (1 + 1.432788 * t_v + 0.189269 * t_v^2 + 0.001308 * t_v^3), IF(u_pr >= 0.5, z_mg, -z_mg))), y_raw, MIN(cap_c, MAX(0, mu_pl + z_val * sd_pl)), ROUND(y_raw, 4))))))

Integer Discount-Class Booking Limit BL_3 = C - ROUND(y_prot, 0) Formula

Subtract rounded protected seats from cabin capacity C to enforce the nested booking limit in reservation inventory.

=IF(ISTEXT(E4), E4, MAX(0, B2 - ROUND(E4, 0)))

Try the example

Use the original values or change them to test your understanding.

Further reading