单纯形法

title: 标准形式.
content: 假设有n个变量和m个约束。线性规划的标准形式如下:  所有其他形式的线性规划方程组都可以按照下列方式转化成标准形式:
title: 松弛形式.
content: 可以将标准形式的线性规划转化为松弛形式,以方便运算。 在原来n个变量,m个约束的线性规划中,加入m个新的变量,将原来的不等式化为等式:  formula_8  当然,此时formula_9依然成立。  我们将formula_10这些变量称为非基变量,它们构成的集合记为N。将 formula_10这些变量称为基变量,它们构成的集合记为B。简单地理解,非基变量能够由基变量唯一确定。  在这样的定义下,线性规划的松弛形式可以写为如下形式:  formula_12  因此,线性规划的松弛形式可以由c, A, b, N, B唯一确定,c是长度为n+m的向量,b是长度为m的向量,A是m*(n+m)的矩阵。N, B是整数集合,分别表示非基变量集合以及基变量集合。
title: 转轴操作.
content: 转轴操作是单纯形法中的核心操作,其作用是将一个基变量与一个非基变量进行互换。可以将转轴操作理解为从单纯形上的一个顶点走向另一个顶点。  设变量formula_4属于B(基变量),变量formula_4属于N(非基变量),执行转轴操作pivot(d,e)之后,formula_4将变为非基变量,相应地formula_4将变为基变量。  具体地说,一开始我们有  formula_17  移项,得  formula_18  如果formula_19,我们有  formula_20  将此式代入其他的约束等式以及目标函数,我们就实现了formula_4与formula_4在基变量和非基变量上的互换。
title: 方法步骤.
content: 单纯形法的一般解题步骤可归纳如下:
title: 最优化过程.
content: 如果b向量所有元素非负,则显然我们只需要令所有的变量等于0,就可以得到一个可行解。在这种情况下,通过下述最优化过程,我们可以得到该线性规划的最优解,或者指出该线性规划的最优解为无穷大(不存在)。  根据formula_27的最小性不难证明pivot(d, e)不会破坏b的非负性。因此将所有变量取0值仍然是可行解。同时,根据formula_29,我们发现v一定是不降的。这就达到了更新解的目的。  不难发现,算法终止有两种情况: 可以证明,对于第一种情况,我们已经得到了该线性规划的最优解。当前的v即为答案。严格证明比较复杂,但是直观上是很容易理解的。因为所有的非基变量都是非负的,而所有的c都是非正的,因此只要某个非基变量不为0,就会使得目标函数更小。  对于第二种情况来说,很容易证明此时线性规划的最优解是无穷大。只要让其他所有变量均为0,变量formula_4为正无穷。由于所有的formula_4都非正,因此非基变量的非负性得到保证。同时由于formula_24,目标函数值为正无穷。
title: 实例.
content: 例:解最优化问题:  formula_34  formula_35  formula_36  formula_37  列单纯形表(即矩阵): 然后从c所在行的正数中最大的一个所对应的变量作为基变量,因为这里两者一样,不妨选为formula_38。  由于拿formula_38所在列的正系数去除b所在列的数的结果为formula_40,故取formula_41离开基变量。  然后对该矩阵进行行变换,使formula_38所在列变成单位向量:  接下来令c所在行的其余的正数中最大的一个所在列的变量formula_43进入基变量,并且根据formula_44,令formula_45离开基变量。  继续进行行变换,得到  由于c所在行的所有数都非正,问题结束。最优解为formula_46,最优值为formula_47。
title: 初始化过程.
content: 如果b向量并不全为非负,则我们需要通过初始化过程来找到一个可行解,然后才可以使用最优化过程进行优化。当然,此时原线性规划不一定存在可行解。  具体的方法是,加入一个新的非基变量formula_4,并在原线性规划的基础上构造一个新的辅助的线性规划。  formula_49  注意这里N集合并不包含formula_4。  然后,选择一个基变量formula_4使得formula_4最小,执行转轴操作pivot(d, 0)。不难证明该操作过后所有的b值全部非负。然后,使用前文中所述的最优化过程求解该辅助线性规划。  由于formula_4非负,因此该线性规划的答案非正。如果答案为负数,则说明原线性规划不可能让所有的基变量都非负,因此原线性规划无可行解。否则,只要令所有变量为0,并去掉formula_4变量,就可以得到可行解。  在从辅助线性规划转化到原来的线性规划的过程中,如果formula_4已经是非基变量,则可以将其从约束条件和目标函数中直接去掉。否则,需要任取一个非基变量formula_4执行pivot(0, e),将formula_4变为非基变量。由于此时formula_4是基变量且formula_59,故formula_59一定成立,因此这个转轴操作不会破坏b向量的非负性。
title: 效率分析.
content: 在采用Bland's法则选择用于转轴操作的d和e(相同值的情况下取字典序最小)之后,可以证明单纯形法一定能够在有限步之后终止,但是最坏情况算法的时间复杂度为指数级别的,而且可以构造出让单纯形法的时间复杂度达到指数级别的具体实例。不过实践证明在绝大多数情况下单纯形法的效率非常令人满意。  单纯形法的最坏时间复杂度为指数级别,并不意味着线性规划不存在多项式级别的算法。椭球算法和内点算法均为解决线性规划的多项式时间算法。

Summary: 单纯形法(simplex algorithm)在数学优化领域中常用于线性规划问题的数值求解,由乔治·伯纳德·丹齐格发明。

Algorithme du simplexe: Lalgorithme du simplexe est un algorithme de résolution des problèmes d'optimisation linéaire. Il a été introduit par George Dantzig à partir de 1947. C'est probablement le premier algorithme permettant de minimiser une fonction sur un ensemble défini par des inégalités. De ce fait, il a beaucoup contribué au démarrage de l'optimisation numérique. L'algorithme du simplexe a longtemps été la méthode la plus utilisée pour résoudre les problèmes d'optimisation linéaire. Depuis les années 1985-90, il est concurrencé par les méthodes de points intérieurs, mais garde une place de choix dans certaines circonstances (en particulier si l'on a une idée des contraintes d'inégalité actives en la solution).