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

本文介绍了一种库存规划算法,用于在满足需求的同时最小化成本。RinkyDink公司通过该算法规划生产,确保每月需求得到满足,同时考虑到全职员工产能、兼职劳动力成本及库存成本。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值