![f520be7e380d9afec215980bcfc8e772.png](https://i-blog.csdnimg.cn/blog_migrate/9aa44541f41a9faf9123509e289bb28f.png)
1. 什么是“行生成”Row Generation?
行生成是一种对应于列生成的叫法。更多情况下,它被称为“割平面法(Cutting Plane)”。割平面在线性规划中等同于“约束”的概念,所以有些书里面也叫它为“延迟约束生成法(delayed constraint generation)”。
它是一种解决大规模线性规划的手段。这里所谓的“大规模“通常就是指约束或者变量非常多,比如指数数量。
2.为什么使用“行生成”
如果我们把这样的具有大量约束的线性规划直接丢给单纯形法去求解,首先输入这么多约束(比如指数级数量)的计算复杂度就已经不是polynomial的了,更别说去求解。经过实践发现,很多时候一个线性规划的解根本不需要那么多约束就可以求出来。
3. “行生成”的步骤
所以,不难想到:先只算一小部分的约束(约束子集),另一部分暂时不管(实际上这叫relaxation)。这样一来,解决了约束太多的问题。如果求出的解是originally feasible的,那么原问题的最优解就是它了。要是不行,那就找出一个被违反的约束,加进来再求解。然后直到我们能找到一个originally feasible的解即可。
以下是正式描述:
原问题:
用
用
用
所以,得到一个原问题的reduced problem:
约束生成算法的框架如下:
Step1:初始化
Step2: 求解问题
Step3: 如果
4.算法的效率分析
行生成算法对于求解线性规划问题,step2理论上可以做到"polynomial-time solvable",因为众所周知的椭球法。所以,step3将决定了行生成算法的计算复杂度[1]。
Step3: 最关键的一步。如何确定
对该子问题进行如下的建模[3]:
如果
如果
但是行生成有一个非常不错的性质:就算我们无法求得
5.行生成-->列生成
以前总是从D-W分解和cutting stork切入学习列生成,其实理解了行生成后,通过对偶理论可以自然而然地推得列生成算法的步骤。
有如下线性规划问题。
在
求解得到
借用行生成的思路,我们把
记
按照之前所说的行生成法,
因为
代入
得到违反的约束后,添入
参考文献:
[1]Grötschel, Martin, László Lovász, and Alexander Schrijver. "The ellipsoid method and its consequences in combinatorial optimization." Combinatorica 1.2 (1981): 169-197.
[2]Letchford, Adam N., and Andrea Lodi. "Primal separation algorithms." Quarterly Journal of the Belgian, French and Italian Operations Research Societies 1.3 (2003): 209-224.
[3]Bertsimas, Dimitris, and John N. Tsitsiklis. Introduction to linear optimization. Vol. 6. Belmont, MA: Athena Scientific, 1997.