Wang Haihua
🍈 🍉🍊 🍋 🍌
某小贩每天以 $a=2$ 元/束的价格购进一种鲜花,卖价为 $b=3$ 元 /束, 当天卖不出去的花全部损失. 顾客一天内对花的需求量 $X$ 是随机变量, $X$ 服从泊松分布 $$ P\{X=k\}=e^{-\lambda} \frac{\lambda^{k}}{k !}, \quad k=0,1,2, \cdots, $$ 其中参数 $\lambda=10$. 问小贩每天应购进多少束鲜花才能得到好收益?
这是一个随机决策问题, 要确定每天应购进的鲜花数量以使收入最 高。 设小贩每天购进 $u$ 束鲜花. 如果这天需求量 $X \leq u$, 则其收入为 $b X-a u$, 如果需求量 $X>u$, 则其收入为 $b u-a u$, 因此小贩一天的期望收入为 $$ J(u)=-a u+\sum_{k=0}^{u} b k \cdot e^{-\lambda} \cdot \frac{\lambda^{k}}{k !}+\sum_{k=u+1}^{\infty} b u \cdot e^{-\lambda} \cdot \frac{\lambda^{k}}{k !}, $$ 问题归结为在 $a, b, \lambda$ 已知时, 求 $u$ 使得 $J(u)$ 最大. 因而最佳购进量 $u^{*}$ 满足 $$ J\left(u^{*}\right) \geq J\left(u^{*}+1\right), J\left(u^{*}\right) \geq J\left(u^{*}-1\right), $$
由于 $J(u+1)-J(u)=-a+b e^{-\lambda} \sum_{k=u+1}^{\infty} \frac{\lambda^{k}}{k !}=-a+b\left(1-\sum_{k=0}^{u} e^{-\lambda} \frac{\lambda^{k}}{k !}\right)$, 最佳购进量 $u^{*}$ 满足 $$ \begin{aligned} &1-\sum_{k=0}^{u^{*}} e^{-\lambda} \frac{\lambda^{k}}{k !} \leq \frac{a}{b}, \\ &1-\sum_{k=0}^{u^{*}-1} e^{-\lambda} \frac{\lambda^{k}}{k !} \geq \frac{a}{b}, \end{aligned} $$ 记泊松分布的分布函数为 $F(i)=P\{X \leq i\}=\sum_{k=0}^{i} e^{-\lambda} \frac{\lambda^{k}}{k !}$ ,则最佳购进量 $u^{*}$ 满足 $$ F\left(u^{*}-1\right) \leq 1-\frac{a}{b} \leq F\left(u^{*}\right) . $$
查Poisson分布表,或利用Python软件,求得最佳购进量$u=9$。
代码
from scipy.stats import poisson
a=2; b=3; lamda=10; p=1-a/b
u=poisson.ppf(1-a/b,lamda) #求最佳订购量
p1=poisson.cdf(u-1,lamda) #p1和p2是为验证最佳购进量
p2=poisson.cdf(u,lamda)
print(u,p1,p,p2)
下面用计算机模拟进行检验。 对不同的 $a, b, \lambda$, 用计算机模拟求最优决策 $u$ 的算法如下: 步最 1 给定 $a, b, \lambda$, 记进货量为 $u$ 时, 收益为 $M_{u}$, 当 $u=0$ 时, $M_{0}=$ 令 $u=1$, 继续下一步。 步最 2 对随机需求变量 $X$ 做模拟, 求出收入, 共做 $n$ 次模拟, 求出收 入的平均值 $M_{u}$ 。 步骤 3 若 $M_{u} \geq M_{u-1}$, 令 $u=u+1$, 转步骤 2;若 $M_{u}<M_{u-1}$, 输止 $\boldsymbol{u}^{*}=\boldsymbol{u}-1$, 停止。
import numpy as np
a=2; b=3; lamda=10; M1=0;
u=1; n=10000;
for i in range(1,2*lamda):
d=np.random.poisson(lamda,n) #产生n个服从Poiss分布的需求量数据
M2=np.mean(((b-a)*u*(u<=d)+((b-a)*d-a*(u-d))*(u>d))) #求平均利润
if M2>M1: M1=M2; u=u+1;
else: print('最佳购进量:',u-1); break
from scipy.stats import poisson
a=2; b=3; lamda=10; p=1-a/b
u=poisson.ppf(1-a/b,lamda) #求最佳订购量
p1=poisson.cdf(u-1,lamda) #p1和p2是为验证最佳购进量
p2=poisson.cdf(u,lamda)
print(u,p1,p,p2)
9.0 0.3328196787507191 0.33333333333333337 0.4579297144718523
import numpy as np
a=2; b=3; lamda=10; M1=0;
u=1; n=10000;
for i in range(1,2*lamda):
d=np.random.poisson(lamda,n) #产生n个服从Poiss分布的需求量数据
M2=np.mean(((b-a)*u*(u<=d)+((b-a)*d-a*(u-d))*(u>d))) #求平均利润
if M2>M1: M1=M2; u=u+1;
else: print('最佳购进量:',u-1); break
最佳购进量: 9