文章目录
线性规划(LP)
凸分析基础概念
极点(extreme point)
设 S ⊆ R n S \sube \R^n S⊆Rn是非空凸集, x ∈ S x \in S x∈S。若 ∀ λ ∈ ( 0 , 1 ) , ∀ x 1 , x 2 ∈ S , x 1 ≠ x 2 \forall \lambda \in (0,1),\forall x1,x2\in S,x_1 \ne x_2 ∀λ∈(0,1),∀x1,x2∈S,x1=x2均不能推出 x = λ x 1 + ( 1 − λ ) x 2 x=\lambda x_1 +(1- \lambda)x_2 x=λx1+(1−λ)x2,则 x x x称为 S S S的顶点或极点。即当x不能表示为两个 S S S点的严格凸组合时,x为顶点。用图示法不难理解,当 x x x不在凸集 S S S中任意两点的连线上(不包括端点)时, x x x为 S S S的极点。如下图:
显然对于 x 3 x_3 x3,可以找到无数这样的的 x 1 , x 2 ∈ S x_1,x_2\in S x1,x2∈S使 x 3 x_3 x3在这两点连线上,所以 x 3 x_3 x3不是极点, x 4 x_4 x4是极点。
方向和极方向
设 S ⊆ R n S \sube \R^n S⊆Rn是非空凸集, d ∈ R n d \in \R^n d∈Rn。若 ∀ x ∈ S , λ ≥ 0 \forall x \in S,\lambda \ge 0 ∀x∈S,λ≥0都有 x + λ d ∈ S x+\lambda d \in S x+λd∈S,则称 d d d为 S S S的一个方向。如果 ∀ λ 1 , λ 2 \forall \lambda_1,\lambda_2 ∀λ1,λ2和 S S S的方向 d 1 , d 2 d_1,d_2 d1,d2,若当 d = λ 1 d 1 + λ 2 d 2 d=\lambda_1d_1+\lambda_2d_2 d=λ1d1+λ2d2,可以推出 d 1 = α d 2 , α > 0 d_1 = \alpha d_2,\alpha \gt 0 d1=αd2,α>0,则称 d d d为 S S S的极方向。同样通过画图不难理解,只有当凸集无界时才有方向,极方向就是无界凸集边界上的方向。如下图:
在有界凸集中如果存在一个方向 d d d,任选一点 x x x, x + λ d x+\lambda d x+λd即为图示射线,显然这条射线只有一部分点在 S S S中,不满足方向的定义。在无界凸集中,可能存在无数个方向,但不难看出,当 d d d与边界平行时,当且仅当 d = α d 1 = β d 2 , α , β > 0 d=\alpha d_1= \beta d_2,\alpha,\beta \gt 0 d=αd1=βd2,α,β>0时, d d d可以满足 d = λ 1 d 1 + λ 2 d 2 d=\lambda_1d_1+\lambda_2d_2 d=λ1d1+λ2d2的形式。因此极方向就是无界凸集边界上的方向。
标准型(Standard Form)
m i n c T x min \ c^Tx min cTx
s
.
t
.
s.t.
s.t.
A
x
=
b
x
≥
0
Ax=b \\ x \ge 0
Ax=bx≥0
其中
A
∈
R
m
×
n
,
m
<
n
A\in R^{m \times n},m \lt n
A∈Rm×n,m<n,且
A
A
A行满秩。
线性规划基本定理
设线性规划可行域 S S S非空, S S S的顶点为 x 1 , … , x k x_1,…,x_k x1,…,xk,极方向为 d i , … , d l d_i,…,d_l di,…,dl,则(LP)有有限最优解的充要条件为 c T d i ≥ 0 , i = 1 , … , l c^Td_i \ge 0,i=1,…,l cTdi≥0,i=1,…,l。若(LP)有有限最优解,则(LP)必在其中一个顶点上达到最优。
这是因为,对 ∀ x ∈ S , x = ∑ i = 1 N λ i x i , ∑ i = 1 N λ i = 1 , x i \forall x\in S,x=\sum_{i=1}^N\lambda_ix^i,\sum_{i=1}^N\lambda_i=1,x^i ∀x∈S,x=∑i=1Nλixi,∑i=1Nλi=1,xi为 S S S的顶点,也就是说,多面体内任意一点均可以被多面体顶点的凸组合表示,即多面体的顶点就是多面体的全部。因此, c T x = c T ( ∑ i = 1 N λ i x i ) ≥ c T ( ∑ i = 1 N λ i x ∗ ) = c T x ∗ ∑ i = 1 N λ i = c T x ∗ c^Tx=c^T(\sum_{i=1}^N\lambda_ix^i)\ge c^T(\sum_{i=1}^N\lambda_ix^*)=c^Tx^*\sum_{i=1}^N\lambda_i=c^Tx^* cTx=cT(∑i=1Nλixi)≥cT(∑i=1Nλix∗)=cTx∗∑i=1Nλi=cTx∗,其中 x ∗ x^* x∗表示所有顶点中对应解最小的顶点。这就说明任意一点对应的解都大于等于顶点中对应解最小的顶点对应的解,所以最优值一定在顶点取得。
下面通过画图进行理解:
显然当超平面不与边界平行时,最优解有限,且在顶点处取得。
因此,在解决线性规划问题时,一个最朴素的思路是遍历所有的顶点。当然,这样的效率是很低的,所以,可以先选取一个顶点,然后找到一个相邻的更好的顶点,重复这一步直到找到最优解,这就是单纯形法的思想。
基本可行解
设 A = ( B , N ) A=(B,N) A=(B,N),其中 B B B可逆(非奇异矩阵),则称 B B B为 A A A的一个基,可以解得 x B = B − 1 ( b − N x N ) x_B=B^{-1}(b-Nx_N) xB=B−1(b−NxN),取 x N = 0 x_N=0 xN=0,有 x = ( x B x N ) = ( B − 1 b 0 ) x= \bigl( \begin{matrix} x_B\\ x_N \end{matrix} \bigr)=\bigl( \begin{matrix} B^{-1}b\\ 0\end{matrix} \bigr) x=(xBxN)=(B−1b0)为 A x = b Ax=b Ax=b的基本解, x B x_B xB称为基变量。若 B − 1 b ≥ 0 B^{-1}b \ge 0 B−1b≥0,则 B B B称为原始可行基, x = ( B − 1 b 0 ) x=\bigl( \begin{matrix} B^{-1}b\\ 0\end{matrix} \bigr) x=(B−1b0)称为基本可行解。实际上,基本可行解就是顶点,基本可行解和顶点是一一对应的。
单纯形法
单纯形法的思想
单纯形法主要包含以下两个步骤:
1.找出一个鉴别给定基本可行解是否为最优解的规则;
2.给定一个非最优的基本可行解,找到一种规则,使由该基本可行解转移到一个相邻的基本可行解,并降低目标函数值(对于最小化问题)。
单纯形法的具体步骤
设
x
∈
S
x \in S
x∈S是(LP)的一个可行解,
x
=
(
x
B
x
N
)
,
c
=
(
c
B
c
N
)
x=\bigl(\begin{matrix} x_B \\ x_N \end{matrix}\bigr),c=\bigl (\begin{matrix}c_B \\ c_N \end{matrix} \bigr)
x=(xBxN),c=(cBcN),有
B
x
B
+
N
x
N
=
b
Bx_B+Nx_N=b
BxB+NxN=b,所以
x
B
=
B
−
1
b
−
B
−
1
N
x
N
x_B=B^{-1}b-B^{-1}Nx_N
xB=B−1b−B−1NxN
c
T
x
=
c
B
T
x
B
+
c
N
T
x
N
=
c
B
T
B
−
1
b
−
c
B
T
B
−
1
N
x
N
+
c
N
T
x
N
=
c
T
x
^
T
+
(
c
N
T
−
C
B
T
B
−
1
)
x
N
\begin{aligned} c^Tx&=c_B^Tx_B+c_N^Tx_N\\ &=c_B^TB^{-1}b-c_B^TB^{-1}Nx_N+c_N^Tx_N\\ &=c^T\hat{x}^T+(c_N^T-C_B^TB^{-1})x_N \end{aligned}
cTx=cBTxB+cNTxN=cBTB−1b−cBTB−1NxN+cNTxN=cTx^T+(cNT−CBTB−1)xN
令
r
N
=
c
N
T
−
c
B
T
B
−
1
N
r_N=c_N^T-c_B^TB^{-1}N
rN=cNT−cBTB−1N,即检验数(reduced cost)。如果
r
N
≥
0
r_N \ge 0
rN≥0,则有
c
T
x
≥
c
T
x
^
T
c^Tx \ge c^T\hat{x}^T
cTx≥cTx^T,这时极点
x
^
\hat{x}
x^为最优解。
一般用单纯形表求解,下面给出一个示例:
m
a
x
z
=
3
x
1
+
6
x
2
+
2
x
3
max\ z =3x_1+6x_2+2x_3
max z=3x1+6x2+2x3
s
.
t
.
s.t.
s.t.
3
x
1
+
4
x
2
+
x
3
+
x
4
=
2
,
x
1
+
3
x
2
+
+
2
x
3
+
x
5
=
1
,
x
≥
0.
3x_1+4x_2+x_3+x_4=2, \\ x_1+3x_2++2x_3+x_5=1, \\ x \ge 0.
3x1+4x2+x3+x4=2,x1+3x2++2x3+x5=1,x≥0.
B B B | C B C_B CB | C C C | 3 | 6 | 2 | 0 | 0 | β \beta β |
---|---|---|---|---|---|---|---|---|
X 4 X_4 X4 | 0 | 2 | 3 | 4 | 1 | 1 | 0 | 2 4 = 1 2 {2\over4}={1\over2} 42=21 |
X 5 X_5 X5 | 0 | 1 | 1 | 3 | 2 | 0 | 1 | 1 3 1\over3 31 |
z=0 | σ \sigma σ | 3 | 6 | 2 | 0 | 0 | ||
B B B | C B C_B CB | C C C | 3 | 6 | 2 | 0 | 0 | β \beta β |
X 4 X_4 X4 | 0 | 2 3 2\over3 32 | 5 3 5\over3 35 | 0 | − 5 3 -{5\over3} −35 | 1 | − 4 3 -{4\over3} −34 | 2 5 2\over5 52 |
X 2 X_2 X2 | 6 | 1 3 1\over3 31 | 1 3 1\over3 31 | 1 | 2 3 2\over3 32 | 0 | 1 3 1\over3 31 | 1 |
z=2 | σ \sigma σ | 1 | 0 | -2 | 0 | -2 | ||
B B B | C B C_B CB | C C C | 3 | 6 | 2 | 0 | 0 | β \beta β |
X 1 X_1 X1 | 3 | 2 5 2\over5 52 | 1 | 0 | -1 | 3 5 3\over5 53 | − 4 5 -{4\over5} −54 | |
X 2 X_2 X2 | 6 | 1 5 1\over5 51 | 0 | 1 | 1 | − 1 5 -{1\over5} −51 | 3 5 3\over5 53 | |
z= 12 5 12\over5 512 | σ \sigma σ | 0 | 0 | -1 | − 3 5 -{3\over5} −53 | − 6 5 -{6\over5} −56 |
对偶理论
给定如下一个最小化的原始线性规划模型:
m
i
n
c
T
x
min \ c^Tx
min cTx
s
.
t
.
s.t.
s.t.
A
x
=
b
,
x
≥
0.
Ax=b, \\ x \ge 0.
Ax=b,x≥0.
其中
A
∈
R
m
×
n
,
m
<
n
,
c
∈
R
n
,
b
∈
R
m
A\in R^{m \times n},m \lt n,c \in \R^n,b \in \R^m
A∈Rm×n,m<n,c∈Rn,b∈Rm,则它的对偶问题可以表示为如下的线性规划模型:
m
a
x
z
=
b
T
y
max \ z=b^Ty
max z=bTy
s
.
t
.
s.t.
s.t.
A
T
y
≤
c
,
y
≥
0.
A^Ty \le c,\\ y \ge 0.
ATy≤c,y≥0.
支持对偶理论的基本思想是,每一个线性规划问题都存在一个与其对偶的问题,在求出一个问题解的时候,也同时给出了另一问题的解。
除了原线性规划对应的对偶问题,我们也可以人为“创造”原问题的对偶问题。
考虑一个线性规划问题§:
m
i
n
f
(
x
)
min \ f(x)
min f(x)
s
.
t
.
s.t.
s.t.
h
(
x
)
=
0
,
x
∈
X
.
h(x)=0,\\ x \in X.
h(x)=0,x∈X.
其中,
h
(
x
)
h(x)
h(x)是极为复杂的约束,而
x
∈
X
x \in X
x∈X是一个简单的约束。因此为了简化问题,可以不考虑约束
h
(
x
)
h(x)
h(x)。但显然,这样会使问题与原目标相差过大。为了避免这样的情况,将
h
(
x
)
h(x)
h(x)乘上一个系数即拉格朗日乘子
λ
\lambda
λ后加入目标函数一并考虑,得到新的拉格朗日对偶函数
d
(
λ
)
=
m
i
n
L
(
x
,
λ
)
=
f
(
x
)
+
λ
h
(
x
)
,
x
∈
X
d(\lambda)=min\ L(x,\lambda)=f(x)+\lambda h(x),x \in X
d(λ)=min L(x,λ)=f(x)+λh(x),x∈X
显然由于松弛掉了
h
(
x
)
h(x)
h(x)的约束,使得问题的可行域变大,得到的值应该是原问题的下界,即:
d
(
λ
)
≤
f
(
x
)
,
∀
f
e
a
s
i
b
l
e
s
o
l
u
t
i
o
n
o
f
(
P
)
.
d(\lambda) \le f(x),\forall feasible\ solution\ of\ (P).
d(λ)≤f(x),∀feasible solution of (P).
所以不难得出,原问题的最优下界可以由求解拉格朗日对偶问题(D)解决:
m
a
x
d
(
λ
)
max \ d(\lambda)
max d(λ)
再次考虑一个标准线性规划(LP):
m
i
n
c
T
x
min \ c^Tx
min cTx
s
.
t
.
s.t.
s.t.
A
x
=
b
,
x
≥
0.
Ax=b,\\ x \ge 0.
Ax=b,x≥0.
引入乘子
λ
∈
R
m
\lambda \in \R^m
λ∈Rm并类比上述过程进行松弛可以得到:
d
(
λ
)
=
m
i
n
{
c
T
x
+
λ
T
(
b
−
A
x
)
}
=
b
T
λ
+
m
i
n
(
c
−
A
T
λ
)
T
x
=
{
b
T
λ
A
T
λ
≤
c
−
∞
否则
x
≥
0
\begin{aligned} d(\lambda)&=min\{c^Tx+\lambda^T(b-Ax)\}\\ &=b^T\lambda+min(c-A^T\lambda)^Tx\\ &=\begin{cases} b^T\lambda & A^T\lambda \le c\\ -\infin & 否则 \end{cases} &x\ge 0 \end{aligned}\\
d(λ)=min{cTx+λT(b−Ax)}=bTλ+min(c−ATλ)Tx={bTλ−∞ATλ≤c否则x≥0
所以可以得到对偶线性规划(LD):
m
a
x
b
T
λ
max\ b^T\lambda
max bTλ
s
.
t
.
s.t.
s.t.
A
T
λ
≤
c
A^T\lambda \le c
ATλ≤c
关于拉格朗日松弛算法和拉格朗日对偶问题会在对应章节进一步讨论。
一般而言,原问题和对偶问题有以下关系:
原问题 | 对偶问题 |
---|---|
目标函数:min | 目标函数:max |
约束条件:m个 | 对偶变量:m个 |
约束条件: ≤ \le ≤ | 对偶变量: y i ≥ 0 y_i \ge 0 yi≥0 |
约束条件: ≥ \ge ≥ | 对偶变量: y i ≤ 0 y_i \le 0 yi≤0 |
约束条件: = = = | 对偶变量: y i y_i yi为自由变量 |
右端常数与目标系数互换 | 右端常数与目标系数互换 |
对偶问题可以用对偶单纯形法求解:
分支定界(branch and bound)
分支定界是一种搜索与迭代的方法,也被称作部分枚举或隐枚举法。其主要思想是在松弛问题的可行域中寻找使目标函数值达到最优的整数解。具体来说,把全部可行解空间反复地分割为越来越小的子集称为分支;并且对每个子集内的解集计算一个目标下界(对于最小化问题),称为定界;在每次分支后,凡是界限超出已知最好可行解目标值的那些子集将不再进一步分支,因此许多子集可不予考虑,称为剪枝。
分支定界的步骤
考虑如下一个整数规划:
m
a
x
z
=
8
x
1
+
11
x
2
+
6
x
3
+
4
x
4
max \ z=8x_1+11x_2+6x_3+4x_4
max z=8x1+11x2+6x3+4x4
s
.
t
.
s.t.
s.t.
5
x
1
+
7
x
2
+
4
x
3
+
3
x
4
≤
14
x
∈
{
0
,
1
}
4
5x_1+7x_2+4x_3+3x_4 \le 14\\ x\in \{0,1\}^4
5x1+7x2+4x3+3x4≤14x∈{0,1}4
-
松弛掉部分整数约束,令 x 1 = x 2 = 1 x_1=x_2=1 x1=x2=1,得到一个解 x = ( 1 , 1 , 0.5 , 0 ) x=(1,1,0.5,0) x=(1,1,0.5,0)
-
将 x 3 x_3 x3作为分支的对象,分出 x 3 = 0 x_3=0 x3=0和 x 3 = 1 x_3=1 x3=1两支
-
分别得出两个解 x = ( 1 , 1 , 0 , 0667 ) , z = 21.65 x=(1,1,0,0667),z=21.65 x=(1,1,0,0667),z=21.65和 x = ( 1 , 0.714 , 1 , 0 ) , z = 21.85 x=(1,0.714,1,0),z=21.85 x=(1,0.714,1,0),z=21.85,所以可以看出,最优值一定是小于 21.85 21.85 21.85的。
-
因为是求最大化问题,所以先选择 x = ( 1 , 0.714 , 1 , 0 ) , z = 21.85 x=(1,0.714,1,0),z=21.85 x=(1,0.714,1,0),z=21.85这一支继续分支
-
得到新的两个解 x = ( 1 , 0 , 1 , 1 ) , z = 18 x=(1,0,1,1),z=18 x=(1,0,1,1),z=18和 x = ( 0.6 , 1 , 1 , 0 ) , z = 21.8 x=(0.6,1,1,0),z=21.8 x=(0.6,1,1,0),z=21.8,得到一个整数解 x = ( 1 , 0 , 1 , 1 ) , z = 18 x=(1,0,1,1),z=18 x=(1,0,1,1),z=18,将这个解记录下来作为新的下界,并对 x = ( 0.6 , 1 , 1 , 0 ) , z = 21.8 x=(0.6,1,1,0),z=21.8 x=(0.6,1,1,0),z=21.8继续分支
-
得到两个新的解 x = ( 0 , 1 , 1 , 1 ) , z = 21 x=(0,1,1,1),z=21 x=(0,1,1,1),z=21和 x = ( 1 , 1 , 1 , − 0.667 ) , i n f e a s i b l e x=(1,1,1,-0.667),infeasible x=(1,1,1,−0.667),infeasible,因此将 x = ( 0 , 1 , 1 , 1 ) , z = 21 x=(0,1,1,1),z=21 x=(0,1,1,1),z=21作为新的最优解,并终止这一支的迭代
-
考虑最初没有选择的那一支, x = ( 1 , 1 , 0 , 0667 ) , z = 21.65 x=(1,1,0,0667),z=21.65 x=(1,1,0,0667),z=21.65,这说明这一支即使进行分支,得到的解也不会大于 21 21 21,因此可以不予考虑,即剪枝
-
因此, x = ( 0 , 1 , 1 , 1 ) , z = 21 x=(0,1,1,1),z=21 x=(0,1,1,1),z=21即为最优解
分枝定界的原则
在首次分支时,如果有多个分数变量,一般选择分数离整数点最远的点进行分支,例如
5.59
5.59
5.59比
5.7
5.7
5.7离整数点更远,因为这样会使分支后的结果与分支前的结果相差更大,有利于更快地进行剪枝。
选枝的准则一般有最优值优先、深度优先(更快地找到可行解),混合方法(先深度优先后最优值优先)。