算法导论 — 思考题15-11 库存规划

库存规划)Rinky Dink公司是一家制造溜冰场冰面修整设备的公司。这种设备每个月的需求量都在变化,因此公司希望设计一种策略来规划生产,需求是给定的,即它虽然是波动的,但是是可预测的。公司希望设计接下来 n n n个月的生产计划。对第 i i i个月,公司知道需求 d i d_i di,即该月能够销售出去的设备的数量。令 D = ∑ i = 1 n d i D = \sum_{i=1}^nd_i D=i=1ndi 为后 n n n个月的总需求。公司雇佣的全职员工,可以提供一个月制造 m m m台设备的劳动力。如果公司希望一个月内制造多于 m m m台设备,可以雇佣额外的兼职劳动力,雇佣成本为每制造一台机器付出 c c c美元。而且,如果在月末有设备尚未售出,公司还要付出库存成本。保存 j j j台设备的成本可描述为一个函数 h ( j ) , j = 1 , 2 , … , D h(j),j = 1, 2, …, D h(j)j=1,2,,D。其中对所有 1 ≤ j ≤ D 1 ≤ j ≤ D 1jD,满足 h ( j ) ≥ 0 h(j) ≥ 0 h(j)0;对 1 ≤ j ≤ D − 1 1 ≤ j ≤ D-1 1jD1,满足 h ( j ) ≤ h ( j + 1 ) h(j) ≤ h(j+1) h(j)h(j+1)
  设计库存规划算法,在满足所有需求的前提下最小化成本。算法运行时间应为 n n n D D D的多项式函数。
  
  
  根据题意,有以下2点基本要求:
  1) 要满足 n n n个月的总需求,那么 n n n个月总共要生产 D D D台设备;
  2) 要满足前 i i i个月 ( 1 ≤ i &lt; n ) (1 ≤ i &lt; n) (1i<n)的需求,那么前 i i i个月生产的设备数量不能少于前 i i i个月的需求之和。
  用 c o s t [ i , j ] cost[i, j] cost[i,j]表示前 i i i个月在总共生产 j j j台设备的前提下的最小成本。如果不考虑每个月的需求,理论上 j j j的取值范围可以是 0 0 0 ~ D D D。而 i i i的取值范围是 1 1 1~ n n n。由此可见,我们要求解的子问题的规模为 O ( n D ) O(nD) O(nD)。我们最终要求解的是 c o s t [ n , D ] cost[n, D] cost[n,D]。下面我们来建立 c o s t [ i , j ] cost[i, j] cost[i,j]的递归式。
  我们用 D i D_i Di表示前 i i i个月的总需求,即 D = ∑ l = 1 i d l D = \sum_{l=1}^id_l D=l=1idl 。显然有 D n = D D_n = D Dn=D。假设第 i i i个月选择生产 k k k台设备,这意味着前 i − 1 i-1 i1个月要生产 j − k j-k jk台设备。第 i i i个月的库存数量为 j − D i j-D_i jDi,相应的当月库存成本为 h ( j − D i ) h(j-D_i) h(jDi)。题目中没有给出 h ( 0 ) h(0) h(0)的值,这里我们令 h ( 0 ) = 0 h(0) = 0 h(0)=0,即在没有库存的情况下库存成本为 0 0 0。用 c o s t k [ i , j ] cost_k[i, j] costk[i,j]表示第 i i i个月生产 k k k台设备的情况下,前 i i i个月总共生产 j j j台设备的最小成本。 c o s t k [ i , j ] cost_k[i, j] costk[i,j]可按下式计算得到。
  在这里插入图片描述
  根据上文第2)点要求,有 j ≥ D i j ≥ D_i jDi并且 j − k ≥ D i − 1 j-k ≥ D_{i-1} jkDi1。所以 j j j的取值范围是 D i D_i Di ~ D n D_n Dn k k k的取值范围为 0 0 0 ~ ( j − D i − 1 ) (j-D_{i-1}) (jDi1)。我们遍历 k k k的取值范围,选择 c o s t k [ i , j ] cost_k[i, j] costk[i,j]的最小值。
  我们还需要特别考虑一下初始情况 i = 1 i = 1 i=1。由于是第1个月,所以该月只能生产 j j j台设备。此时 c o s t [ 1 , j ] cost[1, j] cost[1,j]可按下式计算得到。
  在这里插入图片描述
  根据以上分析,可以得到以下递归式。
  在这里插入图片描述
  在求解 c o s t [ i , j ] cost[i, j] cost[i,j]的过程中,用 p [ i , j ] p[i, j] p[i,j]记录下第 i i i个月选择生产的设备数量。
  在这里插入图片描述
  前文提到,我们一共要求解 O ( n D ) O(nD) O(nD)个子问题。求解每个子问题需要迭代 O ( D ) O(D) O(D)次。故该算法的运行时间为 O ( n D 2 ) O(nD^2) O(nD2)

  • 33
    点赞
  • 60
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值