简介:
求解整数规划问题,常用的方法是分支定界,分支定界框架中每个节点都需要求解对应的线性规划松弛问题(Relaxation),假设我们现在有100个0-1变量的IP问题,尽管线性松弛问题是多项式时间可解的,但是最坏情况下,我们需要求解2^n个线性松弛问题,这个工作量也是巨大的。
因此,我们希望在每次求解线性松弛问题时尽量获得一个更好的界(更紧的界)。增加或加强整数规划模型的约束条件有时可以大幅加强其线性松弛的界,因此也就引入了割平面方法(加割等于加约束)
User cut
定义1:如果一个线性不等式对于一个离散优化模型的所有整数可行解都成立,那么这个线性不等式就是离散优化模型的有效不等式(valid inequality)
而我们所有说的有效不等式,一般是指割掉松弛模型中可行,但是整数规划模型不可行的点(割掉LP hull中的解,但是不割掉IP hull中的解),如下图所示
Lazy Cut
与user cut不同的是,Lazy cut割掉的是整数解,效果如下图所示:
割掉小数解,我们比较好理解,为了逼近IP的凸包,提升线性松弛的界,但是Lazy cut的适用范围和user cut有所不同。
user cut适合用在分支定界算法中,用来提升线性松弛模型的解,以此来加快求解;但是lazy cut并不是用于线性松弛模型,而是直接作用在整数规划模型上。
下面以经典问题TSP为例,简单说一下lazy cut的使用情况。TSP可以看作是泛指派问题+子回路消除,而泛指派问题是简单问题(LP hull = IP hull),因此我们可以先不考虑子回路消除,直接求解该IP问题。
忽略掉subtour求得的IP问题虽然是整数可行解,但是其中可能存在subtour,因此其实并不是我们想要的解。这时候,我们设计一个启发式算法,来探测这些subtour,然后加上相应的cut砍掉这些subtour对应的整数解,然后再次求解IP。
由此循环,直到求得的IP整数解中,不再存在subtour,这时候我们找到了最终问题的全局最优解。(为什么不考虑所有的subtour,因为考虑部分subtour属于松弛问题,松弛问题最优解是原问题可以解,因此也是原问题最优解)