跳到正文
格致开物MATHWIKI

报童模型

内容维护:格致开物 · 编写与核验 · 修订记录 · 纠错

报童模型(newsvendor model)是先决定一次订货量、再面对随机需求的单周期库存模型。订少了损失未满足需求的贡献,订多了产生剩余成本;最优数量通常由需求分布的某个分位数决定,而不是直接取平均需求。

设一个教学商品单价十二元,采购成本每件六元,期末未售出可回收每件二元。需求 D 只可能为一、二、四件,概率分别为 1/4,1/2,1/4。本篇先用这个有限例子计算,再说明一般的分位数规则。所有数字都是为讲解构造的模型输入。

决策时点、成本与目标

设需求 D≥0,且 𝔼D<∞。订货量 q≥0 在观察需求之前确定。售完后的剩余量为 (q−D)+,缺货量为 (D−q)+,其中 x+=max⁡(x,0)。给定单位过量成本 co>0、单位不足成本 cu>0,目标是 minq≥0C(q),C(q)=co𝔼(q−D)++cu𝔼(D−q)+. 需求有限期望保证固定有限 q 下的这些期望有限。成本与需求分布为输入,q 是决策;不能在每个需求已经知道后分别选择一次订量,再把它称作同一个事前决策。[1]

若销售单价为 p、采购成本为 c、残值为 v,并满足 p>c>v≥0,则没有另加缺货罚款时 cu=p−c,co=c−v. 这可以从利润核对。对一次需求 d,利润为 π(q,d)=pmin⁡(q,d)+v(q−d)+−cq=(p−c)d−co(q−d)+−cu(d−q)+. 需求项 (p−c)d 与决策无关,所以最大化期望利润等价于最小化 C(q)。缺货成本取损失的毛利,不能在已经扣过采购费用后再次把全部售价作为额外损失重复计算。

分位数规则的推导

先允许 q 连续。每个实现成本 co(q−d)++cu(d−q)+ 是分段线性的凸函数,正权重求平均后 C 仍凸。若分布函数 F(q)=Pr⁡(D≤q) 在 q 处连续,则边际成本为 C′(q)=coF(q)−cu[1−F(q)]=(co+cu)F(q)−cu. 原因是需求低于订量时多订一小单位增加过量成本,需求高于订量时减少不足成本。每个实现的斜率被 max⁡(co,cu) 控制,因此可以对期望取这一边际极限。

定义临界比率 α=cucu+co∈(0,1). 在连续且严格递增的分布区域,最优点由 F(q∗)=α 确定。一般含原子的分布则应使用左右斜率: C'−(q)=(co+cu)F(q−)−cu,C'+(q)=(co+cu)F(q)−cu. 凸函数在此最小,当且仅当左斜率不大于零、右斜率不小于零,即 F(q−)≤α≤F(q). 若分布在一段区间内没有需求质量,且该段的 F 恰等于 α,整段都可能最优;只报出一个分位点不等于证明解唯一。

需求一二四的阶梯分布与临界比率六除以十相交于二的跳跃处
本例 α=0.6,F(2⁻)=0.25、F(2)=0.75,临界比率落在跳跃之间,因此订量二最优。实心与空心点区分阶梯端点。

若需求和订量都取非负整数,也可完全不用微分。比较订 q+1 与订 q:当 D≤q 时增加 co,当 D≥q+1 时减少 cu,故 C(q+1)−C(q)=(co+cu)F(q)−cu. 随着 q 增大,该差分不减;从负变为非负时达到最小。最小的整数最优订量因此是最小满足 F(q)≥α 的非负整数。

三种需求下逐项复算

开头价格给出 cu=6,co=4,所以 α=3/5。期望需求为 9/4=2.25,但临界分位数为二。

对 q=2,需求为一时剩一件,成本四;需求为二时无偏差;需求为四时缺两件,成本十二。按概率加权, C(2)=14⋅4+12⋅0+14⋅12=4. 其他相邻选择分别为 C(1)=12⋅6+14⋅18=7.5, C(3)=14⋅8+12⋅4+14⋅6=5.5,C(4)=7. 由差分式,C(2)−C(1)=10F(1)−6=−3.5,C(3)−C(2)=10F(2)−6=1.5,两者与直接求和一致。

