如何解线性规划方程(Linear Program, LP)在最优化中是一个大问题。本文介绍了解线性规划问题,求解最优解(Optimal Solution)的方法。
介绍单纯形法(the Simplex Algorithm)之前,需要先简单介绍一下基(basis)和标准形(Canonical Form)。
Basis
对于一组矩阵 A A A的列索引所组成的向量 B B B,我们规定 B B B是基,当且仅当:
- A B A_B AB是方阵
-
A
B
A_B
AB非奇异
这里, A B A_B AB是矩阵 A A A由 B B B挑选出来的列向量所组成的矩阵。
Canonical Form
对于一个LP,有:
min
c
T
x
+
d
s.t.
A
x
=
b
x
≥
0
\min {c^T x+d} \\ \text{s.t. } Ax=b \\ x\geq0
mincTx+ds.t. Ax=bx≥0
假定
A
A
A的基是
B
B
B,如果说这个LP是Canonical form,当:
- A B = I A_B=I AB=I
- c j = 0 ( for all j ∈ B ) c_j=0 (\text{for all }j\in B) cj=0(for all j∈B)
可以看出,同一个LP,可以是基 B 1 B_1 B1的标准型,也可以是基 B 2 B_2 B2的标准型。因此,在提到标准型的概念,是需要和基挂上钩的。
转化为标准型
我们假定某一个LP,为
P
P
P。
P
P
P的定义如下:
min
c
T
x
+
d
s.t.
A
x
=
b
x
≥
0
\min {c^T x+d} \\ \text{s.t. } Ax=b \\ x\geq0
mincTx+ds.t. Ax=bx≥0
而转化后的标准型,记为
P
’
P’
P’。
P
’
P’
P’定义如下:
nax
[
c
⊤
−
y
⊤
A
]
⏟
c
ˉ
x
+
y
⊤
b
\operatorname{nax} \underbrace{\left[c^{\top}-y^{\top} A\right]}_{\bar{c}} x+y^{\top} b
naxcˉ
[c⊤−y⊤A]x+y⊤b
s.t. { A B − 1 A ⏟ A ′ x = A B − 1 b x ≥ 0 \text{s.t.}\{ \begin{array}{l} \underbrace{A_{B}^{-1} A}_{A^{\prime}} x=A_{B}^{-1} b \\ x \geq 0 \end{array} s.t.{A′ AB−1Ax=AB−1bx≥0
其中, y = A B − T c B y=A_B^{-T}c_B y=AB−TcB。此时, P ′ P' P′是一个依赖于基 B B B的标准型,符合Canonical Form的定义。
单纯型法概述
单纯型法旨在找到任意的一个LP的最优解。其流程如下所示:
需要注意的是,这个迭代是不一定收敛的。因此,有学者提出了一个Bland’s Rule,根据这个规则,它保证这个算法是一定会终止的。
在流程中,我们可以看到,我们需要输入一个可行解(或者是一个可行基)。如果手上没有可行基或者可行解,自然也就不能让算法Run起来。
因此,我们需要一个普适的算法,使得这个算法成立。
The 2-Phase Method
二段法正是针对解LP问题的一个普适算法。这个算法流程如下所示:
Phase 1 中,先找到一个可行解;或者判断不存在有可行解。而在Phase 2 中,正式利用上述的单纯形法,接出一个最优解;或者判断LP是unbounded的。
具体的单纯形法的求解过程,见最优化:单纯形法(二)。