引言
本文介绍了一个经典的商品采购模型(报童问题)及其解法. 该模型通过考虑需求的不确定性来最大化销售利润. 注: 本文的主要内容参考Gallego.
1. 报童问题
这是一个关于卖报商人采购报纸的问题. 每天早上, 卖报商以批发价0.3元(每份)向报社采购当天的报纸, 然后以零售价1元(每份)进行售卖. 如果报纸在当天没有卖完, 他会把报纸以0.05元(每份)的价格卖给废品回收站. 那么卖报商应该如何确定报纸的采购数量?
我们先简单分析一下这个问题的特点:
- 采购一个商品.
- 在一个采购周期内仅采购一次.
- 采购之时不知道准确的需求.
- 商品会过期.
2. 数学模型
下面我们用数学语言把这个问题再描述一下.
参数
- 单位采购成本(cost per unit):
c
- 零售价(sale price):
p
- 残值(salvage value), 即商品过期之后的售价:
s
- 需求(demand): 随机变量
D服从分布
F, 均值和标准差分别记为
μ,σ
决策变量
目标
- 最大化期望收益
π(x):=p⋅E[min(x,D)]+s⋅E[max(x−D,0)]−cx
不失一般性, 我们假设
p>c>s, 否则问题的最优解是显而易见的.
3. 求解
记
x+:=max(x,0),x−:=min(x,0). 因此
x=x++x−,
x−=−(−x)+. 利用
min(x,D)=D−(D−x)+, 我们可以把
π(x)表示成如下形式:
π(x)=(p−c)μ−α(x),
其中
α(x)=(c−s)E[(x−D)+]+(p−c)E[(D−x)+].
因此
maxπ(x)⇔minα(x). 记
h=c−s,
b=p−c. 则
h,b分别代表采购过量(overage)和少量(underage)的单位成本.
令
f(z)=hz+−bz−.
α(x)可以被写成
α(x)=E[f(x−D)].
由于
f(z)是凸函数, 它的线性变换
α(x)也是凸函数, 当
F是连续分布时, 最优解的一阶导数为0. 我们可以通过交换积分号导, 即
α′(x)=h⋅E[δ(x−D)]−b⋅E[δ(D−x)]
其中
δ(z)=1 如果
z>0, 否则
δ(z)为0.
注意到
E[δ(x−D)]=Pr(x−D>0)且
E[δ(D−x)]=Pr(D−x>0). 我们有
α′(x)=h⋅Pr(D<x)−b⋅Pr(D>x).
令
α′(x)=0, 我们得到
F(x):=Pr(D≤x)=b+hb.
临界分位数(Critical Fractile)
γ=b+hb.
由于
F是随机变量
D的cdf(cumulative distribution function) (单调非递减), 因而存在逆函数. 设最优解为
x∗, 因此
x∗=F−1(γ).
4. 例子
本节考虑两个具体的例子. 一个是
D服从正态分布(连续分布), 可以按照前文的公式计算最优解; 另一个例子是
D服从Poisson分布, 我们介绍如何把计算方法适配到离散分布的情形.
4.1 正态分布
D∼N(μ,σ2). 令
Z∼N(0,1),
Φ(z)=Pr(Z≤z)且
zγ=Φ−1(γ).
由于
Pr(σD−μ≤zγ)=Φ(zγ)=γ.
因此
x∗=μ+zγσ.
例
D服从正态分布,
μ=100,
σ=20. 设
c=5,
h=1,
b=3. 我们的计算步骤如下:
-
γ=h+bb=0.75
-
zγ=Φ−1(0.75)=0.6745
>>> from scipy.stats import norm
>>> norm.ppf(0.75)
0.6744897501960817
-
x∗=μ+zγ⋅σ=100+0.6745∗20=113.49
4.2 Poisson分布
Poisson分布的pmf (probability mass function)为
Pr(D=k)=e−λk!λk.
由于Possion分布是离散分布(对任意的
γ,
F−1(γ)不一定可计算), 我们令
x∗=argxmin{x∈N∣Pr(D≤x)≥γ}.
例
D服从Poisson分布,
λ=25. 设
c=5,
h=1,
b=3. 我们的计算步骤如下:
-
γ=h+bb=0.75
- 利用二分法找到最小的整数
x∗使得
F(x∗)≥0.75(其中
F是随机变量
D的cdf).
>>> from scipy.stats import poisson
>>> poisson(25).cdf(27)
0.7001861449652768
>>> poisson(25).cdf(28)
0.763400741866402
-
x∗=28
5. 总结
- 报童问题是商品采购问题的一个例子. 对该问题的研究和求解可以指导我们在实际中优化采购计划, 从而提高商品的销售利润.
- 但在实际中制定商品的采购计划时, 我们的目标与约束一般会比报童问题复杂(例如考虑库存成本), 因此需要根据实际问题进行建模和求解, 不能盲目照搬已有的模型.
- 制定采购计划之前可以采用需求预测(销量预测), 但同时也要考虑销量的随机性(详情见《如何在商品采购中考虑不确定性》).
参考文献