单纯型法 Simplex Method

单纯形法是求解线性规划代表性的算法。其基于这么样的一个事实:线性规划是在凸集上的凸优化问题,因此其局部最优解也是全局最优解。而这些局部最优解是会出现在该凸集的顶点上,所以单纯形法的思路就是在这些顶点上移动,一直移动到局部最优的顶点。这些顶点也叫做基本可行解,那么这些移动也就是从一个基本可行解通过基变换(即从众多非基变量中选择一个进基,再从基变量中选择一个使其出基)变成另一个基本可行解,直到不能再使得优化目标更优为止(这里,我们采用线性规划的标准形式,即最小化目标函数)。这个基变换的操作涉及到进基和出基,那么如何选择哪个非基变量进基呢?这里就会涉及到reduced cost rate,即下图中的crjcjr。用单纯型法的语言来说就是,通过数次基变换,使得再也找不到一个非基变量使得reduced cost rate小于零,即再也找不到一个非基变量进基使得目标函数减小,这样我们就找到目标函数在其polyhedron上的最优值。

列生成算法 Column Generation Algorithm

单纯型法虽然能保证在数次迭代后找到最优解,但是其面对变量很多的线性规划问题就显得很弱了。因为它需要去在众多变量里进行基变换,这种枚举的工作量是可怕的。因此,有人基于单纯型法提出了列生成算法,其思路大概就是先把原问题(master problem)restrict到一个规模更小(即变量数比原问题少的)的restricted master problem,在restricted master problem上用单纯型法求最优解,但是此时求得的最优解只是restricted master problem上的,并不是master problem的最优解。此时,就需要通过一个subproblem去check在那些未被考虑的变量中是否有使得reduced cost rate小于零的呢(其具体的做法就是通过求解一个线性最大化问题,即求未被考虑的变量中的reduced cost rate的最大值)?如果有,那么我就把这个变量的相关系数列加入到restricted master problem的系数矩阵中。经过这样反复的迭代,直到subproblem中的reduced cost rate大于等于零,那么master problem就求到了最优解。具体请参考我给出的参考文章。

总结:都是为了解决线性规划的问题。关于其他更多常用算法,可以看我这几篇文章

求多元函数极值的情况分类与对应的算法(机器学习中的目标函数优化和其他很多工程问题常用)。

群蚁算法、遗传算法、模拟退火算法,禁忌搜索算法等通俗详解


参考文章

* 从单纯型法到列生成算法