面对需求的不确定性,报童模型是做库存优化的常见模型。而标准报童模型假设价格是固定的,此时求解一个线性规划问题,可以得到最优订货量,这种模型存在局限性。因为现实世界中价格与需求存在一定的关系,本文假设需求q是价格p的线性函数,基于历史需求数据学习回归直线的参数并计算拟合残差,带入到报童模型中,此时的报童模型变成一个二次规划问题,其目标函数是关于价格p是二次的。
方法
为提高报童模型的准确性,使用SAA算法解决随机优化问题,并与其他方法做对比。
对标准报童模型做的三个扩展
扩展1:允许rush order
当售卖当天需求量过高时,允许报童紧急订报,只是价格g
比一般订购价格c
稍高,即g>c
;
如果定货太多,那么每份报纸会产生持货成本t
,特别地,如果允许以一定价格回退给厂商,那么t<0 。但在这个文章中,仅考虑t>0的情况。
符号说明:
单份报纸的售价为p
;
订货量是q
;
目标函数是
扩展2:需求与价格呈线性相关
假设需求与价格的线性回归模型如下
D = β 0 + β 1 p + ϵ i D=\beta_0+\beta_1p+\epsilon_i D=β0+β1p+ϵi
根据给定的数据集(含价格和需求量,即 { ( p i , D i ) ∣ i = 1 , 2 , . . . , n } \{(p_i,D_i)|i=1,2,...,n\} {(pi,Di)∣i=1,2,...,n}),找出最佳拟合线性回归函数的参数。假设干扰项 ϵ i \epsilon_i ϵi具有随机性,根据历史数据 { ( p i , D i ) ∣ i = 1 , 2 , . . . , n } \{(p_i,D_i)|i=1,2,...,n\} {(pi,Di)∣i=1,2,...,n}学习到参数 β 0 , β 1 \beta_0,\beta_1 β0,β1,计算残差值 { ϵ i ∣ i = 1 , 2 , . . . , n } \{\epsilon_i|i=1,2,...,n\} {ϵi∣i=1,2,...,n}。
- 对于价格固定的标准报童模型,求最优订货量
如果新价格p出现,将计算好的残差值 { ϵ i ∣ i = 1 , 2 , . . . , n } \{\epsilon_i|i=1,2,...,n\} {ϵi∣i=1,2,...,n}和新价格p带入模型 D = β 0 + β 1 p + ϵ i D=\beta_0+\beta_1p+\epsilon_i D=β0+β1p+ϵi,可以得到新价格p所对应的需求量估计值 { D i ^ ∣ i = 1 , 2 , . . . , n } \{\hat{D_i}|i=1,2,...,n\} {Di^∣i=1,2,...,n},这些估计值会带入到标准报童模型中,求解该线性规划问题,从而得到最优订货量。
关于计算需求量估计值的进一步解释,比如:估计参数 β 0 = 1000 , β 1 = − 2 \beta_0=1000,\beta_1=-2 β0=1000,β1=−2,现有两个样本的拟合残差是15和-9,对于新价格2来说,需求量估计值有
1000 − 2 ∗ 2 + 15 = 1011 1000-2*2+15=1011 1000−2∗2+15=1011,
1000 − 2 ∗ 2 − 9 = 987 1000-2*2-9=987 1000−2∗2−9=987 - 对于价格不固定的扩展报童模型,求最优订货量和最优价格
此时,目标函数
中 p ∗ D i p*D_i p∗Di就会变成 p ∗ ( β 0 + β 1 p + ϵ i ) p*(\beta_0+\beta_1p+\epsilon_i) p∗(β0+β1p+ϵi),这是价格p
的二次函数。
注意:上面目标函数中的 D i D_i Di指的是新价格p所对应的第i个需求估计值,而不是原数据集中第i个样本的需求值。
我觉得没有疑问了,这本身就是一个关于价格p的二次优化问题。
注:
为了求解这个问题,引入哑变量 h i h_i hi,表示第i天成本的负值。如此一来,目标函数——利润函数可以表示为收益+成本负值的平均,其中收益指 p ∗ D i p*D_i p∗Di,成本负值指 h i h_i hi。
扩展3:分析数据集对最优订货量和最优价格的影响(最优订购量、最优价格的敏感性分析)
对原数据集做重采样,计算最优订货量、最优价格、对应的期望利润值。
任务
- 根据给定数据集,估计出需求与价格之间的线性回归方程;
- 给定参数c=0.5,g=0.75,t=0.15,利用残差数据 { ϵ i ∣ i = 1 , 2 , . . . , n } \{\epsilon_i|i=1,2,...,n\} {ϵi∣i=1,2,...,n},求价格p=1时的需求量估计值 { D i ^ ∣ i = 1 , 2 , . . . , n } \{\hat{D_i}|i=1,2,...,n\} {Di^∣i=1,2,...,n};
- 求价格p=1时的最优订货量(这是一个线性规划问题);
- 假设价格不是固定的,将需求量与价格的线性回归方程带入到报童模型中,解QP(二次规划问题,目标函数含价格的平方项),得最优订货量、最优价格;
- 分析最优价格、最优订货量是否对数据集敏感。对原数据集做重采样,重新估计需求与价格之间的线性回归函数参数 ,求最优价格和最优订货量;
- 重复上述重采样、拟合操作,得到多组最优订货量和最优价格;为得到的最优订货量、最优价格、期望利润绘制直方图,观察统计规律。
建模
上述模型的含义:目标函数是最大化利润,引入哑变量 h i h_i hi表示第’i
天的成本负值。
上面画黄线的约束表示:不管需求量大于还是小于订货量,利润都大于 h i h_i hi。换言之,限制利润(不管需求量大于还是小于订货量)大于等于一个变量,这个变量大于等于负无穷。
??为什么成本负值数组h的约束不是 0 > h > − inf 0>h>-\inf 0>h>−inf 做实验的时候,加上试试。
将之前的拟合结果——残差数据、拟合函数参数等,带入到上述模型中,得到需求量估计值 D i D_i Di,得到如下模型:
记录一个我没看懂的地方。我觉得作者的转换并没有把二次约束转成线性约束啊,难道是我对“二次规划”的定义理解出错了?我以为的二次规划是,目标函数是二次的,约束是一次的 数学优化问题。
关于上图的问题,我在纸上列了一下,作者的Gurobi模型应该是把上面两个约束的二次项 p 2 p^2 p2拿掉了(用报告里面的话说:拿到目标函数中了)。
??为什么可以直接拿掉呢
上图还有一个问题是,目标函数中决策变量 h i h_i hi的系数应该是1。这一点可以从两个地方看出来:第一,老师给的作业说明(见上面“扩展2”中, h i h_i hi的含义说明——成本负值);第二,作者的Gurobi建模obj
数组中目标函数系数的指定。
最优解的稳定性分析
目标:探究使用不同的数据集是否会影响到最优解——最优价格和最优订货量
做法:对原数据集做1000次重采样,每次采样随机抽取99组样本形成新数据集。然后,针对新数据集,计算并收集最优订货量和最优价格,以及对应的最优利润expect_profit。绘制最优订货量、最优价格、最优价格的分布直方图,发现大致服从正态分布,且最优价格与之前LP中的预定价格1相差不大,expect_profit的均值也与之前LP的expect_profit相差不大。
注:新数据集与原数据集样本顺序是不同的。(我觉得这里有些不妥……应该设计新数据集是原数据集的子集,然后观察最优解的统计规律)
我给这个报告添加了一个conclusion,如下图