文章目录
1.模型
设有
n
n
n 种物品,每种物品数量无限。第
i
i
i 种物品每件重量为
w
i
w_i
wi ,每件价值 为
c
i
c_i
ci 。现有一只可装载重量为
w
w
w 的背包,求各种物品应各取多少件放入背包,使背包中物品的价值最高。这个问题可以用整数规划模型来描述。设第
i
i
i 种物品取
x
i
x_i
xi 件(
i
=
1
,
2
,
…
,
n
i =1, 2, …, n
i=1,2,…,n,
x
i
x_i
xi 为非负整数),背包中物品的价值为
z
z
z ,则
M
a
x
z
=
c
1
x
1
+
c
2
x
2
+
⋯
+
c
n
x
n
s
.
t
.
w
1
x
1
+
w
2
x
2
+
⋯
+
w
n
x
n
≤
w
x
1
,
x
2
,
⋯
,
x
n
为正整数
Max z=c_1x_1+c_2x_2+\cdots +c_nx_n\\ s.t.\ w_1x_1+w_2x_2+\cdots+w_nx_n\leq w\\ x_1,x_2,\cdots,x_n为正整数
Maxz=c1x1+c2x2+⋯+cnxns.t. w1x1+w2x2+⋯+wnxn≤wx1,x2,⋯,xn为正整数
(1)状态变量
x
k
x_k
xk:第
k
k
k次装载时背包还可以装载的重量。
(2)阶段
k
k
k:第
k
k
k次装载第
k
k
k种物品(
k
=
1
,
2
,
…
,
n
k=1,2,…,n
k=1,2,…,n)。
(3)决策变量
d
k
d_k
dk:第
k
k
k次装载第
k
k
k种物品的件数。
(4)决策允许集合:
D
k
(
x
k
)
=
{
d
k
∣
0
≤
d
k
≤
x
k
/
w
k
,
d
k
为整数
}
D_k(x_k)= \left\{d_k|0\leq d_k\leq x_k/w_k,d_k为整数\right\}
Dk(xk)={dk∣0≤dk≤xk/wk,dk为整数}
(5)状态转移方程:
x
k
+
1
=
x
k
−
w
k
d
k
x_{k+1}=x_k-w_kd_k
xk+1=xk−wkdk
(6)阶段指标:
v
k
=
c
k
d
k
v_k=c_kd_k
vk=ckdk
(7)递推方程:
f
k
(
x
k
)
=
m
a
x
{
c
k
d
k
+
f
k
+
1
(
x
k
+
1
)
}
=
m
a
x
{
c
k
d
k
+
f
k
+
1
(
x
k
−
w
k
d
k
)
}
f_k(x_k) = max\ \left\{c_kd_k+f_{k+1}(x_{k+1})\right\}= max \left\{c_kd_k+f_{k+1}(x_k-w_kd_k)\right\}
fk(xk)=max {ckdk+fk+1(xk+1)}=max{ckdk+fk+1(xk−wkdk)}
(8)终端条件:
f
n
+
1
(
x
n
+
1
)
=
0
f_{n+1}(x_{n+1})=0
fn+1(xn+1)=0
2.示例
f
3
(
x
3
)
=
max
0
≤
d
3
≤
x
3
/
w
3
{
c
3
d
3
+
f
4
(
x
4
)
}
=
max
0
≤
d
3
≤
x
3
/
w
3
{
30
d
3
}
f_3\left(x_3\right)=\max _{0 \leq d_3 \leq x_3 / w_3}\left\{c_3 d_3+f_4\left(x_4\right)\right\}=\max_{0\leq d_3\leq x_3/w_3}\left\{30d_3\right\}
f3(x3)=0≤d3≤x3/w3max{c3d3+f4(x4)}=0≤d3≤x3/w3max{30d3}
列出
f
3
(
x
3
)
f_3(x_3)
f3(x3)的数值表:
对于
k
=
2
k=2
k=2,
f
2
(
x
2
)
=
max
0
≤
d
2
≤
x
2
/
w
2
{
c
2
d
2
+
f
3
(
x
3
)
}
=
max
0
≤
d
2
≤
x
2
/
3
{
80
d
2
+
f
3
(
x
2
−
3
d
2
)
}
\begin{aligned} f_2\left(x_2\right) & =\max _{0 \leq d_2 \leq x_2 / w_2}\left\{c_2 d_2+f_3\left(x_3\right)\right\} \\ & =\max _{0 \leq d_2 \leq x_2 / 3}\left\{80 d_2+f_3\left(x_2-3 d_2\right)\right\} \end{aligned}
f2(x2)=0≤d2≤x2/w2max{c2d2+f3(x3)}=0≤d2≤x2/3max{80d2+f3(x2−3d2)}
列出
f
2
(
x
2
)
f_2(x_2)
f2(x2)的数值表
对于
k
=
1
k=1
k=1,
f
1
(
x
1
)
=
max
0
≤
d
1
≤
x
1
/
w
1
{
c
1
d
1
+
f
2
(
x
2
)
}
=
max
0
≤
d
1
≤
x
1
/
2
{
65
d
1
+
f
2
(
x
1
−
2
d
1
)
}
\begin{aligned} f_1\left(x_1\right) & =\max _{0 \leq d_1 \leq x_1 / w_1}\left\{c_1 d_1+f_2\left(x_2\right)\right\} \\ & =\max _{0 \leq d_1 \leq x_1 / 2}\left\{65 d_1+f_2\left(x_1-2 d_1\right)\right\} \end{aligned}
f1(x1)=0≤d1≤x1/w1max{c1d1+f2(x2)}=0≤d1≤x1/2max{65d1+f2(x1−2d1)}
由于
x
1
=
5
x_1= 5
x1=5,由
f
1
(
x
1
)
f_1(x_1)
f1(x1)、
f
2
(
x
2
)
f_2(x_2)
f2(x2)、
f
3
(
x
3
)
f_3(x_3)
f3(x3),
经回溯可得:
d
1
∗
=
2
,
x
2
=
x
1
−
2
d
1
=
1
,
d
2
∗
=
0
,
x
3
=
x
2
−
3
d
2
=
1
,
d
3
∗
=
1
,
x
4
=
x
3
−
d
3
=
0
d_1^* = 2,\\ x_2 = x_1-2d_1 = 1,d_2^* = 0,\\ x_3 = x_2-3d_2 = 1,d_3^* = 1,\\ x_4 = x_3- d_3 = 0
d1∗=2,x2=x1−2d1=1,d2∗=0,x3=x2−3d2=1,d3∗=1,x4=x3−d3=0
即应取第1种物品2件,第3种物品1件,最高价值为160元,背包无余量。
注: 由
f
1
(
x
1
)
f_1(x_1)
f1(x1)的列表可知,若背包容量
w
w
w 为4、3、2、1时,相应的最优解立即可以得到。
3.用连续变量方法求解
直接用公式求解,注意整数的要求
k
=
3
k=3
k=3
f
3
(
x
3
)
=
max
0
≤
d
3
≤
x
3
/
w
3
{
c
3
d
3
+
f
4
(
x
4
)
}
=
max
0
≤
d
3
≤
x
3
/
w
3
{
30
d
3
}
=
30
x
3
d
3
∗
=
x
3
\begin{aligned} f_3\left(x_3\right) & =\max _{0 \leq d_3 \leq x_3 / w_3}\left\{c_3 d_3+f_4\left(x_4\right)\right\} \\ & =\max _{0 \leq d_3 \leq x_3 / w_3}\left\{30 d_3\right\} \\ & =30 x_3 \quad d_3^*=x_3 \end{aligned}
f3(x3)=0≤d3≤x3/w3max{c3d3+f4(x4)}=0≤d3≤x3/w3max{30d3}=30x3d3∗=x3
注:这里
w
3
=
1
w_3=1
w3=1,
x
3
x_3
x3 是整数
k
=
2
k=2
k=2
f
2
(
x
2
)
=
max
0
≤
d
2
≤
x
2
/
w
2
{
c
2
d
2
+
f
3
(
x
3
)
}
=
max
0
≤
d
2
≤
x
2
/
3
{
80
d
2
+
f
3
(
x
2
−
3
d
2
)
}
=
max
0
≤
d
2
≤
x
2
/
3
{
80
d
2
+
30
(
x
2
−
3
d
2
)
}
=
30
x
2
d
2
∗
=
0
\begin{aligned} f_2\left(x_2\right) & =\max _{0 \leq d_2 \leq x_2 / w_2}\left\{c_2 d_2+f_3\left(x_3\right)\right\} \\ & =\max _{0 \leq d_2 \leq x_2 / 3}\left\{80 d_2+f_3(x_2-3d_2)\right\} \\ &=\max_{0\leq d_2\leq x_2/3}\left\{80d_2+30(x_2-3d_2)\right\}\\ & =30 x_2 \quad d_2^*=0 \end{aligned}
f2(x2)=0≤d2≤x2/w2max{c2d2+f3(x3)}=0≤d2≤x2/3max{80d2+f3(x2−3d2)}=0≤d2≤x2/3max{80d2+30(x2−3d2)}=30x2d2∗=0
注:这里
w
2
=
3
w_2=3
w2=3,
x
2
x_2
x2 是整数
k
=
1
k=1
k=1
f
1
(
x
1
)
=
max
0
≤
d
1
≤
x
1
/
w
1
{
c
1
d
1
+
f
2
(
x
2
)
}
=
max
0
≤
d
1
≤
x
1
/
2
{
65
d
1
+
f
2
(
x
1
−
2
d
1
)
}
=
max
0
≤
d
1
≤
x
1
/
2
{
65
d
1
+
30
(
x
1
−
2
d
1
)
}
=
160
d
1
∗
=
[
x
1
2
]
=
2
\begin{aligned} f_1\left(x_1\right) & =\max _{0 \leq d_1 \leq x_1 / w_1}\left\{c_1 d_1+f_2\left(x_2\right)\right\} \\ & =\max _{0 \leq d_1 \leq x_1 / 2}\left\{65 d_1+f_2\left(x_1-2 d_1\right)\right\} \\ & =\max _{0 \leq d_1 \leq x_1 / 2}\left\{65 d_1+30\left(x_1-2 d_1\right)\right\} \\ & =160 \quad d_1^*=\left[\frac{x_1}{2}\right]=2 \end{aligned}
f1(x1)=0≤d1≤x1/w1max{c1d1+f2(x2)}=0≤d1≤x1/2max{65d1+f2(x1−2d1)}=0≤d1≤x1/2max{65d1+30(x1−2d1)}=160d1∗=[2x1]=2
注:这里
w
1
=
2
,
x
1
=
5
w_1=2, x_1 = 5
w1=2,x1=5