如果线性整数规划的变量限定为只能0或1,那么称之为01整数线性规划问题,许多工程上的优化问题都可以归纳为01整数规划,这种问题模型很多情况下更便于计算机计算。
01整数规划只是一般整数线性规划的特殊情况,相当于多添加了xi≤1x_i\leq1xi≤1的约束,所以一般化的分支界定算法也适用。唯一值得修改的地方在于,以xix_ixi进行分支时,两个分支的额外约束可以直接写成xi=0x_i=0xi=0和xi=1x_i=1xi=1
这篇文章着重介绍的是解决01整数问题的另一种算法:隐式枚举(Implicit Enumeration),可以看成是一般分支界定算法的特定变体,相比显式的穷举,引入上下界来避免不必要的枚举。
在进行隐式枚举前,需要首先对原始的规划问题进行规范化操作,将原问题格式化为标准形式:所有约束是小于等于的形式;目标函数的系数都非负;目标函数的变量顺序按系数值从小到大排列。例如下面这个原始的01问题:
minimizeZ=−5x1+7x2+10x3−3x4+x5subject to−x1−3x2+5x3−x4−4x5≥0−2x1−6x2+3x3−2x4−2x5≤−4−2x2+2x3+x4+x5≥2xj∈{
0,1} \begin{aligned} minimize\quad& Z=-5x_1+7x_2+10x_3-3x_4+x_5\\ subject\ to\quad& -x_1-3x_2+5x_3-x_4-4x_5\geq0 \\ & -2x_1-6x_2+3x_3-2x_4-2x_5\leq-4 \\ & -2x_2+2x_3+x_4+x_5\geq2 \\ & x_j\in\{0,1\} \end{aligned} minimizesubject toZ=−5x1+7x2+10x3−3x4+x5−x1−3x2+5x3−x4−4x5≥0−2x1−6x2+3x3−2x4−2x5≤−4−2x2+2x3+x4+x5≥2xj∈{
0,1}
首先将所有形式是大于等于的约束不等式,两边同乘-1,使得所有约束都是小于等于的形式:
minimizeZ=−5x1+7x2+10x3−3x4+x5subject tox1+3x2−5x3+x4+4x5≤0−2x1−6x2+3x3−2x4−2x5≤−42x2−2x3−x4−x5≤−2xj∈{
0,1} \begin{aligned} minimize\quad& Z=-5x_1+7x_2+10x_3-3x_4+x_5\\ subject\ to\quad& x_1+3x_2-5x_3+x_4+4x_5\leq0 \\ & -2x_1-6x_2+3x_3-2x_4-2x_5\leq-4 \\ & 2x_2-2x_3-x_4-x_5\leq-2 \\ & x_j\in\{0,1\} \end{aligned} minimizesubject toZ=−5x1+7x2+10x3−3x4+x5x1+3x2−5x3+x4+4x5≤0−2x1−6x2+3x3−2x4−2x5≤−42x2−2x3−x4−x5≤−2xj∈{
0,1}
然后我们需要让目标函数的所有系数为非负数,在这个例子里x1x_1x1和x4x_4x4的系数为负数,我们首先将目标函数里这两个变量的系数乘上-1转为非负数,同时需要在约束中将x1x_1x1替换成(1−x1)(1-x_1)(1−x1),将x4x_4x4替换成(1−x4)(1-x_4)(1−x4):
minimizeZ=5x1+7x2+10x3+3x4+x5subject to(1−x1)+3x2−5x3+(1−x4)+4x5≤0−2(1−x1)−6x2+3x3−2(1−x4)−2x5≤−42x2−2x3−(1−x4)−x5≤−2xj∈{
0,1} \begin{aligned} minimize\quad& Z=5x_1+7x_2+10x_3+3x_4+x_5\\ subject\ to\quad& (1-x_1)+3x_2-5x_3+(1-x_4)+4x_5\leq0 \\ & -2(1-x_1)-6x_2+3x_3-2(1-x_4)-2x_5\leq-4 \\ & 2x_2-2x_3-(1-x_4)-x_5\leq-2 \\ & x_j\in\{0,1\} \end{aligned} minimizesubject toZ=5x1+7x2+10x3