线性规划(Linear Programming)是一类考虑目标函数和约束条件的优化问题。它要求目标函数和约束条件是线性的。
比如这样的问题:
max
7
x
1
+
6
x
2
s.t.
3
x
1
+
x
2
≤
120
x
1
+
2
x
2
≤
160
x
1
≤
35
\begin{aligned} \max~ & 7x_1 + 6 x_2\\ \text{s.t.}~ & 3x_1 + x_2 \leq 120 \\ & x_1 + 2x_2 \leq 160 \\ & x_1 \leq 35 \\ \end{aligned}
max s.t. 7x1+6x23x1+x2≤120x1+2x2≤160x1≤35
第一行是目标函数,其中
max
\max
max 代表优化方向,即最大化。
第二行至最后,是约束条件,用不等式描述(s.t. 是 subject to 的缩写)。它要求 x = ( x 1 , x 2 ) x = (x_1, x_2) x=(x1,x2) 满足所有不等式,这样的 x x x 称为 可行解。
求解上述问题,就是要找到一个可行解 x x x,使得目标函数值最大。
标准形
一般情况下,目标可能是最大化,也可能是最小化;约束可以是等式,也可以是不等式;需要求解的变量可以为正,也可以为负。
为了简化问题,可以通过一些技巧,把线性规划问题标准化。
1、决策变量非负。
设 x ∈ R x \in\mathbb{R} x∈R,引入非负变量 x + = max ( x , 0 ) , x − = − min ( x , 0 ) x^+ = \max(x, 0), x^- = -\min(x, 0) x+=max(x,0),x−=−min(x,0) 。这样一来, x x x 可以表示成 x = x + − x − x = x^+ - x^- x=x+−x−。
2、约束条件是等式。
已知 f ( x ) ≤ b f(x) \leq b f(x)≤b,引入松弛变量 y ≥ 0 y\geq 0 y≥0,得到等式 f ( x ) + y = b f(x) + y = b f(x)+y=b。
3、等式右边的常数非负。
如果等式右边为负,则两边同时乘以 − 1 -1 −1。
4、最大化与最小化可以互相转化。
max f ( x ) \max f(x) maxf(x) 可转化为 min − f ( x ) \min -f(x) min−f(x) ,最优解不变。同理, min f ( x ) \min f(x) minf(x) 可转化为 max − f ( x ) \max -f(x) max−f(x)。
综上所述,下面用向量和矩阵描述线性规划的 标准形。
min
c
T
x
s.t.
A
x
=
b
x
≥
0
\begin{aligned} \min~ & c^T x\\ \text{s.t.}~ & Ax=b\\ & x\geq 0 \end{aligned}
min s.t. cTxAx=bx≥0
其中
c
,
x
∈
R
n
c, x \in \mathbb{R}^n
c,x∈Rn,
A
∈
R
m
×
n
A\in\mathbb{R}^{m\times n}
A∈Rm×n,
b
∈
R
m
≥
0
b\in\mathbb{R}^m \geq \mathbf{0}
b∈Rm≥0。
几何理解
下面我们从几何的角度来理解线性规划问题。
线性规划问题的约束由 m m m 个等式定义。从几何上看,每个等式代表一个超平面。 m m m 个超平面相交构成了一个多面体(Polyhedron)。
在三维空间中,如下图所示。
注意,这个多面体是凸凸的。
作为对比,下面这个多面体就不是凸的:
求解线性规划问题,就是要在一个凸多面体 P P P 中找到一个点 x x x,使得目标函数 c T x c^Tx cTx 最小。
令 d = c / ∣ ∣ c ∣ ∣ d = c / ||c|| d=c/∣∣c∣∣,把 d d d 看成一个超平面 H H H 的法向量。注意到 c T x = ∣ ∣ c ∣ ∣ ⋅ d T x c^Tx = ||c|| \cdot d^Tx cTx=∣∣c∣∣⋅dTx,因此最小化 c T x c^Tx cTx 等价于最小化 d T x d^Tx dTx。
这样一来,线性规划问题可以这样描述:找一个点 x ∈ P x\in P x∈P,离超平面 H H H 最近。
什么点离超平面最近?
最优解在多面体的顶点上(证明略)。
有了这样的认知,只要枚举所有顶点,然后看看哪个顶点对应的目标函数值最小,即可找到最优解。但是枚举的效率太低,还有更好的方法,比如单纯形法、内点法。