1. 线性规划的解
一个线性规划(LP)问题如果有最优解,必定有一个最优解出现在顶点上。
从几何上讲,线性规划的约束集合为凸面体,一个超平面(目标函数的等值面)靠近约束集合时,最先接触到的必然是凸面体的一个顶点或一条边,因此一定有一个最优解出现在顶点上。
2. 线性规划的标准型
线性规划的标准型为:
min c T x s . t . A x = b x ≥ 0 \begin{align*} \min &~\mathbf{c}^T\mathbf{x}\\ s.t. &~\mathbf{Ax=b}\\ &~\mathbf{x\geq 0} \end{align*} mins.t. cTx Ax=b x≥0
可以通过以下两个方式转化成标准型:
- 将所有不等式约束转化为等式约束:通过增加非负的松弛变量,
- 将所有变量转化为非负约束:负约束变量通过引入非负变量,无约束变量使用两个非负变量的差值表示。
对于线性方程组 A x = b \mathbf{Ax=b} Ax=b, A ∈ R m × n \mathbf{A}\in\mathbb{R}^{m\times n} A∈Rm×n,通过令 n − m n-m n−m个变量为0(非基变量),解出的变量称为基变量,构成一组基本解。
3. 初级单纯形法
单纯形法就是在顶点上搜索LP的最优解。求解步骤如下:
- 初始化:化成标准型,写出单纯形表,并找一个初始基本解。
例如(见《运筹学(原书第2版)》(——罗纳德L.拉丁)5.3节):考虑如下标准型:
max 12 x 1 + 9 x 2 s . t . x 1 + x 3 = 1000 x 2 + x 4 = 1500 x 1 + x 2 + x 5 = 1750 4 x 1 + 2 x 2 + x 6 = 4800 x 1 , x 2 , x 3 , x 4 , x 5 , x 6 ≥ 0 \begin{align*} \max ~&12x_1+9x_2\\ s.t. ~&\quad x_1+\quad\quad\quad x_3\quad\quad\quad\quad\quad\quad~=1000\\ &\quad\quad\quad ~x_2+\quad\quad\quad x_4\quad\quad\quad\quad=1500\\ &\quad x_1+x_2+\quad\quad\quad\quad \quad x_5\quad\quad=1750\\ ~&4x_1+2x_2+\quad\quad\quad\quad \quad\quad\quad x_6=4800\\ &x_1,x_2,x_3,x_4,x_5,x_6\geq 0 \end{align*} max s.t. 12x1+9x2x1+x3 =1000 x2+x4=1500x1+x2+x5=17504x1+2x2+x6=4800x1,x2,x3,x4,x5,x6≥0
先找到一个顶点,即初始基本解。令 x 1 , x 2 = 0 x_1,x_2=0 x1,x2=0为非基变量,可以求解方程组得到初始基本解 x ( 0 ) = ( 0 , 0 , 1000 , 1500 , 1750 , 4800 ) \mathbf{x}^{(0)}=(0,0,1000,1500,1750,4800) x(0)=(0,0,1000,1500,1750,4800)。系数表如下:
x 1 x_1 x1 | x 2 x_2 x2 | x 3 x_3 x3 | x 4 x_4 x4 | x 5 x_5 x5 | x 6 x_6 x6 | ||
---|---|---|---|---|---|---|---|
c \mathbf{c} c | 12 | 9 | 0 | 0 | 0 | 0 | b \mathbf{b} b |
A \mathbf{A} A | 1 | 0 | 1 | 0 | 0 | 0 | 1000 |
0 | 1 | 0 | 1 | 0 | 0 | 1500 | |
1 | 1 | 0 | 0 | 1 | 0 | 1750 | |
4 | 2 | 0 | 0 | 0 | 1 | 4800 | |
N N N | N N N | B B B | B B B | B B B | B B B | ||
x ( 0 ) \mathbf{x}^{(0)} x(0) | 0 | 0 | 1000 | 1500 | 1750 | 4800 |
- 找到可行方向 Δ x \Delta \mathbf{x} Δx
首先因为相邻顶点的紧约束组只相差一个,并且标准型只有等式约束,而等式约束始终是紧约束,所以这里能放松的只有非基变量的非负约束。我们可以有 ( Δ x 1 , Δ x 2 ) = ( 1 , 0 ) , ( 0 , 1 ) (\Delta x_1,\Delta x_2)=(1,0),(0,1) (Δx1,Δx2)=(1,0),(0,1)两种选择。
接着根据线性规划的可行方向的性质可知,可行方向满足 A Δ x = 0 \mathbf{A}\Delta\mathbf{x}=\mathbf{0} AΔx=0,将上面两种情况分别代入,可以求解一个线性方程算出基变量的方向。
然后由 Δ f = c T Δ x \Delta f=\mathbf{c}^T\Delta \mathbf{x} Δf=cTΔx可以算出每个方向对函数值的优化情况。
x 1 x_1 x1 | x 2 x_2 x2 | x 3 x_3 x3 | x 4 x_4 x4 | x 5 x_5 x5 | x 6 x_6 x6 | ||
---|---|---|---|---|---|---|---|
c \mathbf{c} c | 12 | 9 | 0 | 0 | 0 | 0 | b \mathbf{b} b |
A \mathbf{A} A | 1 | 0 | 1 | 0 | 0 | 0 | 1000 |
0 | 1 | 0 | 1 | 0 | 0 | 1500 | |
1 | 1 | 0 | 0 | 1 | 0 | 1750 | |
4 | 2 | 0 | 0 | 0 | 1 | 4800 | |
N N N | N N N | B B B | B B B | B B B | B B B | ||
x ( 0 ) \mathbf{x}^{(0)} x(0) | 0 | 0 | 1000 | 1500 | 1750 | 4800 | c T x = 0 \mathbf{c}^T\mathbf{x}=0 cTx=0 |
x 1 x_1 x1的 Δ x \Delta \mathbf{x} Δx | 1 | 0 | -1 | 0 | -1 | -4 | Δ f = 12 > 0 \Delta f=12>0 Δf=12>0 |
x 2 x_2 x2的 Δ x \Delta \mathbf{x} Δx | 0 | 1 | 0 | -1 | -1 | -2 | Δ f = 9 > 0 \Delta f=9>0 Δf=9>0 |
- 判断最优性
根据每个方向的 Δ f \Delta f Δf可知函数值还可以继续优化,不能优化则迭代停止。 - 确定步长
根据可行方向有负值,可知约束集在此处有界。如果找到一个可以无限移动的方向,说明约束集无界,停止迭代。
这里取 x 1 x_1 x1的 Δ x \Delta \mathbf{x} Δx作为迭代方向。现在让 x ( 0 ) \mathbf{x}^{(0)} x(0)点沿着可行方向移动,直到有一个基变量最先降为0,因此步长为 λ = 1000 \lambda=1000 λ=1000。 - 新顶点和基
新顶点为 x ( 1 ) = x ( 0 ) + λ Δ x = ( 0 , 0 , 1000 , 1500 , 1750 , 4800 ) + 1000 × ( 1 , 0 , − 1 , 0 , − 1 , − 4 ) = ( 1000 , 0 , 0 , 1500 , 750 , 800 ) \begin{align*} \mathbf{x}^{(1)}&=\mathbf{x}^{(0)}+\lambda \Delta \mathbf{x}\\ &=(0,0,1000,1500,1750,4800)+1000\times(1,0,-1,0,-1,-4)\\ &=(1000,0,0,1500,750,800)\end{align*} x(1)=x(0)+λΔx=(0,0,1000,1500,1750,4800)+1000×(1,0,−1,0,−1,−4)=(1000,0,0,1500,750,800)
此时, x 1 x_1 x1入基成为新的基变量, x 3 x_3 x3出基成为非基变量,新基为 { x 1 , x 4 , x 5 , x 6 } \{ x_1, x_4, x_5, x_6\} { x1,x4,x5,x6}。回到第二步,继续寻找可行方向,判断是否能继续优化。迭代过程如下:
x 1 x_1 x1 | x 2 x_2 x2 | x 3 x_3 x3 | x 4 x_4 x4 | x 5 x_5 x5 | x 6 x_6 x6 | ||
---|---|---|---|---|---|---|---|
c \mathbf{c} c | 12 | 9 | 0 | 0 | 0 | 0 | b \mathbf{b} b |
A \mathbf{A} A | 1 | 0 | 1 | 0 | 0 | 0 | 1000 |
0 | 1 | 0 | 1 | 0 | 0 | 1500 | |
1 | 1 | 0 | 0 | 1 | 0 | 1750 | |
4 | 2 | 0 | 0 | 0 | 1 | 4800 | |
t = 0 t=0 t=0 | N N N | N N N | B B B | B B B | B B B | B B B | |
x ( 0 ) \mathbf{x}^{(0)} x(0) | 0 | 0 | 1000 | 1500 | 1750 | 4800 | c T x = 0 \mathbf{c}^T\mathbf{x}=0 cTx=0 |
x 1 x_1 x1 |