列生成简介
列生成(column generation)用于求解大规模线性规划问题,其优点在于不需要枚举所有可行解而快速得到精确解的一种方法。
列生成解决问题主要流程
列生成求解问题主要包括主问题(MP),限制主问题(RMP)和子问题(sub-problem)。
首先在限制主问题上,构建可行初始基向量,求解得到的参数传到子问题中,根据这些参数构建新子问题并求解,根据检验系数符号,判断是否将新的列加入限制主问题中,接着求解限制主问题,直到子问题不再得到可行列加入到主问题中。
案例:Cutting Stock Problem(CSP)
【问题】现有数量不限长度为17m的钢管,根据生产要求,需要数量分别为25,20,15的长度分别为3m,5m,9m的钢条。求至少需要切割多少条钢管以满足生产要求。
【原模型】
1.目标:使用的钢条数最少;
2.约束:
2.1满足生产各种长度钢条数量要求;
2.2每条钢管长度限制;
决策变量:
x
i
n
x_i^n
xin表示第
i
i
i条钢管切割类型
n
n
n的数量,整数;
y
i
y_i
yi表示钢管
i
i
i是否使用,0,1变量。
目标函数:
M
i
n
∑
i
=
1
N
y
i
Min \sum_{i=1}^{N}y_i
Mini=1∑Nyi
约束条件:
1.满足生产各种型号数量要求
∑
i
=
1
N
x
i
j
<
=
b
j
\sum_{i=1}^{N} x_{i}^{j}<=b_j
i=1∑Nxij<=bj
2.长度限制和钢管切割才使用
∑
j
=
1
J
l
j
x
i
j
<
=
L
y
i
\sum_{j=1}^{J}l_j x_{i}^{j}<=Ly_i
j=1∑Jljxij<=Lyi
3.变量符号限制
x
i
j
∈
Z
+
x_i^{j} \in Z^+
xij∈Z+
y
i
∈
0
,
1
y_i\in {0,1}
yi∈0,1
考虑钢管切割为几种类型的钢条模式构成集合P;
a
i
p
a_ip
aip:为模式p下类型为i的钢条数量;
x
p
x_p
xp:为模式p下使用的钢条数量;
则问题转变为
【限制主问题】
目标:
M
i
n
(
Z
=
∑
p
P
x
p
)
Min (Z= \sum_{p}^{P}x_p)
Min(Z=p∑Pxp)
约束:
∑
A
X
>
=
b
\sum AX>=b
∑AX>=b
X
>
=
0
X>=0
X>=0
【限制主问题对偶问题】
其对偶问题dual为:
目标函数:
M
a
x
(
Z
d
u
a
l
=
b
T
π
)
Max (Z^{dual}= b^T\pi)
Max(Zdual=bTπ)
约束条件:
∑
A
T
π
<
=
1
T
\sum A^{T}\pi<=1^{T}
∑ATπ<=1T
π
>
=
0
\pi>=0
π>=0
【子问题】
目标函数:
M
i
n
(
1
−
∑
i
π
i
a
i
p
)
\\Min (1-\sum_{i}\pi_{i}a_{ip})
Min(1−i∑πiaip)
约束条件:
L
a
p
<
=
L
La_p<=L
Lap<=L
a
i
p
∈
Z
+
a_{ip}\in Z^+
aip∈Z+