[学习笔记] 整数规划之割平面法 How and why?

整数规划之割平面法 How and why?

说明

本文并不是一篇教程,只是把学习过程中的不解的地方做记录,解释为什么使用割平面法时添加的约束方程是那个样子的。这是年前才学的东西,但是现在学习一些算法、方法时慢慢倾向于记忆一些方法而不是理清算法思路,感觉和我学离散数学的时候状态差不多,太依赖记忆了。最近疫情在家刚好手头的事情做完,尽量去梳理一下本学期一些之前不太“知其所以然”的东西。

割平面法

割平面法的大致思路是通过先求解非整数规划也就是普通线性规划的最优解,对于非整数解通过添加约束条件来使得可行域变小,再重新解加了约束条件的普通线性规划,直到解为整数解。割平面法相对与分支定界法稍微难理解一点,后者非常简单明了,在对非整数解分成大于和小于两个分支搜索结果,而割平面法不容易理解的地方在于添加的约束。

上图中虚线是割平面法添加的约束,将线性规划问题的可行域减小。

下面将以一个例子作为展开,来说明割平面法是如何添加约束的。
假定一个整数规划问题如下:
\[ z^* = \max z = 5x_1 + 8x_2 \\s.t. \\x_1 + x_2 + s_1 = 6 \\5x_1 + 9 x_2 + s_2 = 45 \\x_1,x_2,s_1,s_2 \geq 0,and\ integer \]

手动单纯形法解一下非整数的线性规划问题,得到下面的单纯形表:

5 8 0 0
Cb b x1 x2 s1 s2
5 x1 9/4 1 0 9/4 -1/4
8 x2 15/4 0 1 -5/4 1/4
检验数 0 0 -5/4 -3/4

这个时候可以看到解x1和x2都不是整数,于是对x2添加一个约束条件:
\[ 0.75s_1 + 0.25s_2 \geq 0.75 \]

How and why

为什么是添加这个约束条件呢?

首先由表中x2那一行我可以得到这个约束等式:
\[ \frac{15}{4} = 0 x_1 + 1x_2 -\frac{5}{4}s_1 + \frac{1}{4}s_2 \]
改写一下形式(将整数部分和小数部分分开):
\[ 3 + \frac{3}{4} = (0 + 0)x_1 + (1 + 0)x_2 + (-2 + \frac{3}{4})s_1 + (0 + \frac{1}{4})s_2 \]
将整数部分移项:
\[ (0x_1 + 0x_2 + \frac{3}{4}s_1 + \frac{1}{4}s_2) + (0x_1 + 1x_2 -2s_1 + 0s_2 -3) = \frac{3}{4} \]
等号左边分为两个部分,可以得到:
\[ (0x_1 + 0x_2 + \frac{3}{4}s_1 + \frac{1}{4}s_2) \geq \frac{3}{4} \]

那为啥这里可以把等号变成大于等于号呢?可以证明,如果IL和IR是任意两个整数,f为正分数,F为一些正分数的和,使得\(IL + F = IR + f\),那么一定有:
\[ IL\leq IR \\F \geq f \]

简单证明:如果F> 1,则F>f;如果0<F<1,则F = f。这样就可以得到小数部分的关系如上了。

在添加约束条件之前的可行域:

蓝线和红线为两个约束条件,蓝色部分为可行域。

添加约束条件之后的可行域:

蓝色虚线为添加的约束条件。可见约束条件刚好能包含原可行域内所有整数可行解,并且可行域的大小减小了。

实际上,只要能够让可行域的大小减小并且能包含所有整数可行解,无论怎么添加约束条件都是可以的,上述的约束条件添加的方法只是很多方法中的一种,是Gomory第一个发现的,所以很常用。从几何意义上讲,约束条件的添加是对可行域的一次切割,所以称为割平面法。

猜你喜欢

转载自www.cnblogs.com/aoru45/p/12501380.html