**列生成算法(Column Generation Algorithm)**是一种用于求解大规模线性优化问题的高效算法,其理论基础由Danzig等人于1960年提出。本质上来讲,列生成算法是单纯形法的一种形式,用来求解线性规划问题。
产生背景
在某些线性规划问题的模型中,约束条件的数目有限,但变量的数目会随着问题规模的增长爆炸式的增长,很难把所有的变量都显性的在模型中表达出来,这类问题就是大规模的线性规划问题。面对这类问题,单纯形法虽然能保证在数次迭代后找到最优解,但由于其需要对众多变量进行基变换,求解过程会异常繁琐。此外,在用单纯形法求解这类问题时,基变量只与约束条件的个数相关,每次迭代只会有一个新的非基变量进基,换言之,在整个求解过程中其实只有很少一部分变量会被涉及到。在这种背景下,研究人员基于单纯形法提出了列生成算法。
该算法不是直接同时处理所有的候选方案,而是基于当前生成的列的子集,通过限制主问题进行优化求解;其余的候选方案可以改善限制主问题当前最优解时,才会进入该子集。与单纯形法相比,列生成的进基变量是通过求解子问题生成的,而单纯形法的进基变量是模型存在的变量。
目前,列生成算法已被应用于求解很多著名的NP-hard优化问题,如机组人员调度问题(Crew assignment problem)、切割问题(Cutting stock problem)、车辆路径问题(Vehicle routing problem)、单资源工厂选址问题(The single facility location problem)等。
基本思想
列生成算法通过求解子问题(sub problem)来找到可以进基的非基变量,该非基变量在模型中并没有显性的写出来(可以看成是生成了一个变量,每个变量其实等价于一列,所以该方法被称为列生成算法)。如果找不到一个可以进基的非基变量,那么就意味着所有的非基变量的检验数(Reduced Cost,RC)都满足最优解的条件,也就是说,该线性规划的最优解已被找到。其思路如下:
1、先把原问题(Master Problem,MP)转换到一个规模更小(即变量数比原问题少)的问题上,这个只使用部分变量的模型被称为原问题的RMP 问题(Restricted Master Problem)。在RMP上用单纯形法求最优解,注意此时求得的最优解只是RMP上的,并不是MP的最优解。
2、然后需要通过一个子问题去检测在那些未被考虑的变量中是否有使得RC小于零的情况,如果有,那么就把这个变量的相关系数列加入到RMP的系数矩阵中,返回第1步。
经过反复迭代,直到子问题中的RC都大于等于零,此时就找到了MP的最优解。