(库存规划)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
1≤j≤D,满足
h
(
j
)
≥
0
h(j) ≥ 0
h(j)≥0;对
1
≤
j
≤
D
−
1
1 ≤ j ≤ D-1
1≤j≤D−1,满足
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
<
n
)
(1 ≤ i < n)
(1≤i<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
i−1个月要生产
j
−
k
j-k
j−k台设备。第
i
i
i个月的库存数量为
j
−
D
i
j-D_i
j−Di,相应的当月库存成本为
h
(
j
−
D
i
)
h(j-D_i)
h(j−Di)。题目中没有给出
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
j≥Di并且
j
−
k
≥
D
i
−
1
j-k ≥ D_{i-1}
j−k≥Di−1。所以
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})
(j−Di−1)。我们遍历
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)。
算法导论 — 思考题15-11 库存规划
最新推荐文章于 2022-11-09 19:39:58 发布