整数规划
之前介绍到了有关整数规划的常见的算法:分支定界和割平面,这次想要总结以下的是其他的相关方法。
列生成
- 列生成算法是在单纯形法的基础上提出的,单纯形法之前介绍的是求解线性优化命题所用的,但是针对大规模的优化命题来说,即变量数爆炸性增长的命题,所对应的约束可能并没有那么多,如果采用单纯形法求解,直接的问题就是计算量很大,尤其是基变量可能很少,但是所对应的非基变量很多。在进行出基入基的操作过程中,带来了很多的计算难度,在这个问题上,提出了列生成算法。
思路
列生成算法的思路主要就是采用小规模的优化命题去代替原先的大规模优化命题,不断的去优化小规模命题,进而得到大规模命题的最优解
- 将原问题缩减到一个规模较小的restricted master problem,利用单纯形法求解这个小问题。
- 此时出现的问题就是拿到的最优解是restricted master problem的最优解,如何考虑其他变量的影响,因此需要找到一个subproblem,通过这个问题来判定是否存在其他的一些变量能够使得原问题的目标函数更优,存在则将这个变量加入到restricted master problem中。
- 不断重复的迭代上述过程,直到找不到能使原问题目标函数更小的变量。
概念
- 主问题
主问题就是对原问题所建立的优化命题 - restricted master problem(RMP)
部分变量所构成问题 - subproblem
RMP所对应的对偶问题,重点是为了求解非基变量的检验数,以寻找下次迭代过程中需要加入基的变量。
常见的问题
- 利用列生成方法解决优化整数优化命题中非常重要的是在于RMP的构造,相当于利用benders decomposition方法求解中的复杂变量与简单变量的选取以构造Master problem 和 subproblem,因此下面给出几个常见的问题构造。
- 板材切割问题
板材切割问题是非常常见的一个组合优化命题,其所对应的RMP可以看作是一个背包问题。
- TSP 问题
旅行商问题可以考虑成一个常见的最大流问题 或者 哈密顿回路问题
- VRP问题
VRP问题其实本身就是TSP问题的一个简化版问题,其实可以看作是一个最短路径问题去构造RMP
流程图
参考资料:
列生成 参考 blog