本节摘要:库存论处理随机需求下的补货决策,核心模型是报童模型——最优订货量使缺货与滞销的期望损失平衡,落在需求的临界分位数上。本节推导并仿真该模型,引入决策树与效用函数表达风险态度,说明"期望值最大"未必是决策者的真实目标。
清早批发报纸,每份成本 0.8 元、售价 2 元,傍晚卖不掉的只能以 0.1 元回收。需求不确定——经验分布是:50 份概率 0.25、100 份 0.5、150 份 0.25。进多少货?
多进一份的边际账:如果这份能卖掉,赚 2 − 0.8 = 1.2 元;卖不掉,亏 0.8 − 0.1 = 0.7 元。直觉上"卖得掉的把握"要大到什么程度才值得多进一份?设卖掉的概率为 p,期望边际收益 p×1.2 − (1−p)×0.7 ≥ 0,解出 p ≥ 0.7/(1.2+0.7) ≈ 0.368。翻译成订货规则:按需求分布的 36.8% 分位数订货——也就是说,最优订量应当满足"真实需求不低于订量"的概率恰好是临界比率 cu/(cu+co),其中 cu 是单件缺货损失(少赚的 1.2),co 是单件滞销损失(0.7)。本题需求分布里 50 份对应累计概率 0.25、100 份对应 0.75,临界值 0.368 落在两者之间,按离得最近的可行订量取 100 份。
用期望利润直接枚举验证这个规则:
import numpy as np demands = np.array([50.0, 100.0, 150.0]) probs = np.array([0.25, 0.5, 0.25]) price, cost, salvage = 2.0, 0.8, 0.1 def expected_profit(q): sold = np.minimum(demands, q) left = q - sold return np.sum(probs * (sold * price + left * salvage - q * cost)) for q in [50, 100, 150]: print(f"订 {q} 份:期望利润 {expected_profit(q):.1f} 元") # 50 份赚 60;100 份赚 96.3;150 份赚 77.5 —— 100 份最优,与临界分位数规则一致
临界分位数规则的价值在于规模化:换一批数据,只要能估出需求分布和两种单位损失,最优订量当场可查,不必重新枚举。服装业的季前订货、航班的超售(把"滞销损失"换成"拒载赔偿")、医院血库的备血,全是报童结构。以航班超售为例:票价 800,拒载赔偿 1200,临界比率 = 1200/(1200+800)?方向要小心——超售问题的临界比率是"误机损失 ÷(误机损失 + 拒载赔偿)",代入实际数字后航空公司会订到"no-show 概率覆盖该分位"的座位数,逻辑与报童完全同构。
报童是单周期模型;现实库存是连续滚动。经典延伸是 (s, S) 策略:库存降到再订点 s 以下,就补到目标水位 S——它的最优性可以在需求随机的动态规划框架下证明,正是 3.4 节贝尔曼方程在库存场景的落地。另一个基石是 EOQ(经济订货批量):年需求 D、单次订货费 K、单位年持有成本 h,最优批量 Q* = √(2DK/h),它平衡"订货次数多则订货费高"与"每次订多则持有费高"两端:
D, K, h = 12000.0, 300.0, 4.0 # 年需求、单次订货费、单位年持有成本 Q_star = (2 * D * K / h) ** 0.5 n_orders = D / Q_star print(f"最优批量 {Q_star:.0f} 件,年订货 {n_orders:.1f} 次") # EOQ 假设需求均匀确定,与报童的随机需求互补:EOQ 管“多久订一次”,报童管“订多少的随机缓冲”
库存决策的损失是钱,但很多决策的后果不能只用期望金额比较。设备供应商面对两案:A 稳赚 90 万;B 五成概率赚 200 万、五成概率倒赔 40 万,期望 80 万。期望值说 A 更好(90 > 80),多数企业也确实选 A——但这不是数学错了,是决策目标不是期望利润,而是期望效用。风险规避者的效用函数是凹的(钱越多、每多一万的边际效用越低),对数效用 u(x) = log(x+41)(平移避免负数)下重新计算两案的期望效用,A 案胜出得更彻底;换成愿意赌的初创公司(凸效用或生存约束不同),选择可能反转。
决策树把这些结构画清楚:方块是决策节点(你选),圆点是随机节点(世界掷骰子),从右往左回溯期望值(或期望效用):
import numpy as np u = lambda x: np.log(x + 41.0) # 风险规避的效用 ua = u(90) ub = 0.5 * u(200) + 0.5 * u(-40) print(f"A 案效用 {ua:.3f},B 案期望效用 {ub:.3f} → 选 {'A' if ua > ub else 'B'}")
⚠️ 常见坑:给决策方汇报时只报期望值。正确的姿势是同时给出分布信息——最坏情形多惨、九成情况多好、期望居中在哪。第 4.1 节的机会约束与本节的效用函数,本质都是把"风险态度"写进模型,而不是藏在汇报语气里。
库存决策的质量由需求预测的质量决定,于是出现一个漂亮的追问:把预测做得更准一点,值多少钱。这个量叫信息的期望价值。以本节报童为例:若能提前知道确切需求(完全信息),期望利润是"按真实需求订货"的利润;在不完全信息下,最优期望利润是按临界分位数订货的利润。两者之差就是"先知"的价格上限——任何预测系统的投入都不该超过它。这个计算在实战中极其有用:一家企业考虑上马需求预测系统,报价百万,而信息的期望价值算出来只有二十万,项目就该否决;反之若它是千万量级,预测系统的每一分投入都有明确回报。先算信息的价格,再买信息——这是决策分析送给所有数字化项目的开户仪式。
不确定战场的三条战线到此走完。下一章回到确定性数据,但战场本身变成网络——点与线的世界,路径、流与巡游。