整数规划经典问题类型
BIP with additional constraints
Constraints
If investment 2 is made, then investment 4 must also be made:
it means: if x2=1x_{2}=1x2=1 then x4=1x_4=1x4=1
x2≤x4x_{2} \le x_{4}x2≤x4
If investment 1 is made, then investment 3 cannot be made,
it means: if x1=1x_{1}=1x1=1 then x3=0x_3=0x3=0
x1+x3≤1x_{1}+x_{3} \le 1x1+x3≤1
0-1 Knapsack Problem
Integer Knapsack Problem
Assignment problem
Set covering problem
注意这里是任意i和任意j都满足。
Traveling salesman problem
注意:因为我们并不知道在求解时,哪个子集 S 会形成独立的小圈(subtour)。
为了防止任何这种情况出现, 我们必须“对所有可能的 S”都强制加上限制条件。
Brute Force
The Knapsack and Covering Problems
设 (b=12∑i=1naib = \frac{1}{2}\sum_{i=1}^n a_ib=21∑i=1nai) 是一个人为构造的假设场景
这是一个特殊例子,不是背包问题的通式,而是为了说明:
意思是:
背包容量刚好等于所有物品总体积的一半。
这样做的好处是——一半一半的结构很对称、便于证明:
对任意子集 (S),它与其补集 (ScS^cSc) 的总体积一正一反,刚好在 (b) 的两边。
补集关系推导(关键逻辑)
写出体积总和:
∑i=1nai=∑i∈Sai+∑i∈Scai=2b.\sum_{i=1}^n a_i = \sum_{i\in S} a_i + \sum_{i\in S^c} a_i = 2b.∑i=1nai=∑i∈Sai+∑i∈Scai=2b.
于是得到:
若 ∑i∈Sai>b, 则 ∑i∈Scai<b.\text{若 } \sum_{i\in S} a_i > b, \text{ 则 } \sum_{i\in S^c} a_i < b.若 i∈S∑ai>b, 则 i∈Sc∑ai<b.
若 ∑i∈Sai<b, 则 ∑i∈Scai>b.\text{若 } \sum_{i\in S} a_i < b, \text{ 则 } \sum_{i\in S^c} a_i > b. 若 i∈S∑ai<b, 则 i∈Sc∑ai>b.
这说明:
对任意一个子集 (S),要么它满足背包约束(可行),要么它的补集 (S^c) 满足约束(不可行)。
所以每一对子集 ((SSS,ScS^cSc)) 至少有一个是可行的。
这就建立了“配对”思想。
三、由配对思想推出至少有 (2^{n-1}) 个可行解
我们知道所有子集共有 (2^n) 个。
如果把它们分成互补对子:
每对只算一次,总共有:
2n2=2n−1\frac{2^n}{2} = 2^{n-1} 22n=2n−1
而每对中至少有一个满足约束 (∑aixi≤b\sum a_i x_i \le b∑aixi≤b)。
所以我们得到结论:
至少有 2n−1 个可行解。\text{至少有 } 2^{n-1} \text{ 个可行解。}至少有 2n−1 个可行解。
Graphical method