整数线性规划
初步讨论
- 先不考虑 x i ∈ Z x_i\in Z xi∈Z的条件,求解原问题
- 根据1中解的情况寻找到
x
i
∈
Z
x_i\in Z
xi∈Z的一个最优解
- 枚举法(在可行域中找到所有的整数点,然后代入目标函数,求出最优解)的局限性太大,需要引入像引入单纯形法一样引入某种方法来处理整数问题
- 分支定界法和割平面法
分支定界法
-
本质:可以理解为一种二分比较,把可行域分成两个部分,在两个可行域进行比较,在两个可行域得出结果之后如果过满足条件则停止,否则继续分割可行域,逐步减小目标函数值的上界和增大下界,直到满足要求为止
-
e.g. max z = 40 x 1 + 90 x 2 , s . t . { 9 x 1 + 7 x 2 ≤ 56 7 x 1 + 20 x 2 ≤ 70 x i ≥ 0 , x i ∈ Z \max z=40x_1+90x_2 , ~s.t. \left\{\begin{array}{c} 9x_1+7x_2\le 56\\ 7x_1+20x_2\le 70\\ x_i\ge 0,x_i\in Z \end{array}\right. maxz=40x1+90x2, s.t.⎩⎨⎧9x1+7x2≤567x1+20x2≤70xi≥0,xi∈Z
-
首先不考虑 x i ∈ Z x_i\in Z xi∈Z的约束条件,即问题 B B B: max z = 40 x 1 + 90 x 2 s . t . { 9 x 1 + 7 x 2 ≤ 56 7 x 1 + 20 x 2 ≤ 70 x i ≥ 0 \begin{array}{l}\max z=40x_1+90x_2 \\ s.t.\left\{\begin{array}{c} 9x_1+7x_2\le 56\\ 7x_1+20x_2\le 70\\ x_i\ge 0 \end{array}\right.\end{array} maxz=40x1+90x2s.t.⎩⎨⎧9x1+7x2≤567x1+20x2≤70xi≥0,求得此问题的最优解: x ∗ = ( 4.81 , 1.82 ) T , z ∗ = 356 x^*=(4.81,1.82)^T,~z^*=356 x∗=(4.81,1.82)T, z∗=356
-
基于 x 1 x_1 x1,对原问题增加两个约束条件 x 1 ≤ 4 , x 1 ≥ 5 x_1\le 4,x_1\ge 5 x1≤4,x1≥5(也可以对 x 2 x_2 x2增加约束条件),从而将原问题分解为两个子问题 B 1 B_1 B1和 B 2 B_2 B2,不考虑整数条件解问题 B 1 B_1 B1和 B 2 B_2 B2,得到各自的最优解
B 1 : x ∗ = ( 4 , 2.1 ) T , z ∗ = 349 B_1:~x^*=(4,2.1)^T,z^*=349 B1: x∗=(4,2.1)T,z∗=349, B 2 : x ∗ = ( 5 , 1.57 ) T , z ∗ = 341 B_2:~x^*=(5,1.57)^T,z^*=341 B2: x∗=(5,1.57)T,z∗=341注:若 B B B没有可行解则直接停止;若 B B B的最优解符合整数条件,则直接得到最优解
-
得到 0 ≤ z ∗ ≤ 349 0\le z^*\le 349 0≤z∗≤349,继续对问题 B 1 B_1 B1和 B 2 B_2 B2进行分解,由于 349 > 341 349>341 349>341,因此先分解 B 1 B_1 B1,增加两个约束条件 x 2 ≤ 2 , x 2 ≥ 3 x_2\le 2,x_2\ge 3 x2≤2,x2≥3,分解为两个子问题 B 3 B_3 B3和 B 4 B_4 B4
-
B 3 B_3 B3的解都是整数,因此更新下界 340 ≤ z ∗ ≤ 341 340\le z^*\le 341 340≤z∗≤341, B 4 B_4 B4的最优值小于下界,因此进行剪枝
注:求出一个可行解(满足整数条件)才更新下界
注:若求出的最优值小于当期下界,则进行剪枝,不再对该问题进行分支
-
对 B 2 B_2 B2进行分解得到 B 5 B_5 B5和 B 6 B_6 B6,对于 B 5 B_5 B5,最优值小于下界,剪枝; B 6 B_6 B6无可行解
-
最终得到最优整数解为 x ∗ = ( 4 , 2 ) T , z ∗ = 340 x^*=(4,2)^T,z^*=340 x∗=(4,2)T,z∗=340
-
割平面法
-
割平面的本质是找到一个特殊的约束,以减小原问题的可行域。特殊点:1. g 新 g_新 g新像一把刀一样,切下去把一部分非整数解直接排除掉,2. Cannot read property 'type' of undefined解(交点)是整数点
-
e.g. max z = x 1 + x 2 , s . t . { − x 1 + x 2 ≤ 1 3 x 1 + x 2 ≤ 4 x i ≥ 0 , x i ∈ Z \max z=x_1+x_2 , ~s.t. \left\{\begin{array}{c} -x_1+x_2\le 1\\ 3x_1+x_2\le 4\\ x_i\ge 0,x_i\in Z \end{array}\right. maxz=x1+x2, s.t.⎩⎨⎧−x1+x2≤13x1+x2≤4xi≥0,xi∈Z
-
首先引入松弛变量化成等式约束: max z = x 1 + x 2 s . t . { − x 1 + x 2 + x 3 = 1 3 x 1 + x 2 + x 4 = 4 x i ≥ 0 , x i ∈ Z \begin{array}{l}\max z=x_1+x_2 \\~s.t.\left\{\begin{array}{c} -x_1+x_2+x_3= 1\\ 3x_1+x_2+x_4= 4\\ x_i\ge 0,x_i\in Z \end{array}\right.\end{array} maxz=x1+x2 s.t.⎩⎨⎧−x1+x2+x3=13x1+x2+x4=4xi≥0,xi∈Z,
不考虑整数条件求得最优解 x = ( 3 4 , 7 4 , 0 , 0 ) T , max z = 5 2 x=(\frac{3}{4},\frac{7}{4},0,0)^T,\max z=\frac{5}{2} x=(43,47,0,0)T,maxz=25 -
在上述单纯形法计算的终表中可以得到相应的表达式
x 1 − 1 4 x 3 + 1 4 x 4 = 3 4 x 2 + 3 4 x 3 + 1 4 x 4 = 7 4 x_1-\frac{1}{4}x_3+\frac{1}{4}x_4=\frac{3}{4}\\ x_2+\frac{3}{4}x_3+\frac{1}{4}x_4=\frac{7}{4} x1−41x3+41x4=43x2+43x3+41x4=47 -
将系数和常数项都分解成整数和非负真分数(包括0)两部分之和然后整数和分数部分分开
x 1 − x 3 = 3 4 − ( 3 4 x 3 + 1 4 x 4 ) x 2 − 1 = 3 4 − ( 3 4 x 3 + 1 4 x 4 ) x_1-x_3=\frac{3}{4}-(\frac{3}{4}x_3+\frac{1}{4}x_4)\\ x_2-1=\frac{3}{4}-(\frac{3}{4}x_3+\frac{1}{4}x_4) x1−x3=43−(43x3+41x4)x2−1=43−(43x3+41x4) -
根据 x 1 x_1 x1和 x 2 x_2 x2是整数可以推出 x 3 x_3 x3和 x 4 x_4 x4也是整数。上述等式左侧是整数,因此右侧也是整数,于是右侧最大值只能为0,即
3 4 − ( 3 4 x 3 + 1 4 x 4 ) ≤ 0 \frac{3}{4}-(\frac{3}{4}x_3+\frac{1}{4}x_4)\le 0 43−(43x3+41x4)≤0 -
将此不等式作为新的约束条件(切割约束、切割方程),并引入松弛变量得到
− 3 x 3 − x 4 + x 5 = − 3 -3x_3-x_4+x_5=-3 −3x3−x4+x5=−3 -
使用对偶单纯形法或者人工变量法进行计算
由于系数列中 x 5 x_5 x5对应的系数 b b b为负数,因此选择 x 5 x_5 x5作为换出变量。由于
θ = min j ( c j − z j a l j ∣ a l j < 0 ) = min [ − 1 2 − 3 , − 1 2 − 1 ] = 1 6 \theta=\min\limits_j\left(\frac{c_j-z_j}{a_{lj}}\left|a_{lj}<0\right.\right)=\min\left[\frac{-\frac{1}{2}}{-3},\frac{-\frac{1}{2}}{-1}\right]=\frac{1}{6} θ=jmin(aljcj−zj∣alj<0)=min[−3−21,−1−21]=61
因此选择 x 3 x_3 x3作为换入变量,使用单纯形法进行迭代 -
最终解得最优解 x = ( 1 , 1 , 1 , 0 , 0 ) T x=(1,1,1,0,0)^T x=(1,1,1,0,0)T,最优值 max z = 1 × 1 + 1 × 1 + 0 × 1 = 2 \max z=1\times 1+1\times 1+0\times 1=2 maxz=1×1+1×1+0×1=2
-