供应链单级多周期库存补货模型
(简书markdown不支持数学公式,大家到知乎上搜索吧)
1. 经典EOQ模型及其基本假设
1.1. 什么是EOQ
EOQ
,即 经济订购批量模型,是库存模型的理论基础,也是库存理论的基础模型,其核心是:在订货成本与库存成本之间寻找一个平衡,使得订货能够满足市场预估需求,而且成本最小化。可以用下面的一幅图来表示,订货成本逐渐下降,是因为随着订货量的增加,可以拿到数量价格折扣,同时单位运输成本也会下降,这是符合人们的直觉的,但是只要订货就会产生库存费用,而且库存费用是递增的。因此,一定有一个平衡点,使得订货成本和库存持有成本最小化的。
基于EOQ模型,学界和工业界根据具体的市场情况发展并丰富了EOQ模型,包括多级库存理论,需求变化和库存成本变化的EOQ,时变运输周期的EOQ,能力受限的EOQ 等,因此,我们要知道,EOQ虽然重要,但是也包含着极大的缺陷,很难直接应用在现实的供应链采购和仓储管理之中,当然现实中还是有很多产品是符合EOQ的基本假设要求的,比如方便面,牙膏,大米等不受季节因素或其他市场因素明显影响且销量稳定的产品,当然,真正头疼的并不是这类型的产品。
1.2. EOQ基本假设
不管学习什么数学模型,总是要先看其基本假设和适用范围,EOQ也不例外。
EOQ的基本假设如下:
- 不允许缺货,即缺货费用Cs无穷大。
- 当库存将至零,可以立即得到补充(生成时间很短,可以近似看做零)。
- 需求是连续的,均匀的,需求速率是R
- 每次订货量Q不变,订购费C0不变(每次生产量不变,装配费不变)。
- 单位存储成本不变。
其补货和库存变化如下图:
1.3. EOQ的数学推导
一个周期t内的总存储量为:
$$ \frac{1}{2}Qt $$
一个周期t内的总费用F(t)=订购费+存储费+货物成本费
=订购费率 x 订购次数+总存储量 x 存储费率+货物单价P x 货物总需求量
= ${C_0} \times 1 + \frac{1}{2}Qt{C_h} + PRt $
单位时间内的总费用(库存系统总费用率)为:
$$ f(Q) = \frac{{F(t)}}{t} = \frac{{{C_0} \times 1 + \frac{1}{2}Qt{C_h} + PRt}}{t} = \frac{{{C_0}R}}{Q} + \frac{1}{2}{C_h}Q + PR $$
其中:$ {f_0} = \frac{{{C_0}R}}{Q},{f_h} = \frac{1}{2}{C_h}Q $ ,前者是单位时间的订购费,后者是单位时间的存储费,PR是常数,在考虑存储系统总费用时,PR可以忽略不计。
最优存储策略:
在求极值的数学问题中,另导数为零,可以得到最优的订购策略。
另 $ \frac{{df(Q)}}{{dQ}} = 0 $,得
- 1 最佳订购批量(或最大库存量)
$$ {Q^*} = \sqrt {\frac{{2R{C_0}}}{{{C_{\rm{h}}}}}} $$
这就是著名的经济订购批量检查EOQ公式. - 2 最优存储周期
$$ {{\rm{t}}^} = \frac{{{Q^}}}{t} = \sqrt {\frac{{2{C_0}}}{{R{C_h}}}} $$ - 3 最优总存储费用
$$ {f^} = {f_0}^ + {f_h}^* = \sqrt {2R{C_0}{C_{\rm{h}}}} $$
2. 需求变化的EOQ模型
需求变化的EOQ描述
从经典的EOQ模型假设出发,我们看到,EOQ假设需求稳定且恒定,每个周期的订货量都是一定的,而且周期长度都一样,在现实中有很多产品不是这样的,特别是有明显季节性的服装产品,有明显生命周期的电子产品,在每个周期内的销量明显不一样,上市前期进行试推广预售,然后销量快速上升,过了销售旺季或者生命周期顶峰后,进入衰退期,销量趋势如下图:
动态规划求解需求变化问题
对于多周期订购问题,可以通过动态规划的方法求解。
其实从人脑的简单思维来说,遇到这种组问题,首先想到的不是什么算法,而是暴力搜索,一个个数凑总是能凑出来的。而动态规划,就是暴力搜索的一种改进,可以以你想不到的效率找到最优解,而不是一个个组合参数去尝试。
多说一个,其实很多智能优化算法,其本质也是这种暴力搜索的改进,本质很是暴力搜索。说来也有趣,智能优化算法是没有严格的数学推导的,但是结果还不错,比如粒子群算法,遗传算法,禁忌搜索算法等。
这里讲一下使用动态规划求解的方法,使用运筹学中的一个例子说明问题,把生产换成采购,就是最开始说的EOQ问题了。
问题描述如下:
未来3个月的销量预测已知,为3w,4w,3w,如果启动生成,则启动费用为3万每次,而且每个产品的成本是1元,每件产品的每月的存储费用为0.7元。
第一个月和第四个月的库存为0,求最优生产计划。
-->1月
-->2月
-->3月
-->4月
变量如下:
k
: 表示不同的阶段,这里有4个月,则k=1,2,3,4
Sk
:表示月初库存,因为第1,4个月的月初库存为0,则S1=0, S4=0
xk
:表示决策变量,即当月要生产的量,1月肯定是要生产的,因为此时库存为0,而且1月生产的可以留着以后买,如果1月生产未来全部月份的需求,则1月最大生产为10w,同理,2月生产的只能是2月和3月卖,因此2月最大生产7w,3月最大生产3w。
x1={3,4,5,6,7,8,9,10}, x2={0,1,2,3,4,5,6,7}, x3={0,1,2,3}
状态转移方程:
$$ {S_{{\rm{K + }}1}} = {S_K} + {x_k} - {d_k} $$
$ {d_k}$ 是每月的需求量,$ {S_K} $是月初库存
阶段指标函数(成本=生产费用+存储费用)$ {r_k}({x_k}) $
$$ {r_{\rm{k}}}({x_k}) = \left{ \begin{array}{l}
3 + {x_k} + 0.7{S_k},{x_k} > 0\
0.7{S_k},{x_k} = 0
\end{array} \right. $$
3. 考虑订购提前期的EOQ模型
在前面的EOQ假设中,有一个假设就是补货能力无穷大,能够做到瞬时补货。什么意思呢,就是我在1号下单,货物马上就能送到仓库。这是不符合现实情况啊,就算是京东物流起码也要半天啊,国内快递一般2-3天,因此这也是EOQ不合理的地方。
但是不影响我们使用啊,因为我们可以通过业务流程优化来到达瞬时补货的功能。
比如,EOQ模型中,4月1号需要补货,实际的订购提前期是5天,那么我们只要在3月25日下达订单,那么4月1日就会有一批货物到达仓库入库,和EOQ模型保持一致了。如下图:
4.动态规划求解多周期库存python代码
(此处补充python代码)