组合优化问题、混合整数规划模型的相关论文中经常接触这 3 个名词:分支定界(branch-and-bound),分支切割(branch-and-cut),分支定价(branch-and-price),有时候会混淆。写这篇博客总结一下:
1. 分支定界 (branch-and-bound)
分支定界是最常见的,国内的运筹学教学中,在整数规划章节都会讲到这个方法,其基本思想也比较容易理解,重点包括分支 (branch)、定界 (bound)、剪枝 (prune) 这三个主要步骤。
对于一个目标为最大化的混合整数规划问题:
- step 1:将整数解约束松弛,即求解该问题的线性规划问题,得到一个解 x \bf x x,对应的目标函数值为原问题的一个上界,初始化原问题的一个下界负无穷 − ∞ -\infty −∞。(若该线性规划问题无解,则原问题也无解)
- step 2—— 算法终止条件:若没有任何可以分支的方向,则当前的下界即为最优解;否则:
- step 3——分支(branch): 在解 x \bf x x 中,选取某个非整数求解变量 x i x_i xi,分别构建大于等于其向上取整值、小于其向下取整值的两个约束条件,从而构建两个子线性规划模型。
- step 4——定界(bound):求解子线性规划模型,若其刚好得到整数解,则该整数解为原问题的一个可行解,即得到原问题的一个下界,若比当前下界大,则更新下界;若不为整数解,
- step 4.1——剪枝(prune):若子线性规划模型不可行或者得到的解比已知下界还小,则将分支方向剪掉,不再对其解继续分支。
- step 4.2——继续分支(branch),若子线性规划问题得到的解比已知下界大,返回 step 2 继续循环。
对于一些简单的问题,分支定界的步骤非常形象,例如:
2. 分支切割 (branch-and-bound)
分支切割的思想是:在分支定界的步骤 step 4.2 中,在继续分支之前,添加切平面 (cut) 约束,使得该子线性规划问题得到解更小,即能得到原问题更加紧 (tight) 的上界。
3. 分支定价 (branch-and-price)
在列生成算法中,若结合分支定界,则该方法称为分支定价。