订量从零到五时的期望偏差成本为分段线性凸曲线,二处最低四
红色与金色分别为期望不足和过量成本,实线为两者之和。整数二最优,连续订量二也最优。

此时预计售出 𝔼min⁡(D,2)=7/4 件,预计剩余 1/4 件,期望利润为 12⋅74+2⋅14−6⋅2=9.5. 也可按“完全知道需求时的利润减去偏差成本”核对:6𝔼D−C(2)=13.5−4=9.5。两种计算不重复扣成本。

变式。 只把售价提高到二十二,保持采购、残值与需求分布不变。现在 cu=16,co=4、α=0.8;F(2)=0.75 尚未达到阈值,最小最优订量变为四。此时 C(2)=9、C(4)=7,期望利润分别为 36−9=27、36−7=29。最优订量的改变来自不足成本变化,不是需求均值改变。

精确离散分布实现

以下实现接受有限的 (需求整数, 概率) 表,概率与成本使用整数或 Fraction。同一需求的重复记录会合并;概率必须非负且总和恰为一,两个单位成本必须为正。函数不改写输入,返回最小最优整数订量、期望偏差成本与临界比率。

Python 3
from fractions import Fraction


def discrete_newsvendor(distribution, underage, overage):
    def exact(value):
        if isinstance(value, bool) or not isinstance(value, (int, Fraction)):
            raise TypeError("Use integers or Fraction")
        return Fraction(value)

    cu, co = exact(underage), exact(overage)
    if cu <= 0 or co <= 0:
        raise ValueError("Both costs must be positive")
    mass = {}
    for demand, probability in distribution:
        if type(demand) is not int or demand < 0:
            raise ValueError("Demand must be a nonnegative integer")
        probability = exact(probability)
        if probability < 0:
            raise ValueError("Negative probability")
        mass[demand] = mass.get(demand, Fraction(0)) + probability
    if sum(mass.values(), Fraction(0)) != 1:
        raise ValueError("Probabilities must sum exactly to one")
    alpha, cumulative = cu / (cu + co), Fraction(0)
    for quantity in sorted(mass):
        cumulative += mass[quantity]
        if cumulative >= alpha:
            cost = sum((p * (co * max(quantity - d, 0)
                             + cu * max(d - quantity, 0))
                        for d, p in mass.items()), Fraction(0))
            return quantity, cost, alpha


probabilities = [(1, Fraction(1, 4)), (2, Fraction(1, 2)),
                 (4, Fraction(1, 4))]
print(discrete_newsvendor(probabilities, 6, 4))
print(discrete_newsvendor(probabilities, 16, 4))
# (2, Fraction(4, 1), Fraction(3, 5))
# (4, Fraction(7, 1), Fraction(4, 5))

扫描中累计概率始终等于当前需求值处的分布函数;首次达到临界比率就是上面差分证明给出的最小最优点。因为全部概率最终加到一、α<1,合法输入一定返回。若有 m 条记录,合并、求和成本为线性,排序为 O(mlog⁡m),存储为 O(m),有理数位长另计。

模型边界与扩展

模型假设单次事前决策、一个周期、单位成本固定,且需求分布在决定订量时已知或已估计。多周期补货、交货延迟、积压订单、库存容量、售价影响需求以及多商品共享预算,都增加了新的状态或约束,不能只替换一个分位数就认为问题相同。

期望成本最小也不等于每次需求实现时成本都小。本例订二遇到需求四仍会缺两件;若目标变为控制缺货概率或尾部损失,应另写服务约束或条件风险价值等风险目标。输入概率估计不准时,公式代入正确也不保证现实预测可靠;模型的数学最优性与需求资料的准确性应分别检查。

参考资料

  1. ↑ Fabio Furini:The Newsvendor and its variants,Operations Research Lab,“Basic model and the quantile rule”,过量/不足成本、期望目标及临界分位数。本文使用不同的离散需求和完整边际推导。访问日期:2026年10月25日。