线性规划与单纯形法
Note (本章导学).
线性规划是运筹学最基础也是最重要的分支。本章将系统学习:
如何将实际问题建立为线性规划模型
图解法的几何直观
单纯形法的代数原理与计算步骤
人工变量处理技巧
核心思想:线性规划的可行域是凸多面体,最优解一定在顶点处达到。单纯形法通过在顶点间"跳跃"来寻找最优解。
一般线性规划问题的数学模型
问题的提出
Definition 1 (线性规划).
如果在规划问题的数学模型中,目标函数和约束条件都是线性的,这类模型称为线性规划(Linear Programming, LP)问题的数学模型。
线性规划是运筹学的一个重要分支,也是运筹学最基本的一个部分,它是研究现有条件下,使目标达到最优的一种数学方法。
线性规划的教学理论是成熟的。求解线性规划的方法——单纯形法易于在计算机上实现。单纯形法的出现使线性规划得到了更广泛的应用,已成为现代科学管理的重要手段之一。
Problem 1 (有限资源利用问题).
某企业计划生产Ⅰ、Ⅱ两种产品,这两种产品都要分别在A、B、C、D四种不同设备上加工,各种设备的生产能力和产品的利润如下表所示,试问企业如何安排生产,使得利润最大?
| \toprule
设备 | 产品Ⅰ | 产品Ⅱ | 资源限制 |
| --- | --- | --- | --- |
| \midrule
A | 2 | 2 | 12 |
| B | 1 | 2 | 8 |
| C | 4 | 0 | 16 |
| D | 0 | 4 | 12 |
| \midrule
单位利润 | 2 | 3 | |
| \bottomrule |
解:设
x1, x2 分别表示产品Ⅰ、Ⅱ的产量,则数学模型为:
\begin{aligned} \max & Z = 2x1 + 3x2 \ \text{s.t.} & 2x1 + 2x2 \leq 12 \ & x1 + 2x2 \leq 8 \ & 4x1 \leq 16 \ & 4x2 \leq 12 \ & x1, x2 \geq 0 \end{aligned}
Remark 1 (建模要素分析).
从上述例子可以看到,规划问题的数学模型包括三个组成要素:
a) 决策变量:指决策者为实现规划目标的方案、措施,是问题中要确定的未知量
b) 目标函数:指问题要达到的目的要求,表示为决策变量的函数
c) 约束条件:指决策变量取值时受到的各种可用资源的限制,表示为含决策变量的等式或不等式
线性规划问题的数学模型
Proposition 1 (一般形式).
一般线性规划问题的数学模型可表示为:
Proposition 2 (简写形式).
Proposition 3 (向量形式).
其中,,,。
Proposition 4 (矩阵形式).
其中
为约束方程组变量的系数矩阵,或者称为约束变量的系数矩阵。
线性规划问题的标准形式
线性规划问题的目标函数和约束条件内容和形式上多种多样。为便于讨论,规定线性问题的标准形式为:
Definition 2 (标准形式).
其中()。
Remark 2.
标准形式的线性规划模型中:
目标函数为求极大值(有些书上规定是求极小值)
约束条件为等式
约束条件右端常数项 为非负值
变量 的取值非负
Proposition 5 (化为标准形式的方法).
对不符合标准形式的线性规划问题,可分别通过下列方法化为标准形式:
1. 目标函数为求极小值
若,因为求 等价于求,令,即化为:
2. 约束条件为不等式
当约束条件为 "",如,可令 或。
显然 为松弛变量(未被充分利用的资源)。
当约束条件为 "",如,可令 或。
显然 为剩余变量(超用的资源)。
和 是新加上去的变量,取值均为非负,加到原约束条件中去的目的是使不等式转化为等式。松弛变量和剩余变量在实际问题中分别表示未被充分利用的资源和超用的资源数,均未转化为价值和利润,所以引进模型后它们在目标函数中的系数均为。
3. 取值无约束变量(自由变量)
如果变量 代表某产品当年计划数与上一年计划数之差,显然 的取值可能是正也可能是负,这时可令,其中,将其代入线性规划模型即可。
4. 变量为负数
若,可令,显然。
Problem 2 (化为标准形式).
将下列线性规划模型化为标准形式:
解:令,,,则有:
其中 为松弛变量, 为剩余变量。
Note (化为标准形式的技巧).
先处理变量:自由变量拆分为两个非负变量,负变量取反
再处理约束:不等式添加松弛/剩余变量,等式保持不变
最后处理目标函数:极小化变极大化(系数取负)
检查右端项:若有负数,等式两边同乘
线性规划问题的解
Definition 3 (线性规划问题).
求解线性规划问题,就是从满足约束条件, 的方程组中找出一个解,使目标函数 达到最大值。
Definition 4 (可行解与可行域).
满足上述约束条件, 的解称线性规划问题的可行解。全部可行解的集合称为可行域,记为。
Definition 5 (最优解).
使目标函数 达到最大值的可行解称为最优解。若,使得对,都有,则称 为问题的最优解。
Definition 6 (基).
设 是约束方程组 的 阶系数矩阵(),秩为。 是矩阵 中的一个 阶的满秩子矩阵,称 是线性规划问题的一个基。
不失一般性,设:
基向量:
非基向量:
基变量:
非基变量:
故
,已知。
Proposition 6 (基解的计算).
其中:,,
由
,得:
在上式中令,则得到,即
称之为相应于基 的基解。
Definition 7 (基可行解与可行基).
基可行解:满足变量非负约束条件 的基解称为基可行解
可行基:对应于基可行解的基称为可行基
有一个基,就可以求出一个基解,由于基的个数是有限的,最多只有 个,故基解最多只有 个,而基可行解的个数不会超过基解的个数。
Problem 3.
在下述线性规划问题中,举例说明什么是基、基变量、基解、基可行解和可行基:
解:引入松弛变量化为标准型:
约束方程组的系数矩阵(秩不大于4):
图解法
为便于建立 维空间中线性规划问题的概念以及便于理解求解一般线性规划问题的单纯形法的思路,先介绍图解法。
图解法优点是直观性强,计算方便,缺点是只适用于问题中有两个变量的情况。
Proposition 7 (图解法的步骤).
以例题2为例:
步骤1:在直角坐标系中画出线性规划问题的可行域。
步骤2:做目标函数的等值线,由,得:。
步骤3:确定最优解。等值线覆盖于可行域上,当 由小变大时,等值线就沿着其法线方向向上方移动,当移动至点 时,最优。将其代入目标函数得。
即该企业生产Ⅰ、Ⅱ产品的最佳方案是:生产4件产品Ⅰ,2件产品Ⅱ,能获得利润14。
解的几种情况
上例中最优解唯一,但在线性规划问题的计算中,解的情况还有可能会出现以下几种:
有无穷多解
Problem 4.
线性规划问题的可行域如图,则目标函数的最大值等值线与直线 重合,故线段 上的点都是该问题的最优解,无穷多最优解。
无界解(无最优解)
Problem 5.
线性规划问题的可行域如图,目标函数值在可行域中可以增加到无穷大。故本题虽有可行解,但无最优解。其原因是建模时漏掉了某些必要的资源约束。
无可行解
Problem 6.
当可行域是空集时,自然不会有最优解。
Theorem 1.
可行域一定是一个有界或者无界的凸多边形。若问题有最优解,则它一定位于可行域的顶点处。若在两个顶点处同时达到最优解,则它们的连线上的任一点都将是最优解,即有无穷多个最优解。
Note (图解法的启示).
对于一般的含有 个变量的线性规划问题,上述结论是否也成立?为此,还需做进一步的理论分析。图解法告诉我们:
线性规划的可行域是凸集
最优解(如果存在)一定在顶点处达到
这启发我们:只需要在顶点中寻找最优解
这就是单纯形法的几何基础。
单纯形法原理
单纯形法是求解一般线性规划问题的基本方法,在1947年由"线性规划之父"丹捷格(Dantzig)提出。
Note (单纯形法的核心思想).
单纯形法的精髓可以用一句话概括:"在顶点之间跳跃,每次跳跃都变得更好"。
具体来说:
从一个顶点(基可行解)出发
判断当前顶点是否最优(检验数)
如果不是最优,找一个相邻的更好的顶点(基变换)
重复直到找到最优
为什么这样做有效?因为线性规划的可行域是凸多面体,最优解一定在顶点处达到。而单纯形法巧妙地利用代数方法(基变换)来实现几何上的"顶点跳跃"。
预备知识:凸集和顶点
Definition 8 (凸集).
对于一个给定的几何图形,通常可以直观上判断其凹凸性。但这样做一方面不严格,容易产生错误;另一方面,如果一个几何形体给出的只是解析表达式,则无法从直观上进行判断。
凸集的严格定义:若集合 中任意两点,其连线上的所有点,也都是集合 中的点,称 为凸集。由于 的连线可以表示为:
凸集的定义用数学语言表示:对,有()。
Definition 9 (顶点).
凸集 中满足下述条件的点 称为顶点:如果 中不存在任意两个不同的点 和,使 成为这两个点连线上的一个点。即对任何,,不存在(),则称 是凸集 的顶点。
几个基本定理的证明
Theorem 2 (定理一).
若线性规划问题存在可行解,则问题的可行域是凸集。
Theorem 3 (定理二).
线性规划问题的基可行解,对应线性规划问题可行域的顶点。
Lemma 1.
可行解是基可行解的充要条件: 正分量所对应的列向量是线性独立的(用于证明定理二)。
Theorem 4 (定理三).
可行域有界,则最优解必在可行域顶点达到。
Lemma 2.
若 为有界凸集,对 中任一点可表示为 顶点的凸组合(用于证明定理三)。
Theorem 5 (定理四).
若在多个顶点达到最优,则在这些顶点任意凸组合上达最优。
Proposition 8 (总结:线性规划问题最优解情况).
可行域空集:没有可行解,不存在最优解
可行域非空:可行域是凸集
可行域为有界凸集:一定存在最优解,一定在顶点取得
- 最优解唯一:最优解一定在可行域某一个顶点取得
- 最优解无穷多个:最优解一定至少在两个顶点取得
可行域是无界凸集合:可能有最优解,可能无最优解
- 有最优解:有唯一最优解(一个顶点);有无穷多最优解(至少两个顶点)
由于可行域顶点有限,故可以枚举法逐个比较,找到最优解,但 较大时,做法不可取。
单纯形法
单纯形法是求解线性规划问题最为有效的一个方法,它的基本思想是从一个基可行解(即可行域的一个顶点)出发,经过基变换转换到另一个基可行解,最后得到最优解。
Problem 7 (引例).
单纯形法的三个关键步骤:
确定初始基可行解
最优性检验及解的判定
基变换
确定初始基可行解
线性规划问题如果存在最优解,一定可以在基可行解中找到,因此单纯形法的基本思路是,先找到一个初始基可行解,如果不是最优解,设法转换到另一个基可行解,不断进行一直到找到最优解为止。
线性规划约束条件全部为""时,可按照下述方法找出初始基可行解。
左式第 个约束条件上加上松弛变量,化为标准形式:
约束方程组的系数矩阵为:
以上矩阵中含有单位矩阵。
以上单位矩阵为基,解出变量值()。
, 是一个基可行解。
当线性规划中约束条件为 "" 或 "" 时,化为标准形式后,一般约束条件的系数矩阵中不包含有单位矩阵。为便于找出一个初始基可行解,可添加人工变量构造单位矩阵,称作人工基。
最优性检验及解的判定
设基变量,非基变量, 为基矩阵,位于 前 列,,。
由
,得:
目标函数:
Definition 10 (检验数).
目标函数中非基变量的系数称为检验数:
即。
令非基变量 可得,得到初始基可行解
。
Theorem 6 (最优性判别定理).
设 为对应于基 的一个基可行解:
(a) 所有() 最优解
(b) 所有()且存在某个非基变量检验数 且按公式 可以找到,这表明可以找到另一顶点(基可行解)目标函数值也达到最大。 无穷多解
(c) 存在某 且对所有,有() 无界解/无最优解
Note (检验数的经济含义).
检验数 表示:如果让非基变量 增加1个单位,目标函数值会改变多少。
若:增加 会使目标函数值增大(对最大化问题有利)
若:增加 会使目标函数值减小
若:增加 不会改变目标函数值
因此,对于最大化问题,当所有 时,当前解就是最优的——没有任何非基变量能再改善目标函数值了。
基变换
初始基可行解不是最优解及不能判别无界时,寻找新的基可行解,进行基变换:
确定换入(进基)变量:从原来的非基变量中选择一个变量作为基变量
确定换出(出基)变量:从原来的基变量中确定一个变量作为非基变量
确定进基(换入)变量:
当某些 时, 增加则目标函数值还可以增大,要将某个非基变量 换到基变量中去(称为换入/进基变量)。
若两个以上,一般选 中的最大者,即:
确定换出(出基)变量:
由,当 进基时,其他非基变量仍为0,则:
为了保证,必须有(当 时)。
令:
则 为出基变量。
Note (最小比值法则的理解).
为什么要用最小比值法则?
当我们让进基变量 增加时,为了保持等式约束成立,基变量需要相应调整。取最小比值,是为了找到第一个变为0的基变量——这就是出基变量。如果比值不是最小的那个,那么那个基变量会先变成负数,违反非负约束。
基变换总结归纳:
从一个基可行解到另一个基可行解的变换,就是进行一次基变换。从几何意义上讲,就是从可行域的一个顶点转向另一个顶点。相邻的基可行解:从一个基可行解转换为相邻的基可行解。
单纯形表
Definition 11 (单纯形表).
单纯形表是将线性规划问题的系数以表格形式表示,便于进行迭代计算的工具。
Note (单纯形表的结构理解).
单纯形表实际上是把线性规划问题的所有信息浓缩在一个表格中:
第一行:价值系数
第一列:基变量的价值系数
中间:约束矩阵(基变量对应的列构成单位矩阵)
右端:当前基可行解的值
最下行:检验数
右下角:当前目标函数值
每次迭代就是通过行变换,把进基变量对应的列变成单位向量,同时更新检验数。
完整单纯形表求解示例
Problem 8 (用单纯形法求解生产计划问题).
第一步:化为标准型
引入松弛变量:
第二步:建立初始单纯形表
初始基变量为,对应单位矩阵。
初始单纯形表(迭代0)
| \toprule | 2 | 3 | 0 | 0 | 0 | 0 | |||
|---|---|---|---|---|---|---|---|---|---|
| 基 | |||||||||
| \midrule | |||||||||
| 0 | 2 | 2 | 1 | 0 | 0 | 0 | 12 | ||
| 0 | 1 | 2 | 0 | 1 | 0 | 0 | 8 | ||
| 0 | 4 | 0 | 0 | 0 | 1 | 0 | 16 | ||
| 0 | 0 | [4] | 0 | 0 | 0 | 1 | 12 | ||
| \midrule | 2 | 3 | 0 | 0 | 0 | 0 | |||
| \bottomrule |
分析:
检验数:,,当前不是最优解
选择最大检验数:,所以 进基
计算 比值,最小为3,所以 出基
主元为(表中用[4]标记)
第三步:第一次迭代
以 为主元进行行变换:
第4行除以4
其他行消去 的系数
第一次迭代后(迭代1)
| \toprule | 2 | 3 | 0 | 0 | 0 | 0 | |||
|---|---|---|---|---|---|---|---|---|---|
| 基 | |||||||||
| \midrule | |||||||||
| 0 | 2 | 0 | 1 | 0 | 0 | 6 | |||
| 0 | [1] | 0 | 0 | 1 | 0 | 2 | |||
| 0 | 4 | 0 | 0 | 0 | 1 | 0 | 16 | ||
| 3 | 0 | 1 | 0 | 0 | 0 | 3 | |||
| \midrule | 2 | 0 | 0 | 0 | 0 | ||||
| \bottomrule |
分析:
检验数:,当前不是最优解
进基, 出基(最小比值2)
主元为
第四步:第二次迭代
第二次迭代后(迭代2)
| \toprule | 2 | 3 | 0 | 0 | 0 | 0 | |||
|---|---|---|---|---|---|---|---|---|---|
| 基 | |||||||||
| \midrule | |||||||||
| 0 | 0 | 0 | 1 | 0 | 2 | ||||
| 2 | 1 | 0 | 0 | 1 | 0 | 2 | |||
| 0 | 0 | 0 | 0 | 1 | [2] | 8 | |||
| 3 | 0 | 1 | 0 | 0 | 0 | 3 | |||
| \midrule | 0 | 0 | 0 | 0 | |||||
| \bottomrule |
分析:
检验数:,当前不是最优解
进基, 出基(最小比值4)
主元为
第五步:第三次迭代
第三次迭代后(迭代3)——最终表
| \toprule | 2 | 3 | 0 | 0 | 0 | 0 | ||
|---|---|---|---|---|---|---|---|---|
| 基 | ||||||||
| \midrule | ||||||||
| 0 | 0 | 0 | 1 | 0 | 0 | |||
| 2 | 1 | 0 | 0 | 0 | 0 | 4 | ||
| 0 | 0 | 0 | 0 | 1 | 4 | |||
| 3 | 0 | 1 | 0 | 0 | 2 | |||
| \midrule | 0 | 0 | 0 | 0 | ||||
| \bottomrule |
最优性检验:所有检验数,达到最优!
最优解:
基变量:
非基变量:
最优值:
实际意义:企业应生产4件产品Ⅰ,2件产品Ⅱ,可获得最大利润14元。此时设备A、B的产能刚好用完(),设备C还有4单位剩余(),设备D用完()。
Note (单纯形法计算要点总结).
初始表的建立:引入松弛变量,确定初始基(通常是单位矩阵对应的松弛变量)
检验数的计算:
进基变量的选择:最大正检验数对应的变量
出基变量的选择:最小比值法则
主元变换:高斯消元,将进基变量列变成单位向量
终止条件:所有检验数(最大化问题)
退化现象
Definition 12 (退化的基可行解).
当确定进基变量计算 值时,若有两个或多个相同的最小值,任取其中一个基变量作为出基变量,则下表中另一基变量的值将等于。含一个或多个基变量为 的基可行解称为退化的基可行解。
Remark 3.
当发生退化现象时,从理论上讲,有可能出现计算过程的循环,但在实际问题的线性规划模型,计算中未曾出现过循环现象。因此,出现退化现象时可以任意决定哪一个变量作为出基变量,不必考虑理论上可能出现循环的后果。
单纯形法的进一步讨论
人工变量法(大M法)
当约束条件为 "" 或 "" 时,化为标准形式后,一般约束条件的系数矩阵中不包含有单位矩阵。为便于找出一个初始基可行解,需要引入人工变量构造单位矩阵,称作人工基。
Proposition 9 (大M法).
对于最大化问题,在目标函数中给人工变量赋予一个很大的负系数( 为充分大的正数):
其中 为人工变量。
若最优解中人工变量全为,则得到原问题的最优解
若最优解中人工变量不全为,则原问题无可行解
由上例可看出运用大M法时,若是通过手工求解,其计算过程虽有些繁琐,但无太大困难。可是,若运用大M法在计算机上进行运算,必须对 给出具体的赋值,如何选择一个合适的充分大的正数作为 的取值是一个难点。
两阶段法
Proposition 10 (两阶段法).
第一阶段:构造辅助问题,最小化人工变量之和
两阶段法的第一阶段是先求解一个目标函数中只包含人工变量的线性规划问题,即令目标函数中其他变量系数为,人工变量的系数取某个正数(一般取),在保持原问题的约束条件不变的情况下求这个目标函数的极小化时的解。
虽然在第一阶段中,当人工变量的取值为 时,目标函数也为,这时候的最优解就是原线性规划问题的一个可行解。
最优目标值,且人工变量皆为非基变量。从第一阶段的最优解中去掉人工变量后,即为原线性规划的一个初始基可行解,再求原问题,从而进入第二阶段。
最优目标值,且存在人工变量为基变量,但取值为零。把某个非基变量与该人工变量进行调换,进入第二阶段。
最优目标值,也即最优解的基变量中含有人工变量,且不为。表明原线性规划问题无可行解。
第二阶段:从第一阶段最终单纯形表出发,去掉人工变量,并按问题原来的目标函数,继续寻找问题的最优解。
Note (大M法 vs 两阶段法).
大M法:用一个很大的数 来"惩罚"人工变量,计算简单但 的取值需要经验
两阶段法:分两个阶段求解,第一阶段找可行解,第二阶段求最优解,更加系统化,计算机实现更方便
在实际计算中,两阶段法更为常用。
关于解的判别
Proposition 11 (解的判别总结).
(1) 设 为对应于基 的一个基可行解:
- (a) 所有() 最优解
- (b) 所有()且存在某个非基变量检验数 且按公式 可以找到 无穷多解
- (c) 存在某 且对所有,有() 无界解/无最优解
(2) 若引入人工变量后,问题满足最优性条件时基变量仍含有人工变量,且人工变量不为零时,问题无可行解。
Note (各种解的情况在单纯形表中的体现).
下面对图解法中已求解过的几个例子,再用单纯形法计算,对比一下各种解在单纯形表中的出现形式:
(1)有无穷多最优解:最优表中存在某个非基变量的检验数为0,且该变量可以进基。
(2)无界解(或无最优解):存在检验数大于0的列,且该列的所有系数都小于等于0。
(3)无可行解:引入人工变量后,最优解中仍含有人工变量且不为零。
线性规划的应用
Problem 9 (工业原材料的合理利用——下料问题).
要制作100套钢筋架子,每套有长2.9m、2.1m和1.5m的钢筋各一根,已知原材料长7.4m,应如何切割使用原材料更节省?
分析:首先列出所有可能的切割方案(下料方式),然后设按第 种方案切割的原材料根数为,建立线性规划模型,目标是最小化使用的原材料总数。
Problem 10 (排班问题).
某昼夜服务的公交线路每天各时间段内所需司机和乘务人员数如下:
设司机和乘务人员分别在各时间段一开始时上班,并连续工作八小时,问该公交线路怎样安排司机和乘务人员,既能满足工作需要,又配备最少司机和乘务人员?
分析:设第 个时间段开始上班的人数为,每个工作人员工作8小时(覆盖两个时间段),建立线性规划模型,目标是最小化总人数。
Problem 11 (人员安排问题).
福安商场是个中型的百货商场,它对售货员的需求经过统计分析如下表:
为了保证售货人员充分休息,售货人员每周工作5天,休息两天,并要求休息的两天是连续的。问应该如何安排售货人员的作息,既满足工作需要,又使配备的售货人员的人数最少?
分析:设从周一开始休息的人数为,周二开始休息的人数为,依此类推。每个人休息两天,工作五天。建立线性规划模型,目标是最小化总人数。
Note (线性规划建模的一般步骤).
理解问题:明确决策目标、约束条件、决策变量
设定变量:确定需要决策的未知量
建立目标函数:将目标表示为变量的线性函数
列出约束条件:将限制表示为变量的线性等式或不等式
化为标准型:根据需要化为标准形式,便于求解
本章小结
\addcontentsline{toc}{chapter}{本章小结}
Note. 一、核心概念
线性规划的标准形式:目标函数最大化、约束为等式、变量非负、右端项非负
基、基变量、基解、基可行解、可行基
检验数:判断最优性的关键指标
单纯形法的几何意义:在可行域顶点间跳跃寻找最优
二、关键定理
线性规划的可行域是凸集
基可行解与可行域顶点一一对应
最优解必在可行域顶点达到(如果存在)
最优性判别定理(检验数)
三、单纯形法计算步骤
化为标准型,确定初始基可行解
计算检验数,判断是否最优
选择进基变量(最大正检验数)
选择出基变量(最小比值法则)
进行行变换,更新单纯形表
重复2-5直到所有检验数
四、解的四种情况
唯一最优解:所有检验数
无穷多最优解:存在检验数 的非基变量可进基
无界解:存在检验数 且对应列全
无可行解:人工变量无法从基中剔除
五、人工变量处理
大M法:用很大的数惩罚人工变量
两阶段法:第一阶段找可行解,第二阶段求最优解
Note (学习建议).
先理解图解法的几何直观,再学习单纯形法的代数运算
单纯形表要多练习,熟练掌握行变换
理解检验数的经济含义,不要死记硬背
注意区分松弛变量、剩余变量和人工变量的不同作用
多做应用题,培养建模能力
Download the original write-up here.