一、划分与覆盖的定义(set covering & set partitioning)
文字描述:
若把一个集合
A
A
A分成若干个叫做分块的非空子集,使得
A
A
A中的每个元素至少属于一个分块,那么这些分块的全体构成的集合叫做
A
A
A的一个覆盖。
如果
A
A
A中的每个元素属于且仅属于一个分块,那么这些分块的全体构成的集合叫做
A
A
A的一个划分。
数学描述:
给定
A
A
A为非空集合,
S
=
{
S
1
,
S
2
,
⋅
⋅
⋅
,
S
m
}
S=\{S_1,S_2,···,S_m\}
S={S1,S2,⋅⋅⋅,Sm},其中
S
i
⊆
A
,
S
i
≠
∅
,
i
=
1
,
⋅
⋅
⋅
,
m
S_i \subseteq A,S_i \neq \varnothing, i=1,···,m
Si⊆A,Si=∅,i=1,⋅⋅⋅,m且
∪
i
=
1
m
S
i
=
A
\cup_{i=1}^mS_i=A
∪i=1mSi=A,则集合
S
S
S为称作集合
A
A
A的覆盖。
若除以上条件外,另有
S
i
∩
S
j
≠
∅
S_i \cap S_j \neq \varnothing
Si∩Sj=∅,则称
S
S
S是
A
A
A的划分。
例
对于
A
=
{
a
,
b
,
c
}
A=\{a,b,c\}
A={a,b,c},考虑一下集合:
S
=
{
{
a
,
b
}
,
{
a
,
c
}
}
S=\{\{a,b\},\{a,c\} \}
S={{a,b},{a,c}},则
S
S
S是
A
A
A的覆盖。
Q
=
{
{
a
}
,
{
a
,
b
}
,
{
a
,
c
}
}
Q=\{\{a\},\{a,b\},\{a,c\}\}
Q={{a},{a,b},{a,c}},则
Q
Q
Q是
A
A
A的覆盖。
P
=
{
{
a
}
,
{
b
,
c
}
}
P=\{\{a\},\{b,c\} \}
P={{a},{b,c}},则
P
P
P是
A
A
A的覆盖,也是
A
A
A的划分。
G
=
{
{
a
,
b
,
c
}
}
G=\{\{a,b,c\} \}
G={{a,b,c}},则
G
G
G是
A
A
A的覆盖,也是
A
A
A的划分。
E
=
{
{
a
}
,
{
b
}
,
{
c
}
}
E=\{\{a\},\{b\},\{c\}\}
E={{a},{b},{c}},则
E
E
E是
A
A
A的覆盖,也是
A
A
A的划分。
F
=
{
{
a
}
,
{
a
,
c
}
}
F=\{\{a\},\{a,c\} \}
F={{a},{a,c}},则
F
F
F既不是覆盖,也不是划分。
二、集合包装、覆盖和划分模型
集合包装约束(set packing constraint)要求每个子集 J J J中最多有一个元素出现在最优解中,可以表示为 ∑ j ∈ J x j ≤ 1 \sum_{j \in J}x_j \leq 1 ∑j∈Jxj≤1。
集合覆盖约束(set covering constraint)要求每个子集 J J J中至少有一个元素出现在最优解中,可以表示为 ∑ j ∈ J x j ≥ 1 \sum_{j \in J}x_j \geq 1 ∑j∈Jxj≥1。
集合划分约束(set partioning constraint)要求每个子集 J J J中有且仅有一个元素出现在最优解中,可以表示为 ∑ j ∈ J x j = 1 \sum_{j \in J}x_j = 1 ∑j∈Jxj=1。
三、从集合划分模型到列生成算法
集合划分模型在论文中经常有路径优化问题的建模方式
参考:https://zhuanlan.zhihu.com/p/84742072