【管理运筹学】第 8 章 | 动态规划(4,生产与储存问题)
对生产计划问题和不确定性的采购问题进行了动态规划建模和求解。
系列文章
【管理运筹学】第 8 章 | 动态规划(1,多阶段决策过程与动态规划基本概念)
【管理运筹学】第 8 章 | 动态规划(2,动态规划的基本思想与模型求解)
【管理运筹学】第 8 章 | 动态规划(3,资源分配问题)
【管理运筹学】第 8 章 | 动态规划(4,生产与储存问题)
【管理运筹学】第 8 章 | 动态规划(5,设备更新问题)
引言
在生产和经营管理中,经常遇到要合理安排生产(或购买)与库存的问题,达到既要满足社会的需要,又要尽量降低成本费用。因此,正确制定生产(或采购)策略,确定不同时期的生产量(或购买量)和库存量,以使得总生产成本费用和库存费用之和最小,这就是生产与储存问题的最优化目标。
四、生产与储存问题
4.1 生产计划问题
设某公司要对某种产品要制定一项 n n n 个阶段的生产(或购买)目标。已知它的初始库存量为 0 ,每阶段生产(或购买)该产品的数量有上限 m m m 的限制;每阶段社会对该产品的需求量 d k d_k dk 是已知的,公司保证供应;在 n n n 阶段末的终结库存量为 0 。问该公司如何制定每个阶段的生产(或采购)计划,从而使总成本最小。
用动态规划方法来求解,把它看作一个 n n n 阶段决策问题。令 s k s_k sk 为状态变量,表示第 k k k 阶段开始时的库存量; x k x_k xk 为决策变量,表示第 k k k 阶段的生产量。状态转移方程为 s k + 1 = s k + x k − d k . s_{k+1}=s_k+x_k-d_k. sk+1=sk+xk−dk.
第 k k k 阶段的成本费用包括生产成本和存储费用两项: c k ( x k ) + h k ( x k ) c_k(x_k)+h_k(x_k) ck(xk)+hk(xk) ,其中 c k ( x k ) c_k(x_k) ck(xk) 表示第 k k k 阶段生产产品 x k x_k xk 时的成本费用,一般包括生产准备成本 K K K 和产品成本 a x k ax_k axk (其中 a a a 是单位产品成本)两项费用。有 c k ( x k ) = { 0 , x k = 0 K + a x k , x k = 1 , 2 , ⋯ , m ∞ , x k > m c_k(x_k)=\begin{cases} 0 &,x_k=0\\ K+ax_k &,x_k=1,2,\cdots,m \\ \infty &,x_k>m \end{cases} ck(xk)=⎩ ⎨ ⎧0K+axk∞,xk=0,xk=1,2,⋯,m,xk>m K , a K,a K,a 为已知参数, h k ( x k ) h_k(x_k) hk(xk) 表示在第 k k k 阶段结束有库存量时所需的储存费用。其实第 k k k 阶段结束时库存量就等于下一阶段开始的库存量,即 x k + 1 x_{k+1} xk+1 。
最优值函数 f k ( s k ) f_k(s_k) fk(sk) 表示从第 k k k 阶段初库存量为 s k s_k sk 到第 n n n 阶段库存量为 0 时的最小总费用,其基本方程为 { f k ( s k ) = min σ k ′ ≤ x k ≤ σ k { c k ( x k ) + h k ( x k ) + f k + 1 ( x k + s k − d k ) } , k = n , n − 1 , ⋯ , 1 f n + 1 ( s n + 1 ) = 0 \begin{cases} f_k(s_k)=\min_{\sigma_k'\leq x_k \leq \sigma_k} \{c_k(x_k)+h_k(x_k)+f_{k+1}(x_k+s_k-d_k)\} ,k=n,n-1,\cdots,1 \\ f_{n+1}(s_{n+1})=0 \end{cases} {fk(sk)=minσk′≤xk≤σk{ck(xk)+hk(xk)+fk+1(xk+sk−dk)},k=n,n−1,⋯,1fn+1(sn+1)=0 其中, σ k = min { ∑ i = k n d i − s k , m } \sigma_k=\min\{\sum_{i=k}^nd_i-s_k,m\} σk=min{∑i=kndi−sk,m} ,一方面每阶段生产上限为 m m m ,另一方面需保证 n n n 阶段结束时库存量能取 0 。 σ k ′ = max { d k − s k , 0 } \sigma'_k=\max\{d_k-s_k,0\} σk′=max{dk−sk,0} ,这是为了保证第 k k k 阶段的生产量能满足市场需求。
4.2 不确定性的采购问题
在实际问题中,还会遇到某些多阶段决策过程,与前面所讨论的确定性不同,出现了随机性因素,状态转移不能完全确定,是按照某种已知的概率分布取值的。具有这种性质的多阶段决策过程称为随机性的决策过程。下面举一个例子。
(采购问题) 某厂生产上需要在近 5 周内采购一批原料,而估计在未来 5 周内价格会有波动,单价为 500 的概率为 0.3 ,为 600 的概率为 0.3 ,为700 的概率为 0.4 。试求在哪一周以什么价格购入,能使得其采购价格的数学期望最小?并求出期望值。
我感觉这类题目还可以改成求采购价格的最大可能、最小可能等等。
按采购期限,分为 5 个阶段,设
y k y_k yk —— 状态变量,表示第 k k k 周的实际价格。
x k x_k xk —— 决策变量,表示第 k k k 周是否决定采购,当取值为 1 时,表示第 k k k 周采购;取值为 0 时,表示第 k k k 周决定等待。
y k E y_{kE} ykE —— 第 k k k 周决定等待,而在以后采取最优决策时的采购价格平均值。
f k ( y k ) f_k(y_k) fk(yk) —— 第 k k k 周实际价格为 y k y_k yk 时,从第 k k k 周至第 5 周采取最优决策所得的最小期望值。
则逆序递推关系为 { f k ( y k ) = min { y k , y k E } , y k ∈ s k f 5 ( y k ) = y 5 , y 5 ∈ s 5 \begin{cases} f_k(y_k)=\min\{y_k,y_{kE}\},&y_k \in s_k \\ f_5(y_k)=y_5,&y_5\in s_5 \end{cases} {fk(yk)=min{yk,ykE},f5(yk)=y5,yk∈sky5∈s5 其中, s k = { 500 , 600 , 700 } , k = 1 , 2 , 3 , 4 , 5. s_k=\{500,600,700\},k=1,2,3,4,5. sk={500,600,700},k=1,2,3,4,5.
当第 k k k 周实际价格为 y k y_k yk 时,若选择等待,则 y k E = E [ f k + 1 ( y k + 1 ) ] = 0.3 f k + 1 ( 500 ) + 0.3 f k + 1 ( 600 ) + 0.4 f k + 1 ( 700 ) y_{kE}=E\big[f_{k+1}(y_{k+1})\big]=0.3f_{k+1}(500)+0.3f_{k+1}(600)+0.4f_{k+1}(700) ykE=E[fk+1(yk+1)]=0.3fk+1(500)+0.3fk+1(600)+0.4fk+1(700) 。如果 f k ( y k ) = y k E f_k(y_k)=y_{kE} fk(yk)=ykE ,则第 k k k 周应选择等待,即 x k = 0 x_k=0 xk=0 ;如果 f k ( y k ) = y k f_k(y_k)=y_{k} fk(yk)=yk ,则第 k k k 周应选择购入,即 x k = 1 x_k=1 xk=1 ;
第一步: k = 5 k=5 k=5 ,此时必须购入,则 x 5 = 1 , f 5 ( 500 ) = 500 , f 5 ( 600 ) = 600 , f 5 ( 700 ) = 700. x_5=1,f_5(500)=500,f_5(600)=600,f_5(700)=700. x5=1,f5(500)=500,f5(600)=600,f5(700)=700.
第二步: k = 4 k=4 k=4 , y 4 E = 0.3 f 5 ( 500 ) + 0.3 f 5 ( 600 ) + 0.4 f 5 ( 700 ) = 0.3 × 500 + 0.3 × 600 + 0.4 × 700 = 610 y_{4E}=0.3f_{5}(500)+0.3f_{5}(600)+0.4f_{5}(700)=0.3\times 500+0.3\times600+0.4\times700=610 y4E=0.3f5(500)+0.3f5(600)+0.4f5(700)=0.3×500+0.3×600+0.4×700=610 ,则 f 4 ( y 4 ) = min { y 4 , y 4 E } = { 500 , y 4 = 500 600 , y 4 = 600 610 , y 4 = 700 f_4(y_4)=\min\{y_4,y_{4E}\}=\begin{cases} 500,&y_4=500 \\ 600,&y_4=600 \\ 610,&y_4=700 \end{cases} f4(y4)=min{y4,y4E}=⎩ ⎨ ⎧500,600,610,y4=500y4=600y4=700 可知,当第 4 周实际价格为 500 或 600 时,可以选择购入;当实际价格为 700 时,应等待。
第三、四、五步: 同理,可计算得到, f 3 ( y 3 ) = min { y 3 , y 3 E = 574 } = { 500 , y 3 = 500 574 , y 3 = 600 574 , y 3 = 700 , x 3 = { 1 , y 3 = 500 0 , y 3 = 600 , 700 ; f_3(y_3)=\min\{y_3,y_{3E}=574\}=\begin{cases} 500,&y_3=500 \\ 574,&y_3=600 \\ 574,&y_3=700 \end{cases},x_3=\begin{cases} 1,&y_3=500 \\ 0,&y_3=600,700 \end{cases}; f3(y3)=min{y3,y3E=574}=⎩ ⎨ ⎧500,574,574,y3=500y3=600y3=700,x3={1,0,y3=500y3=600,700; f 2 ( y 2 ) = min { y 2 , y 2 E = 551.8 } = { 500 , y 2 = 500 551.8 , y 2 = 600 551.8 , y 2 = 700 , x 2 = { 1 , y 2 = 500 0 , y 2 = 600 , 700 ; f_2(y_2)=\min\{y_2,y_{2E}=551.8\}=\begin{cases} 500,&y_2=500 \\ 551.8,&y_2=600 \\ 551.8,&y_2=700 \end{cases},x_2=\begin{cases} 1,&y_2=500 \\ 0,&y_2=600,700 \end{cases}; f2(y2)=min{y2,y2E=551.8}=⎩ ⎨ ⎧500,551.8,551.8,y2=500y2=600y2=700,x2={1,0,y2=500y2=600,700; f 1 ( y 1 ) = min { y 1 , y 1 E = 536.26 } = { 500 , y 1 = 500 536.26 , y 1 = 600 536.26 , y 1 = 700 , x 1 = { 1 , y 1 = 500 0 , y 1 = 600 , 700 ; f_1(y_1)=\min\{y_1,y_{1E}=536.26\}=\begin{cases} 500,&y_1=500 \\ 536.26,&y_1=600 \\ 536.26,&y_1=700 \end{cases},x_1=\begin{cases} 1,&y_1=500 \\ 0,&y_1=600,700 \end{cases}; f1(y1)=min{y1,y1E=536.26}=⎩ ⎨ ⎧500,536.26,536.26,y1=500y1=600y1=700,x1={1,0,y1=500y1=600,700; 综上,最优采购策略为:前三周,价格为 500 就购入,否则等待;第 4 周时,如果还没购入,价格为 500 或 600 时就购入,否则等待;第 5 周时,如果还没购入,不管怎么样都应该购入。
按照上述策略进行采购时,采购价格的数学期望计算如下: E = 500 × ( 0.3 + 0.7 × 0.3 + 0. 7 2 × 0.3 + 0. 7 3 × 0.3 + 0. 7 3 × 0.4 × 0.3 ) + E=500\times(0.3+0.7\times0.3+0.7^2\times0.3+0.7^3\times0.3+0.7^3\times0.4\times0.3)+ E=500×(0.3+0.7×0.3+0.72×0.3+0.73×0.3+0.73×0.4×0.3)+ 600 × ( 0. 7 3 × 0.3 + 0. 7 3 × 0.4 × 0.3 ) + 700 × ( 0. 7 3 × 0.4 × 0.4 ) = 525.382. 600\times(0.7^3\times0.3+0.7^3\times0.4\times0.3)+700\times(0.7^3\times0.4\times0.4)=525.382. 600×(0.73×0.3+0.73×0.4×0.3)+700×(0.73×0.4×0.4)=525.382.
还好前几天复习了下概率论,要不这个数学期望还真不太好理解。
写在最后
对于确定型生产计划问题,其实和资源分配问题有点像,只是多加了一部分回收的费用;而对于不确定型采购问题,则有点难以理解,建模难度较高,不过求解方法和前面类似。
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)