你怎么不牵我!
# 线性规划问题 (Linear Programming, LP
)
线性规划问题的规范形式 :
{ m i n c T x s . t . Ax ≥ b x ≥ 0 \begin{cases}
min & \textbf{c}^T\textbf{x}\\
s.t. & \textbf{Ax}\geq\textbf{b}\\
& \textbf{x}\geq\textbf{0}
\end{cases}
⎩ ⎪ ⎪ ⎨ ⎪ ⎪ ⎧ m i n s . t . c T x Ax ≥ b x ≥ 0
线性规划问题的标准形式 :
{ m i n c T x s . t . Ax = b x ≥ 0 \begin{cases}
min & \textbf{c}^T\textbf{x}\\
s.t. & \textbf{Ax}=\textbf{b}\\
& \textbf{x}\geq\textbf{0}
\end{cases}
⎩ ⎪ ⎪ ⎨ ⎪ ⎪ ⎧ m i n s . t . c T x Ax = b x ≥ 0
上述两种形式可以相互转化。譬如x 1 + x 2 ≥ 3 x_1+x_2\geq 3 x 1 + x 2 ≥ 3 可以通过引入一个新的非负变量x 3 ≥ 0 x_3\geq 0 x 3 ≥ 0 使得变为x 1 + x 2 − x 3 = 3 x_1+x_2-x_3= 3 x 1 + x 2 − x 3 = 3 。
我们考虑标准形式的 LP,假设r a n k ( A ) = m rank(A)=m r a n k ( A ) = m (A A A 是m × n m\times n m × n 的),故A A A 中有m m m 个线性无关的列向量,它们构成了满秩方阵B m × m B_{m\times m} B m × m 。再把A A A 中其余各列
组成的子阵记为N N N ,即A = ( B , N ) A=(B,N) A = ( B , N ) ,再把x = ( x 1 , x 2 , . . . , x n ) T \textbf{x}=(x_1,x_2,...,x_n)^T x = ( x 1 , x 2 , . . . , x n ) T 分为两部分:记为x B \textbf{x}_B x B 和x N \textbf{x}_N x N ,则有:
B x B + N x N = b B\textbf{x}_B+N\textbf{x}_N=\textbf{b}
B x B + N x N = b
可以解得
x B = B − 1 b − B − 1 N x N \textbf{x}_B=B^{-1}\textbf{b}-B^{-1}N\textbf{x}_N
x B = B − 1 b − B − 1 N x N
那么我们可以把x N \textbf{x}_N x N 当作是自由变量,可以取任意值x ˉ N \bar{\textbf{x}}_N x ˉ N ,然后代入得到x ˉ B \bar{\textbf{x}}_B x ˉ B 后就得到了原方程的一组解。
定义 :设B B B 是秩为m m m 的约束矩阵A ∈ R m × n A\in R^{m\times n} A ∈ R m × n 中的一个m m m 阶满秩方阵,则称B B B 为一个基(或基阵) 。B B B 中m m m 个线性无关的列向量称为基向量 ,变量x \textbf{x} x 中与之对应的m m m 个分量称为基变量 ,其余分量称为非基变量 。令所有非基变量为 0,得到的解x = ( x B x N ) = ( B − 1 b 0 ) \textbf{x}=\begin{pmatrix}\textbf{x}_B\\ \textbf{x}_N\end{pmatrix}=\begin{pmatrix}B^{-1}\textbf{b}\\0\end{pmatrix} x = ( x B x N ) = ( B − 1 b 0 ) 称为相对B B B 的基本解 ,当B − 1 b ≥ 0 B^{-1}\textbf{b}\geq 0 B − 1 b ≥ 0 时,称基本解x \textbf{x} x 为基本可行解 ,这时对应的基B B B 称为可行基 。
定理 :可行解x \textbf{x} x 是基本可行解,当且仅当它的正的分量对应的A A A 中的列向量线性无关。
证明:若x \textbf{x} x 是基本可行解,那么它只有非负分量而且对应的向量为基向量,故线性无关。
反之,由于x \textbf{x} x 是可行解,故有x ≥ 0 \textbf{x}\geq 0 x ≥ 0 且A x = b A\textbf{x}=\textbf{b} A x = b 。不失一般性假设x \textbf{x} x 的前k k k 个分量为正:
x = ( x ˉ 1 , x ˉ 2 , . . . , x ˉ k , 0 , . . . , 0 ) T x i ˉ > 0 , i = 1 , . . . , k \textbf{x}=(\bar{x}_1,\bar{x}_2,...,\bar{x}_k,0,...,0)^T\\
\bar{x_i}>0,i=1,...,k
x = ( x ˉ 1 , x ˉ 2 , . . . , x ˉ k , 0 , . . . , 0 ) T x i ˉ > 0 , i = 1 , . . . , k
那么显然有k ≤ m k\leq m k ≤ m ,可以讨论:
若k = m k=m k = m ,则自然x \textbf{x} x 就是对应于B = ( a 1 , a 2 , . . . , a k ) B=(a_1,a_2,...,a_k) B = ( a 1 , a 2 , . . . , a k ) 的一个基本可行解,其中a i a_i a i 就是分量x ˉ i \bar{x}_i x ˉ i 对应的A A A 中的列向量。
若k < m k<m k < m ,此时需要人为再添加几个列向量。因为r a n k ( A ) = m rank(A)=m r a n k ( A ) = m ,那么A A A 中至少有m m m 个线性无关的列向量,故可以从A A A 中选取m − k m-k m − k 个线性无关的列向量,与之前的k k k 个列向量组成了B B B 。此时,x B = ( x ˉ 1 , . . . , x ˉ k , 0 , . . . , 0 ) T \textbf{x}_B=(\bar{x}_1,...,\bar{x}_k,0,...,0)^T x B = ( x ˉ 1 , . . . , x ˉ k , 0 , . . . , 0 ) T 是基本可行解。
对于一个基本可行解x ˉ \bar{\textbf{x}} x ˉ ,如果它的所有基分量都取正值,那么称它为非退化的 ,否则如果有的基分量是 0,就称它为退化的 。
一个可行基对应一个基本可行解,反之若一个基本可行解是非退化的,那么也唯一对应着一个可行基。
一般地说,如果一个基本可行解是退化的,那么它可由不止一个可行基得到。一个标准形式的 LP
问题最多有( n m ) \begin{pmatrix}n\\m\end{pmatrix} ( n m ) 个可行基,从而基本可行解的个数不会超过( n m ) \begin{pmatrix}n\\m\end{pmatrix} ( n m ) 个,解集空间的凸多面体顶点数也不超过( n m ) \begin{pmatrix}n\\m\end{pmatrix} ( n m ) 个。一个 LP
问题,如果它的所有基本可行解都是非退化的,就说该问题是非退化的,否则称之为退化的。
定理 :一个标准形式的 LP
问题若有可行解,则至少有一个基本可行解。
证:设x 0 = ( x 1 0 , . . . , x n 0 ) T \textbf{x}^0=(x_1^0,...,x_n^0)^T x 0 = ( x 1 0 , . . . , x n 0 ) T 是一个可行解,则有A x 0 = b , x 0 ≥ 0 A\textbf{x}_0=\textbf{b},\textbf{x}^0\geq 0 A x 0 = b , x 0 ≥ 0 。不失一般性,设x 0 \textbf{x}^0 x 0 的正分量为前k k k 个。如果它们对应的A A A 中的列向量A 1 , . . . , A k A_1,...,A_k A 1 , . . . , A k 已经线性无关了,则根据前述定理,x 0 \textbf{x}^0 x 0 已经是一个基本可行解了。
否则,若不线性无关,那么存在不全为零的数δ j , j = 1 , . . . , k \delta_j,j=1,...,k δ j , j = 1 , . . . , k 使得:
∑ j = 1 k δ j A j = 0 \sum_{j=1}^k\delta_jA_j=\textbf{0}
j = 1 ∑ k δ j A j = 0
令δ j = 0 , j = k + 1 , . . . , n \delta_j=0,j=k+1,...,n δ j = 0 , j = k + 1 , . . . , n 得到向量δ = ( δ 1 , . . . , δ k , 0 , . . . , 0 ) T \delta=(\delta_1,...,\delta_k,0,...,0)^T δ = ( δ 1 , . . . , δ k , 0 , . . . , 0 ) T , 故有:
A δ = 0 A\delta=\textbf{0}
A δ = 0
由于x j 0 > 0 , j = 1 , . . . , k x_j^0>0,j=1,...,k x j 0 > 0 , j = 1 , . . . , k ,故可以选择一个足够小的正数ε \varepsilon ε 使得:
x 0 ± ε δ ≥ 0 \textbf{x}^0\pm\varepsilon\delta\geq 0
x 0 ± ε δ ≥ 0
故有
A ( x 0 ± ε δ ) = A x 0 + ε A δ = b A(\textbf{x}^0\pm\varepsilon\delta)=A\textbf{x}^0+\varepsilon A\delta=\textbf{b}
A ( x 0 ± ε δ ) = A x 0 + ε A δ = b
而我们可以通过选择ε \varepsilon ε ,使得x 0 + ε δ \textbf{x}^0+\varepsilon\delta x 0 + ε δ 和x 0 − ε δ \textbf{x}^0-\varepsilon\delta x 0 − ε δ 中,有一个可以比x 0 \textbf{x}^0 x 0 的非零分量少一个。故一旦正分量对应的A A A 中列向量不线性无关,我们就可以重复这个过程,直到非零分量剩下一个时就肯定是线性无关的了(或在某一次操作后就线性无关了)。证毕。
定理 :一个标准形式的 LP
问题若有有限的最优值,则一定存在一个基本可行解是最优解。
证:设x 0 \textbf{x}^0 x 0 是一个最优解,则可以根据上个证明中的过程构造出两个可行解,并且它们的目标函数值为:
c T ( x 0 − ε δ ) = c T x 0 − ε c T δ c T ( x 0 + ε δ ) = c T x 0 + ε c T δ \textbf{c}^T(\textbf{x}^0-\varepsilon\delta)=\textbf{c}^T\textbf{x}^0-\varepsilon\textbf{c}^T\delta\\
\textbf{c}^T(\textbf{x}^0+\varepsilon\delta)=\textbf{c}^T\textbf{x}^0+\varepsilon\textbf{c}^T\delta
c T ( x 0 − ε δ ) = c T x 0 − ε c T δ c T ( x 0 + ε δ ) = c T x 0 + ε c T δ
因为c T x 0 \textbf{c}^T\textbf{x}^0 c T x 0 是最优解,故有:
c T ( x 0 ± ε δ ) ≥ c T x 0 \textbf{c}^T(\textbf{x}^0\pm\varepsilon\delta)\geq\textbf{c}^T\textbf{x}^0\\
c T ( x 0 ± ε δ ) ≥ c T x 0
即ε c T δ = 0 \varepsilon\textbf{c}^T\delta=0 ε c T δ = 0 ,故得到的两个新的可行解x 0 ± ε δ \textbf{x}^0\pm\varepsilon\delta x 0 ± ε δ 的目标函数值也是最优的。同理可以取ε \varepsilon ε 使得其中非零分量减少一个,重复操作直到其成为一个基本可行解。证毕。
# LP
问题的单纯形法
既然在上一部分已经证明了最优解都可以转化为基本可行解,故我们只需要讨论基本可行解就足够了,不会漏掉最优情况。
这里有两个问题需要解决:一是如何找到一个基本可行解,二是如何判断基本可行解是否最优了,以及如何迭代转化基本可行解。前一个问题留在下一章解决。
假设已经找到了一个非退化的基本可行解x ˉ \bar{\textbf{x}} x ˉ ,即找到了一个基B B B ,此时可以将方程组A x = b A\textbf{x}=\textbf{b} A x = b 转化为与之等价的方程组:
x B + B − 1 N x N = B − 1 b \textbf{x}_B+B^{-1}N\textbf{x}_N=B^{-1}\textbf{b}
x B + B − 1 N x N = B − 1 b
不失一般性假定B = ( A 1 , . . . , A m ) B=(A_1,...,A_m) B = ( A 1 , . . . , A m ) ,记向量:
A j ˉ = B − 1 A j b ˉ = B − 1 b \bar{A_j}=B^{-1}A_j\\
\bar{\textbf{b}}=B^{-1}\textbf{b}
A j ˉ = B − 1 A j b ˉ = B − 1 b
则可以把方程组转化为:
x B + B − 1 N x N = b ˉ \textbf{x}_B+B^{-1}N\textbf{x}_N=\bar{\textbf{b}}
x B + B − 1 N x N = b ˉ
这个方程组被称为对应于基B B B 的典则方程组 ,简称典式 。
相应的,可以改写目标函数值为:
c T x = c B T x B + c N T x N = c B T ( b ˉ − B − 1 N x N ) + c N T x N = c B T b ˉ − ∑ j = m + 1 n ( c B T A ˉ j − c j ) x j \begin{aligned}
\textbf{c}^T\textbf{x} &=\textbf{c}_B^T\textbf{x}_B+\textbf{c}_N^T\textbf{x}_N\\
&=\textbf{c}_B^T(\bar{\textbf{b}}-B^{-1}N\textbf{x}_N)+\textbf{c}_N^T\textbf{x}_N\\
&=\textbf{c}_B^T\bar{\textbf{b}}-\sum_{j=m+1}^n(\textbf{c}_B^T\bar{A}_j-c_j)x_j
\end{aligned}
c T x = c B T x B + c N T x N = c B T ( b ˉ − B − 1 N x N ) + c N T x N = c B T b ˉ − j = m + 1 ∑ n ( c B T A ˉ j − c j ) x j
其中不失一般性地假设了x \textbf{x} x 的前m m m 个分量对应x B \textbf{x}_B x B ,后n − m n-m n − m 个分量对应了x N \textbf{x}_N x N 。可以注意到:
( A ˉ 1 , . . . , A ˉ m ) = B − 1 ( A 1 , . . . , A m ) = B − 1 B = I (\bar{A}_1,...,\bar{A}_m)=B^{-1}(A_1,...,A_m)=B^{-1}B=I
( A ˉ 1 , . . . , A ˉ m ) = B − 1 ( A 1 , . . . , A m ) = B − 1 B = I
故A ˉ i \bar{A}_i A ˉ i 其实就是一个只有第i i i 个分量为 1,其他分量都为 0 的列向量。故有:
c B T A ˉ j − c j = 0 , j = 1 , . . . , m \textbf{c}_B^T\bar{A}_j-c_j=0,j=1,...,m
c B T A ˉ j − c j = 0 , j = 1 , . . . , m
引入记号:
ζ j = c B T A ˉ j − c j , j = 1 , . . . , n \zeta_j=\textbf{c}_B^T\bar{A}_j-c_j,j=1,...,n
ζ j = c B T A ˉ j − c j , j = 1 , . . . , n
向量表示为:
ζ T = c B T B − 1 A − c T = ( ζ B , ζ N ) T = ( 0 , ζ N ) T \zeta^T=\textbf{c}_B^TB^{-1}A-\textbf{c}^T=(\zeta_B,\zeta_N)^T\\
=(0,\zeta_N)^T
ζ T = c B T B − 1 A − c T = ( ζ B , ζ N ) T = ( 0 , ζ N ) T
从而目标函数值为:
c T x = c B T b ˉ − ζ T x \textbf{c}^T\textbf{x}=\textbf{c}_B^T\bar{\textbf{b}}-\zeta^T\textbf{x}
c T x = c B T b ˉ − ζ T x
定理 (最优性准则) :如果ζ ≤ 0 \zeta\leq 0 ζ ≤ 0 ,则x ˉ = ( b ˉ 0 ) \bar{\textbf{x}}=\begin{pmatrix}\bar{\textbf{b}}\\0\end{pmatrix} x ˉ = ( b ˉ 0 ) 是原问题的最优解。
证:对于任意一个可行解x \textbf{x} x ,一定有x ≥ 0 \textbf{x}\geq 0 x ≥ 0 ,那么就有:
c T x ˉ = c B T b ˉ ≤ c B T b ˉ − ζ T x = c T x \textbf{c}^T\bar{\textbf{x}}=\textbf{c}_B^T\bar{\textbf{b}}\leq\textbf{c}_B^T\bar{\textbf{b}}-\zeta^T\textbf{x}=\textbf{c}^T\textbf{x}
c T x ˉ = c B T b ˉ ≤ c B T b ˉ − ζ T x = c T x
定理 :如果向量ζ \zeta ζ 的第k k k 个分量ζ k > 0 \zeta_k>0 ζ k > 0 (显然m + 1 ≤ k ≤ n m+1\leq k\leq n m + 1 ≤ k ≤ n ),且向量A ˉ k = B − 1 A k ≤ 0 \bar{A}_k=B^{-1}A_k\leq 0 A ˉ k = B − 1 A k ≤ 0 ,则原问题无界。
证:令d = ( − A ˉ k 0 ) + e k \textbf{d}=\begin{pmatrix}-\bar{A}_k\\0\end{pmatrix}+e_k d = ( − A ˉ k 0 ) + e k ,其中e k e_k e k 是第k k k 个分量为 1,其余分量为 0 的列向量。
因为A ˉ k ≤ 0 \bar{A}_k\leq 0 A ˉ k ≤ 0 ,所以有d ≥ 0 \textbf{d}\geq 0 d ≥ 0 。而:
A d = ( B , N ) ( − A ˉ k 0 ) + A e k = − A k + A k = 0 \begin{aligned}
A\textbf{d} &=(B,N)\begin{pmatrix}-\bar{A}_k\\0\end{pmatrix}+Ae_k\\
&=-A_k+A_k\\
&=\textbf{0}
\end{aligned}
A d = ( B , N ) ( − A ˉ k 0 ) + A e k = − A k + A k = 0
对于充分大的数θ \theta θ ,观察x ˉ + θ d \bar{\textbf{x}}+\theta\textbf{d} x ˉ + θ d ,此时有:
A ( x ˉ + θ d ) = A x ˉ + θ A d = b x ˉ + θ d ≥ 0 A(\bar{\textbf{x}}+\theta\textbf{d})=A\bar{\textbf{x}}+\theta A\textbf{d}=\textbf{b}\\
\bar{\textbf{x}}+\theta\textbf{d}\geq 0
A ( x ˉ + θ d ) = A x ˉ + θ A d = b x ˉ + θ d ≥ 0
所以x ˉ + θ d \bar{\textbf{x}}+\theta\textbf{d} x ˉ + θ d 是原问题的可行解,那么目标函数值为:
c T ( x ˉ + θ d ) = c T x ˉ + θ ( c B T , c N T ) ( − A ˉ k 0 ) + θ c T e k = c T x ˉ − θ ( c B T A ˉ k − c k ) = c T x ˉ − θ ζ k \begin{aligned}
\textbf{c}^T(\bar{\textbf{x}}+\theta\textbf{d})&=\textbf{c}^T\bar{\textbf{x}}+\theta(\textbf{c}_B^T,\textbf{c}_N^T)\begin{pmatrix}
-\bar{A}_k\\
0
\end{pmatrix}+\theta\textbf{c}^Te_k\\
&=\textbf{c}^T\bar{\textbf{x}}-\theta(\textbf{c}_B^T\bar{A}_k-c_k)\\
&=\textbf{c}^T\bar{\textbf{x}}-\theta\zeta_k
\end{aligned}
c T ( x ˉ + θ d ) = c T x ˉ + θ ( c B T , c N T ) ( − A ˉ k 0 ) + θ c T e k = c T x ˉ − θ ( c B T A ˉ k − c k ) = c T x ˉ − θ ζ k
又因为ζ k > 0 \zeta_k>0 ζ k > 0 ,故可以无限大地选择θ \theta θ ,使得目标函数无限小,故无界,证毕。
定理 :对于非退化的基本可行解x ˉ \bar{\textbf{x}} x ˉ ,若有ζ \zeta ζ 中有任一分量ζ k > 0 \zeta_k>0 ζ k > 0 ,且其对应的列向量A ˉ k \bar{A}_k A ˉ k 至少有一个正分量,则能找到一个新的基本可行解x ^ \hat{\textbf{x}} x ^ ,使得c T x ^ < c T x ˉ \textbf{c}^T\hat{\textbf{x}}<\textbf{c}^T\bar{\textbf{x}} c T x ^ < c T x ˉ 。
证:只需要找出x ^ \hat{\textbf{x}} x ^ 是什么。
类似前述证明,令
d = ( − A ˉ k 0 ) + e k \textbf{d}=\begin{pmatrix}-\bar{A}_k\\0\end{pmatrix}+e_k
d = ( − A ˉ k 0 ) + e k
则有A d = 0 A\textbf{d}=\textbf{0} A d = 0 。令:
x ^ = x ˉ + θ d = ( b ˉ − θ A ˉ k 0 ) + θ e k \hat{\textbf{x}}=\bar{\textbf{x}}+\theta\textbf{d}=\begin{pmatrix}\bar{\textbf{b}}-\theta\bar{A}_k\\0\end{pmatrix}+\theta e_k
x ^ = x ˉ + θ d = ( b ˉ − θ A ˉ k 0 ) + θ e k
我们选取合适的θ \theta θ 。首先为了x ^ ≥ 0 \hat{\textbf{x}}\geq 0 x ^ ≥ 0 , 可以选
θ = m i n { b ˉ i a ˉ i k ∣ a ˉ i k > 0 , i = 1 , . . . , m } = b ˉ r a ˉ r k \theta=min\{\frac{\bar{b}_i}{\bar{a}_{ik}}|\bar{a}_{ik}>0,i=1,...,m\}\\
=\frac{\bar{b}_r}{\bar{a}_{rk}}
θ = m i n { a ˉ i k b ˉ i ∣ a ˉ i k > 0 , i = 1 , . . . , m } = a ˉ r k b ˉ r
从而类似前述证明,x ^ \hat{\textbf{x}} x ^ 是一个可行解。
先考虑x ^ \hat{\textbf{x}} x ^ 的各个分量:
x ^ i = b ˉ i − b ˉ r a ˉ r k a ˉ i k , i = 1 , . . . , m , i ≠ r x ^ r = 0 x ^ k = θ = b ˉ r a ˉ r k x ^ j = 0 , j = 1 , . . . , n , j ≠ k \begin{aligned}
& \hat{x}_i=\bar{b}_i-\frac{\bar{b}_r}{\bar{a}_{rk}}\bar{a}_{ik},i=1,...,m,i\neq r\\
& \hat{x}_r=0\\
& \hat{x}_k=\theta=\frac{\bar{b}_r}{\bar{a}_{rk}}\\
& \hat{x}_j=0,j=1,...,n,j\neq k
\end{aligned}
x ^ i = b ˉ i − a ˉ r k b ˉ r a ˉ i k , i = 1 , . . . , m , i = r x ^ r = 0 x ^ k = θ = a ˉ r k b ˉ r x ^ j = 0 , j = 1 , . . . , n , j = k
为证明其是一个基本解,则需要证明
A 1 , . . . , A r − 1 , A k , A r + 1 , . . . , A m A_1,...,A_{r-1},A_k,A_{r+1},...,A_m
A 1 , . . . , A r − 1 , A k , A r + 1 , . . . , A m
是线性无关的。(即把第r r r 个分量换出去,把第k k k 个换进来)。
反设不是线性无关的,由于先前的A 1 , . . . , A r , . . . , A m A_1,...,A_r,...,A_m A 1 , . . . , A r , . . . , A m 是线性无关的,那么就会有:
A k = ∑ i = 1 , i ≠ r m y i A i A_k=\sum_{i=1,i\neq r}^my_iA_i
A k = i = 1 , i = r ∑ m y i A i
同时有:
A k = B A ˉ k = ∑ i = 1 m a ˉ i k A i A_k=B\bar{A}_k=\sum_{i=1}^m\bar{a}_{ik}A_i
A k = B A ˉ k = i = 1 ∑ m a ˉ i k A i
将上述两式相减可得:
a ˉ r k A r + ∑ i = 1 , i ≠ r m ( a ˉ i k − y i ) A i = 0 \bar{a}_{rk}A_r+\sum_{i=1,i\neq r}^m(\bar{a}_{ik}-y_i)A_i=0
a ˉ r k A r + i = 1 , i = r ∑ m ( a ˉ i k − y i ) A i = 0
已知有a ˉ r k > 0 \bar{a}_{rk}> 0 a ˉ r k > 0 ,故与 “A 1 , . . . , A r , . . . , A m A_1,...,A_r,...,A_m A 1 , . . . , A r , . . . , A m 线性独立” 矛盾了。
最后,由非退化假设b ˉ > 0 \bar{b}>0 b ˉ > 0 ,因而θ > 0 \theta>0 θ > 0 ,故:
c T x ^ = c T x ˉ − θ ζ k < c T x ˉ \textbf{c}^T\hat{\textbf{x}}=\textbf{c}^T\bar{\textbf{x}}-\theta\zeta_k<\textbf{c}^T\bar{\textbf{x}}
c T x ^ = c T x ˉ − θ ζ k < c T x ˉ
证毕。
由以上定理我们知道相应于基本可行解x ˉ \bar{\textbf{x}} x ˉ 的向量ζ T = c B T B − 1 A − c T \zeta^T=\textbf{c}_B^TB^{-1}A-\textbf{c}^T ζ T = c B T B − 1 A − c T 有重要的作用,我们称他为基本可行解x ˉ \bar{\textbf{x}} x ˉ 的检验数向量 ,它的各个分量称为检验数 。
上述定理给了一个从一个基本可行解x ˉ \bar{\textbf{x}} x ˉ 变成一个更好的的基本可行解x ^ \hat{\textbf{x}} x ^ 的办法,即用x k x_k x k 代替原来的基变量x r x_r x r 成为新的基。
定理 :对于任何一个非退化的线性规划问题,从任何基本解开始,经过有限次换基迭代,或得到一个最优的基本可行解,或作出该问题无界的判定。
当线性规划原问题是退化问题时,由线性规划问题的几何解释可知,通过该可行域某个极点的超平面超过 n 个,所以该点为一个退化的极点。根据摄动法原理,可在退化问题约束方程的右边项做微小的扰动,使得超平面有一个微小的位移,原来相交于一点的若干个超平面略微错开一些,退化极点变成不退化极点。决策者可根据问题的实际情况,适当增加或减少某些资源的数量,使得其迭代变为非退化的,以得到问题的最优解。
单纯形法步骤:
找一个初始的可行基B B B 。
求出对应的典式及检验数向量ζ \zeta ζ 。
求ζ k = m a x { ζ j ∣ j = 1 , . . . , n } \zeta_k=max\{\zeta_j|j=1,...,n\} ζ k = m a x { ζ j ∣ j = 1 , . . . , n } 。
若ζ k ≤ 0 \zeta_k\leq 0 ζ k ≤ 0 ,则停止迭代,得到最优解x = ( x B x N ) = ( b ˉ 0 ) \textbf{x}=\begin{pmatrix}\textbf{x}_B\\ \textbf{x}_N\end{pmatrix}=\begin{pmatrix}\bar{\textbf{b}}\\0\end{pmatrix} x = ( x B x N ) = ( b ˉ 0 ) 。
若A ˉ k ≤ 0 \bar{A}_k\leq 0 A ˉ k ≤ 0 则停止,原问题无界。
求b ˉ r a ˉ r k = m i n { b ˉ i a ˉ i k ∣ a ˉ i k > 0 , i = 1 , . . . , m } \frac{\bar{b}_r}{\bar{a}_{rk}}=min\{\frac{\bar{b}_i}{\bar{a}_{ik}}\;|\;\bar{a}_{ik}>0,i=1,...,m\} a ˉ r k b ˉ r = m i n { a ˉ i k b ˉ i ∣ a ˉ i k > 0 , i = 1 , . . . , m } 。
用A k A_k A k 代替A B r A_{B_r} A B r ,得到新的基转第二步。
# LP
问题的初始解
不失一般性,可以在方程左右乘以 (-1) 使得b ≥ 0 \textbf{b}\geq 0 b ≥ 0 ,设原问题为:
{ m i n z = c T x s . t . A x = b ( b ≥ 0 ) x ≥ 0 \begin{cases}
min\; &z=\textbf{c}^T\textbf{x}\\
s.t. & A\textbf{x}=\textbf{b}\quad(\textbf{b}\geq 0)\\
& \textbf{x} \geq 0
\end{cases}
⎩ ⎪ ⎪ ⎨ ⎪ ⎪ ⎧ m i n s . t . z = c T x A x = b ( b ≥ 0 ) x ≥ 0
我们要找一个初始的基本可行解,一个很自然的想法就是为啥不直接对( A , b ) (A,\textbf{b}) ( A , b ) 行变换,然后行变换出来一个单位矩阵后,就得到了一个基本可行解。但实际上无法确认究竟行变换后b \textbf{b} b 是否能保证不为负数。譬如我不能先入为主就认为x 1 , x 2 , x 3 ≠ 0 , x 4 , x 5 = 0 x_1,x_2,x_3\neq 0,x_4,x_5=0 x 1 , x 2 , x 3 = 0 , x 4 , x 5 = 0 是一组可行解,很可能做完行变换后b \textbf{b} b 就不是非负的了。
为了解决 "得到一个初始的基本可行解" 这个问题,我们引入m m m 个人工变量:
x α = ( x n + 1 , . . . , x n + m ) T \textbf{x}_\alpha=(x_{n+1},...,x_{n+m})^T
x α = ( x n + 1 , . . . , x n + m ) T
并研究以下 LP
问题:
{ m i n g = ∑ i = n + 1 n + m x i s . t . A x + x α = b x ≥ 0 , x α ≥ 0 \begin{cases}
min\; & g=\sum_{i=n+1}^{n+m}x_i\\
s.t. & A\textbf{x}+\textbf{x}_\alpha=\textbf{b}\\
& \textbf{x}\geq 0,\quad\textbf{x}_\alpha\geq 0
\end{cases}
⎩ ⎪ ⎪ ⎨ ⎪ ⎪ ⎧ m i n s . t . g = ∑ i = n + 1 n + m x i A x + x α = b x ≥ 0 , x α ≥ 0
不难发现,原问题有可行解当且仅当上述 LP
问题有最优解g = 0 g=0 g = 0 。此时即x α = 0 \textbf{x}_\alpha=0 x α = 0 。
而上述 LP
问题已经有了一个天然的初始基本可行解,即后m m m 个变量。
但是有一种情况就是有最优解g = 0 g=0 g = 0 ,人工添加的x α = 0 \textbf{x}_\alpha=0 x α = 0 ,但是某个人工添加的变量x n + i x_{n+i} x n + i 取值为 0,但却是基变量。
此时会发现有一行(即x n + i x_{n+i} x n + i 对应的那一行)有b ˉ i = 0 \bar{b}_i=0 b ˉ i = 0 ,因为那一行的基变量的系数只有x n + i x_{n+i} x n + i 是 1,其他基变量的系数都是 0。
而不是基变量的变量取值是 0,又因为最优解下x n + i x_{n+i} x n + i 取值也是 0,故那一行结果b ˉ i = 0 \bar{b}_i=0 b ˉ i = 0 。
这样的话,我们就可以考虑那一行中,如果x 1 , . . . , x n x_1,...,x_n x 1 , . . . , x n 中有系数不是 0 的,就把他换进基,把x n + i x_{n+i} x n + i 换出去。因为b ˉ i = 0 \bar{b}_i=0 b ˉ i = 0 ,可以证明这样的换基是不改变目标函数的。
如果全是 0,说明原线性约束亏秩,可以直接把这一行删除掉,是无用约束。
# LP
问题的对偶性
定义 :一个规范形式的 LP
问题:
{ m i n c T x s . t . A x ≥ b x ≥ 0 \begin{cases}
min\; & \textbf{c}^T\textbf{x}\\
s.t. & A\textbf{x}\geq \textbf{b}\\
& \textbf{x}\geq 0
\end{cases}
⎩ ⎪ ⎪ ⎨ ⎪ ⎪ ⎧ m i n s . t . c T x A x ≥ b x ≥ 0
它的对偶问题 为:
{ m a x b T y s . t . A T y ≤ c y ≥ 0 \begin{cases}
max\; & \textbf{b}^T\textbf{y}\\
s.t. & A^T\textbf{y}\leq \textbf{c}\\
& \textbf{y}\geq 0
\end{cases}
⎩ ⎪ ⎪ ⎨ ⎪ ⎪ ⎧ m a x s . t . b T y A T y ≤ c y ≥ 0
当一个 LP
问题为标准形式:
{ m i n c T x s . t . A x = b x ≥ 0 \begin{cases}
min\; & \textbf{c}^T\textbf{x}\\
s.t. & A\textbf{x}= \textbf{b}\\
& \textbf{x}\geq 0
\end{cases}
⎩ ⎪ ⎪ ⎨ ⎪ ⎪ ⎧ m i n s . t . c T x A x = b x ≥ 0
它的对偶问题 为:
{ m a x b T y s . t . A T y ≤ c \begin{cases}
max\; & \textbf{b}^T\textbf{y}\\
s.t. & A^T\textbf{y}\leq \textbf{c}\\
\end{cases}
{ m a x s . t . b T y A T y ≤ c
对偶问题其实有很直观的理解。考虑如下一个例子:
{ m i n 2 x 1 + 3 x 2 s . t . x 1 + x 2 ≥ 1 x 2 ≥ 2 x 1 , x 2 ≥ 0 \begin{cases}
min\;& 2x_1+3x_2\\
s.t. & x_1+x_2\geq 1\\
& x_2\geq 2\\
& x_1,x_2\geq 0
\end{cases}
⎩ ⎪ ⎪ ⎪ ⎪ ⎨ ⎪ ⎪ ⎪ ⎪ ⎧ m i n s . t . 2 x 1 + 3 x 2 x 1 + x 2 ≥ 1 x 2 ≥ 2 x 1 , x 2 ≥ 0
我们很显然把第一个不等式乘以 2 加上第二个不等式就得到了2 x 1 + 3 x 2 ≥ 4 2x_1+3x_2\geq 4 2 x 1 + 3 x 2 ≥ 4 。
我们就得到了一个目标函数的一个下界,而这个下界是可能取不到的,譬如这个例子就是。
但是目标函数一定是大于等于这个下界的。
所以对偶问题实际上就是在寻找一个原问题的下界。
理解一下,A T y A^T\textbf{y} A T y 就是把各个不等式加权加起来,而且要求结果是小于等于c \textbf{c} c 的就表示加起来后,右边大于等于的东西要严格小于等于目标函数值。然后b T y \textbf{b}^T\textbf{y} b T y 就是加权后右边大于等于的东西,他一定是目标函数的下界。而取 max 实际上就是取下界中最大的一个。
定理 :如果一个 LP
问题有最优解,那么它的对偶问题也有最优解,且它们最优解相等。
证:考虑标准形式的 LP 问题和其对偶问题,对于任意的可行解x , y \textbf{x},\textbf{y} x , y :
∵ A x = b ∴ y T A x = y T b ∵ A T y ≤ c , x ≥ 0 ∴ y T A x ≤ c T x ∴ y T b = y T A x ≤ c T x \begin{aligned}
& \because A\textbf{x}= b\\
& \therefore \textbf{y}^TA\textbf{x}=\textbf{y}^T\textbf{b}\\
& \because A^T\textbf{y}\leq \textbf{c},\;\textbf{x}\geq 0\\
& \therefore \textbf{y}^TA\textbf{x}\leq\textbf{c}^T\textbf{x}\\
& \therefore \textbf{y}^T\textbf{b}=\textbf{y}^T A\textbf{x}\leq\textbf{c}^T\textbf{x}\\
\end{aligned}
∵ A x = b ∴ y T A x = y T b ∵ A T y ≤ c , x ≥ 0 ∴ y T A x ≤ c T x ∴ y T b = y T A x ≤ c T x
证明了对偶问题的目标函数总是小于原目标函数的。
现假设原问题有了一个最优解为x ^ \hat{\textbf{x}} x ^ ,它对应的基为B ^ \hat{B} B ^ (即x ^ B = B ^ − 1 b \hat{\textbf{x}}_B=\hat{B}^{-1}\textbf{b} x ^ B = B ^ − 1 b ),那么y T = c B ^ T B ^ − 1 \textbf{y}^T=\textbf{c}_{\hat{B}}^T\hat{B}^{-1} y T = c B ^ T B ^ − 1 就是其对偶问题的一个可行解:
A T y − c = A T ( c B ^ T B ^ − 1 ) T − c = ζ ≤ 0 A^T\textbf{y}-\textbf{c}=A^T(\textbf{c}_{\hat{B}}^T\hat{B}^{-1})^T-\textbf{c}=\zeta\leq 0\\
A T y − c = A T ( c B ^ T B ^ − 1 ) T − c = ζ ≤ 0
此时它们的目标函数值相同:
y T b = c B ^ T B ^ − 1 b = c B ^ T x ^ B \textbf{y}^T\textbf{b}= \textbf{c}_{\hat{B}}^T\hat{B}^{-1}\textbf{b}=\textbf{c}_{\hat{B}}^T\hat{\textbf{x}}_B
y T b = c B ^ T B ^ − 1 b = c B ^ T x ^ B
故此时对偶问题一定是取到了可能的最上界,即为最优值。证毕。
定理 :若x , w \textbf{x},\textbf{w} x , w 分别是原问题及其对偶问题的可行解,那么它们分别是原问题、对偶问题的最优解的充要条件为c T x = w T b \textbf{c}^T\textbf{x}=\textbf{w}^T\textbf{b} c T x = w T b 。
其实原始的 LP
问题和其对偶问题只有以下几种解的情况:
两个问题都有最优解,且最优解相等。
一个问题无界,另一个问题无可行解。
两个问题都无可行解。
定理 (互补松紧性) :设x , w \textbf{x},\textbf{w} x , w 分别是原问题和对偶问题的可行解,那么它们分别是原问题、对偶问题的最优解的充要条件是:
y T ( A x − b ) = 0 x T ( c − A T y ) = 0 \textbf{y}^T(A\textbf{x}-\textbf{b})=0\\
\textbf{x}^T(\textbf{c}-A^T\textbf{y})=0
y T ( A x − b ) = 0 x T ( c − A T y ) = 0
证:考虑规范形式,就会有:
∵ x , y , ( A x − b ) , ( c − A T y ) ≥ 0 ∴ y T ( A x − b ) ≥ 0 , x T ( c − A T y ) ≥ 0 ∵ y T ( A x − b ) + x T ( c − A T y ) = x T c − y T b \begin{aligned}
& \because\textbf{x},\textbf{y},(A\textbf{x}-\textbf{b}),(\textbf{c}-A^T\textbf{y})\geq 0\\
& \therefore \textbf{y}^T(A\textbf{x}-\textbf{b})\geq 0,\textbf{x}^T(\textbf{c}-A^T\textbf{y})\geq 0\\
& \because\textbf{y}^T(A\textbf{x}-\textbf{b})+\textbf{x}^T(\textbf{c}-A^T\textbf{y})=\textbf{x}^T\textbf{c}-\textbf{y}^T\textbf{b}
\end{aligned}
∵ x , y , ( A x − b ) , ( c − A T y ) ≥ 0 ∴ y T ( A x − b ) ≥ 0 , x T ( c − A T y ) ≥ 0 ∵ y T ( A x − b ) + x T ( c − A T y ) = x T c − y T b
所以x T c = y T b ⇔ y T ( A x − b ) = 0 , x T ( c − A T y ) = 0 \textbf{x}^T\textbf{c}=\textbf{y}^T\textbf{b}\Leftrightarrow\textbf{y}^T(A\textbf{x}-\textbf{b})=0,\textbf{x}^T(\textbf{c}-A^T\textbf{y})=0 x T c = y T b ⇔ y T ( A x − b ) = 0 , x T ( c − A T y ) = 0 ,证毕。
# LP
问题的计算复杂度
苏联数学家 Khachian 于 1979 年提出椭球算法 理论上证明了 LP
是一个多项式可解问题 。
1984 年,N.Karmarkar 提出了 Karmarkar算法
。单纯形法是从可行域的一个顶点开始,沿着可行域的边从一个顶点转移到另一个顶点。但是 Karmarkar算法
却是从多面体内部一个点开始,产生一个直接穿过多面体内部的点列:
Karmarkar 证明了该算法迭代次数的上届是O ( n L ) O(nL) O ( n L ) 每次迭代的平均计算量为O ( n 2.5 ) O(n^{2.5}) O ( n 2 . 5 ) ,因而其算法的总的时间复杂度为O ( n 3.5 L ) O(n^{3.5}L) O ( n 3 . 5 L ) ,其中n n n 是维数,L L L 为输入规模。
之后也诞生了诸如仿射尺度法、路径追踪法等 LP
问题的解法,其中最好的时间复杂度在O ( n 3 L ) O(n^3L) O ( n 3 L ) 。已经在商业化软件中实现,但是内点法有一个固有弱点就是仅提供近似最优解。需另外加一个纯化的过程。
单纯形法有 “热启动” 的特性,即从最后求得的基再开始能大大缩短求解时间。
# 整数线性规划
# 整数线性规划问题 ILP
定义 :整数规划问题 (Integer Linear Programming, ILP
) 是指下述规划问题:
{ m i n z = c T x s . t . A x = b x ≥ 0 x i ∈ I , i ∈ J ⊂ { 1 , 2 , ⋯ , n } \begin{cases}
min\;& z=\mathbf{c}^T\mathbf{x}\\
s.t.\;& A\textbf{x}=\textbf{b}\\
& \textbf{x}\geq 0\\
& x_i\in I, i\in J\subset\{1,2,\cdots,n\}
\end{cases}
⎩ ⎪ ⎪ ⎪ ⎪ ⎨ ⎪ ⎪ ⎪ ⎪ ⎧ m i n s . t . z = c T x A x = b x ≥ 0 x i ∈ I , i ∈ J ⊂ { 1 , 2 , ⋯ , n }
其中,A A A 为m × n m\times n m × n 的矩阵,c ∈ R n , b ∈ R m , x = ( x 1 , . . . , x n ) T , I \mathbf{c}\in R^n,\mathbf{b}\in R^m,\mathbf{x}=(x_1,...,x_n)^T,I c ∈ R n , b ∈ R m , x = ( x 1 , . . . , x n ) T , I 是自然数集合。
当我们想求解一个 ILP
问题时,可以想象先求解对应的 LP
问题,然后自然地把结果舍入到一个整数解。但是从 LP
问题的可行解舍入到一个可行的整数解是困难的,甚至是不可行的:
实际上这个舍入的过程复杂度已经相当于求解原问题。
# Gomory割平面法
考虑一种特殊的整数线性规划问题,即纯整数线性规划问题 (P P P ):
{ m i n z = c T x s . t . A x = b x ≥ 0 \begin{cases}
min\;& z=\mathbf{c}^T\mathbf{x}\\
s.t.\;& A\textbf{x}=\textbf{b}\\
& \textbf{x}\geq 0\\
\end{cases}
⎩ ⎪ ⎪ ⎨ ⎪ ⎪ ⎧ m i n s . t . z = c T x A x = b x ≥ 0
其中,A , c , x , b A,\mathbf{c},\mathbf{x},\mathbf{b} A , c , x , b 全部为整数向量。(其实这里并不失一般性,因为显然可以同乘A , b A,\mathbf{b} A , b 的分母最小公倍数使其为整数,而c \mathbf{c} c 怎么乘也不会影响最优解。)
对于这类问题,我们不妨记问题P P P 的可行解范围为D D D , 当D ≠ ∅ D\neq\emptyset D = ∅ 时,它是由有限个或可数个格点构成的集合。
现在我们去掉 “x \mathbf{x} x 是整数向量这个条件”,得到了一个 LP
问题( P 0 ) (P_0) ( P 0 ) 称为P P P 的松弛问题 ,记P 0 P_0 P 0 的可行域为D 0 D_0 D 0 ,很显然有以下性质:
D ⊂ D 0 D\subset D_0 D ⊂ D 0 。
若P 0 P_0 P 0 无可行解,则P P P 无可行解。
P 0 P_0 P 0 的最优值是P P P 最优值的一个下界。
若P 0 P_0 P 0 的最优解是一个整数向量,则他也是P P P 的最优解。
Gomory割平面法
的基本思想就是,先用单纯形法求解P 0 P_0 P 0 ,然后若最优解x ∗ \mathbf{x}^* x ∗
不是整数向量,那么就添加一个约束条件(称为割平面条件),在保证不割去格点(D D D 保持不变)的前提下,割去x ∗ \mathbf{x}^* x ∗ ,然后再求解P 0 ′ P_0' P 0 ′ ,如此循环直到最优解是整数向量为止。
如果在增加约束的过程中,得到的 LP
问题无可行解,则原 ILP
问题也无可行解。如果 LP
问题无解,则预案 ILP
问题无可行解或无界。
下面我们给出生产这样的割平面条件的代数方法。
给定一个P 0 P_0 P 0 的最优基本可行解x 0 \mathbf{x}^0 x 0 ,设它对应的基为B = ( A B 1 , . . . , A B m ) B=(A_{B_1},...,A_{B_m}) B = ( A B 1 , . . . , A B m ) ,而x B 1 , . . . , x B m x_{B_1},...,x_{B_m} x B 1 , . . . , x B m 是最优基本可行解的基变量,基变量的下标集合为S S S ,非基变量的下标集合为S ˉ \bar{S} S ˉ 。那么最优解的典式满足:
x B i + ∑ j ∈ S ˉ a ˉ i j x j = b i ˉ , i = 1 , . . . , m x_{B_i}+\sum_{j\in\bar{S}}\bar{a}_{ij}x_j=\bar{b_i},i=1,...,m
x B i + j ∈ S ˉ ∑ a ˉ i j x j = b i ˉ , i = 1 , . . . , m
若b ˉ i , i = 1 , . . . , m \bar{b}_i,i=1,...,m b ˉ i , i = 1 , . . . , m 全为整数时,则已经找到了一个 ILP
的最优解。否则至少有一个b ˉ l \bar{b}_l b ˉ l 不为整数。
由于上述典式中,x B i , x j x_{B_i},x_j x B i , x j 都是非负的,因此有:
∑ j ∈ S ˉ [ a ˉ i j ] x j ≤ ∑ j ∈ S ˉ a ˉ i j x j x B i + ∑ j ∈ S ˉ [ a ˉ i j ] x j ≤ b i ˉ , i = 1 , . . . , m \sum_{j\in\bar{S}}[\bar{a}_{ij}]x_j\leq\sum_{j\in\bar{S}}\bar{a}_{ij}x_j\\
x_{B_i}+\sum_{j\in\bar{S}}[\bar{a}_{ij}]x_j\leq\bar{b_i},i=1,...,m
j ∈ S ˉ ∑ [ a ˉ i j ] x j ≤ j ∈ S ˉ ∑ a ˉ i j x j x B i + j ∈ S ˉ ∑ [ a ˉ i j ] x j ≤ b i ˉ , i = 1 , . . . , m
然后我们想保证原 ILP
问题的可行域不变。很显然对于上述下取整后的式子,由于左侧都是整数,那么我们对右侧也下取整,并不影响不等式:
x B i + ∑ j ∈ S ˉ [ a ˉ i j ] x j ≤ [ b ˉ i ] , i = 1 , . . . , m x_{B_i}+\sum_{j\in\bar{S}}[\bar{a}_{ij}]x_j\leq[\bar{b}_i],i=1,...,m
x B i + j ∈ S ˉ ∑ [ a ˉ i j ] x j ≤ [ b ˉ i ] , i = 1 , . . . , m
将原来的等式和上述不等式相减,得到:
∑ j ∈ S ˉ ( a ˉ l j − [ a ˉ l j ] ) x j ≥ b ˉ l − [ b ˉ l ] \sum_{j\in\bar{S}}(\bar{a}_{lj}-[\bar{a}_{lj}])x_j\geq \bar{b}_l-[\bar{b}_l]
j ∈ S ˉ ∑ ( a ˉ l j − [ a ˉ l j ] ) x j ≥ b ˉ l − [ b ˉ l ]
于是我们就得到了一个新的形如f x ≥ b fx\geq b f x ≥ b 的线性约束,称它为对应于生成行l l l 的 Gomory 割平面条件 。
由于它是一个大于等于的式子,我们还需要引入新的非负松弛变量s s s ,使得:
− ∑ j ∈ S ˉ f l j x j + s = − f l -\sum_{j\in\bar{S}}f_{lj}x_j+s=-f_l
− j ∈ S ˉ ∑ f l j x j + s = − f l
定理 :增加上述条件后,原 ILP
问题的可行域不变,但是x 0 \mathbf{x}^0 x 0 将不再可行。
证明:原问题可行域不变在于对b ˉ l \bar{b}_l b ˉ l 下取整的那一步,原问题显然不会受到影响。但对于新的松弛问题,显然有− f l < 0 -f_l<0 − f l < 0 (因为b ˉ l \bar{b}_l b ˉ l 不是整数),那么由于引入了松弛变量s s s ,新的基本解就成了:
x ′ T = ( x B 1 , . . . , x B m , s , x S ˉ 1 , . . . , x S ˉ n ) = ( b ˉ 1 , . . . , b ˉ m , − f l , 0 , . . . , 0 ) \begin{aligned}
\mathbf{x}'^T&=(x_{B_1},...,x_{B_m},s,x_{\bar{S}_1},...,x_{\bar{S}_n})\\
&=(\bar{b}_1,...,\bar{b}_m,-f_l,0,...,0)
\end{aligned}
x ′ T = ( x B 1 , . . . , x B m , s , x S ˉ 1 , . . . , x S ˉ n ) = ( b ˉ 1 , . . . , b ˉ m , − f l , 0 , . . . , 0 )
显然不再可行,因为中间有一个− f l -f_l − f l 负数。
因此我们可以总结割平面法的求解过程:
舍去x \mathbf{x} x 为整数向量的要求,给出松弛问题。
使用单纯形法求出松弛问题的一个最优解x 0 \mathbf{x}^0 x 0 。
若第x l 0 \mathbf{x}_l^0 x l 0 不为整数,则引入新的非负松弛变量s s s ,并添加约束− ∑ j ∈ S ˉ f l j x j + s = − f l -\sum_{j\in\bar{S}}f_{lj}x_j+s=-f_l − ∑ j ∈ S ˉ f l j x j + s = − f l 。
继续求解松弛问题,直到x 0 \mathbf{x}^0 x 0 为整数向量。
# 分枝定界法
还是考虑纯整数规划问题 (P P P ):
{ m i n z = c T x s . t . A x = b x ≥ 0 \begin{cases}
min\;& z=\mathbf{c}^T\mathbf{x}\\
s.t.\;& A\textbf{x}=\textbf{b}\\
& \textbf{x}\geq 0\\
\end{cases}
⎩ ⎪ ⎪ ⎨ ⎪ ⎪ ⎧ m i n s . t . z = c T x A x = b x ≥ 0
其中,A , c , x , b A,\mathbf{c},\mathbf{x},\mathbf{b} A , c , x , b 全部为整数向量。同样是求解松弛问题P 0 P_0 P 0 ,若最优解中有一维不为整数,即x l ∗ x_l^* x l ∗ 不为整数的话,我们可以考虑将松弛问题划分为两个子问题:
{ m i n z = c T x s . t . A x = b x ≥ 0 x l ≤ [ x l ∗ ] { m i n z = c T x s . t . A x = b x ≥ 0 x l ≥ [ x l ∗ ] + 1 \begin{cases}
min\;& z=\mathbf{c}^T\mathbf{x}\\
s.t.\;& A\textbf{x}=\textbf{b}\\
& \textbf{x}\geq 0\\
& x_l\leq [x_l^*]\\
\end{cases}
\quad
\begin{cases}
min\;& z=\mathbf{c}^T\mathbf{x}\\
s.t.\;& A\textbf{x}=\textbf{b}\\
& \textbf{x}\geq 0\\
& x_l\geq [x_l^*]+1\\
\end{cases}
⎩ ⎪ ⎪ ⎪ ⎪ ⎨ ⎪ ⎪ ⎪ ⎪ ⎧ m i n s . t . z = c T x A x = b x ≥ 0 x l ≤ [ x l ∗ ] ⎩ ⎪ ⎪ ⎪ ⎪ ⎨ ⎪ ⎪ ⎪ ⎪ ⎧ m i n s . t . z = c T x A x = b x ≥ 0 x l ≥ [ x l ∗ ] + 1
显然这两个问题是互斥的,可行域不相交。因此我们可以分别求解这两个子问题,然后取其中最优解即可。于是会有分枝树 :
如果原问题有界,则显然分枝的过程不会无限进行下去。分枝会因为两种情况而停下来:得到了一组整数最优解,或松弛问题不可行。这样最后把所有叶子结点取个最优值即得到原问题的最优值。
很显然我们也可以进行剪枝优化,如果目前分枝树中已经得到了整数最优解,且最优值为z ∗ z^* z ∗ ,那么对于一个非叶子结点,如果它的松弛问题的最优值已经不优于z ∗ z^* z ∗ 了就可以停止对它分枝,称它为死点 。
# 非线性规划
# 基本概念
定义 :令x T = ( x 1 , . . . , x n ) \mathbf{x}^T=(x_1,...,x_n) x T = ( x 1 , . . . , x n ) 是n n n 维欧氏空间R n R^n R n 中的一个点。f ( x ) , g i ( x ) , i = 1 , . . . , p , h j ( x ) , j = 1 , . . . , q f(\mathbf{x}),g_i(\mathbf{x}),i=1,...,p,h_j(\mathbf{x}),j=1,...,q f ( x ) , g i ( x ) , i = 1 , . . . , p , h j ( x ) , j = 1 , . . . , q 是定义在R n R^n R n 上的实值函数。我们称如下形式的数学模型为数学规划 (Mathematical Programming, MP
):
{ m i n f ( x ) s . t . g i ( x ) ≤ 0 , i = 1 , . . . , p h j ( x ) = 0 , j = 1 , . . . , q \begin{cases}
min & f(\mathbf{x})\\
s.t. & g_i(\mathbf{x})\leq 0,i=1,...,p\\
& h_j(\mathbf{x})=0,j=1,...,q\\
\end{cases}
⎩ ⎪ ⎪ ⎨ ⎪ ⎪ ⎧ m i n s . t . f ( x ) g i ( x ) ≤ 0 , i = 1 , . . . , p h j ( x ) = 0 , j = 1 , . . . , q
令
X = { x ∈ R n ∣ g i ( x ) ≤ 0 , i = 1 , . . . , p , h j ( x ) = 0 , j = 1 , . . . , q } X=\{x\in R^n|g_i(x)\leq 0,i=1,...,p,h_j(x)=0,j=1,...,q\}
X = { x ∈ R n ∣ g i ( x ) ≤ 0 , i = 1 , . . . , p , h j ( x ) = 0 , j = 1 , . . . , q }
称为 MP
的可行域 或约束集 。故 MP
问题可简记为m i n x ∈ X f ( x ) \mathop{min}\limits_{\mathbf{x}\in X}f(\mathbf{x}) x ∈ X min f ( x ) 。当f , g i , h j f,g_i,h_j f , g i , h j 函数中为非线性函数时,就将原 MP
称为非线性规划问题。
定义 :对于非线性规划 MP
问题,若x ∗ ∈ X \mathbf{x}^*\in X x ∗ ∈ X ,并且存在x ∗ \mathbf{x}^* x ∗ 的一个邻域N δ ( x ∗ ) = { x ∈ R n ∣ ∥ x − x ∗ ∥ < δ } N_\delta(\mathbf{x}^*)=\{x\in R^n\;|\;\|\mathbf{x}-\mathbf{x}^*\|<\delta\} N δ ( x ∗ ) = { x ∈ R n ∣ ∥ x − x ∗ ∥ < δ } ,使得:
f ( x ∗ ) ≤ f ( x ) , ∀ x ∈ N δ ( x ∗ ) ∩ X f(\mathbf{x}^*)\leq f(\mathbf{x}), \forall\mathbf{x}\in N_\delta(\mathbf{x}^*)\cap X
f ( x ∗ ) ≤ f ( x ) , ∀ x ∈ N δ ( x ∗ ) ∩ X
则称x ∗ \mathbf{x}^* x ∗ 是 MP
问题的局部最优点 或局部最小点 ,称f ( x ∗ ) f(\mathbf{x}^*) f ( x ∗ ) 称为 MP
问题的局部最优值 或局部极小值 。
若有f ( x ∗ ) < f ( x ) f(\mathbf{x}^*)<f(\mathbf{x}) f ( x ∗ ) < f ( x ) ,那么称x ∗ \mathbf{x}^* x ∗ 是 MP
问题的严格局部最优点 或严格局部最小点 ,称f ( x ∗ ) f(\mathbf{x}^*) f ( x ∗ ) 称为 MP
问题的严格局部最优值 或严格局部极小值 。
# 凸函数和凸规划
定义 :设S ⊂ R n S\subset R^n S ⊂ R n 是n n n 维欧氏空间中的一个点集,若对任意x , y ∈ S , λ ∈ [ 0 , 1 ] \mathbf{x},\mathbf{y}\in S,\lambda\in[0,1] x , y ∈ S , λ ∈ [ 0 , 1 ] 都有λ x + ( 1 − λ ) y ∈ S \lambda\mathbf{x}+(1-\lambda)\mathbf{y}\in S λ x + ( 1 − λ ) y ∈ S ,就称S S S 是凸集 。
若有实值函数f : S → R 1 f:S\rightarrow R^1 f : S → R 1 且对任意的α ∈ ( 0 , 1 ) \alpha\in(0,1) α ∈ ( 0 , 1 ) 都有:
∀ x , y ∈ S , f ( α x + ( 1 − α ) y ) ≤ α f ( x ) + ( 1 − α ) f ( y ) \forall \mathbf{x},\mathbf{y}\in S,f(\alpha\mathbf{x}+(1-\alpha)\mathbf{y})\leq \alpha f(\mathbf{x})+(1-\alpha)f(\mathbf{y})
∀ x , y ∈ S , f ( α x + ( 1 − α ) y ) ≤ α f ( x ) + ( 1 − α ) f ( y )
则称f f f 是S S S 上的凸函数 。若满足严格小于而非小于等于,则称为严格凸函数 。若− f -f − f 是S S S 上的 (严格) 凸函数,则称f f f 是S S S 上的 (严格) 凹函数 。
很显然线性函数f ( x ) = α T x + β f(\mathbf{x})=\alpha^T\mathbf{x}+\beta f ( x ) = α T x + β 既是凸函数又是凹函数,但都不严格。
定理 :凸函数的数乘α f \alpha f α f 、加和f 1 + f 2 f_1+f_2 f 1 + f 2 都是凸函数,但凸函数的乘积不一定是凸函数。
定理 :设f f f 是凸函数,则集合:
H S ( f , c ) = { x ∈ S ∣ f ( x ) ≤ c } H_S(f,c)=\{\mathbf{x}\in S\;|\;f(\mathbf{x})\leq c\}
H S ( f , c ) = { x ∈ S ∣ f ( x ) ≤ c }
是凸集。
证明很简单,但上述定理的逆定理不成立。我们称集合H S ( f , c ) H_S(f,c) H S ( f , c ) 为函数f f f 在集合S S S 上关于c c c 的水平集 。
定理 :设S ⊂ R n S\subset R^n S ⊂ R n 是非空开凸集,f : S → R 1 f:S\rightarrow R^1 f : S → R 1 可微,则:
f f f 是S S S 上的凸函数的充要条件是:
∀ x , y ∈ S , ∇ f ( x ) T ( y − x ) ≤ f ( y ) − f ( x ) \forall \mathbf{x},\mathbf{y}\in S,\nabla f(\mathbf{x})^T(\mathbf{y}-\mathbf{x})\leq f(\mathbf{y})-f(\mathbf{x})
∀ x , y ∈ S , ∇ f ( x ) T ( y − x ) ≤ f ( y ) − f ( x )
若要求f f f 严格凸,那么充要条件需改为严格小于。
证明:
\begin{aligned}
& \because f(\alpha\mathbf{y}+(1-\alpha)\mathbf{x})\leq \alpha f(\mathbf{y})+(1-\alpha)f(\mathbf{x})\\
& \therefore \frac{f(\alpha\mathbf{y}+(1-\alpha)\mathbf{x})-f(\mathbf{x})}{\alpha}\leq f(\mathbf{y})-f(\mathbf{x})\
\end{aligned}
然后把f ( α y + ( 1 − α ) x ) f(\alpha\mathbf{y}+(1-\alpha)\mathbf{x}) f ( α y + ( 1 − α ) x ) 在x \mathbf{x} x 处泰勒展开:
f ( α y + ( 1 − α ) x ) = f ( x ) + ∇ f ( x ) T α ( y − x ) + ∇ 2 f ( ζ ) 2 α 2 ( y − x ) 2 f(\alpha\mathbf{y}+(1-\alpha)\mathbf{x})=f(\mathbf{x})+\nabla f(\mathbf{x})^T\alpha(\mathbf{y}-\mathbf{x})+\frac{\nabla^2 f(\zeta)}{2}\alpha^2(\mathbf{y}-\mathbf{x})^2
f ( α y + ( 1 − α ) x ) = f ( x ) + ∇ f ( x ) T α ( y − x ) + 2 ∇ 2 f ( ζ ) α 2 ( y − x ) 2
于是代入有:
∇ f ( x ) T ( y − x ) + ∇ 2 f ( ζ ) 2 α ( y − x ) 2 ≤ f ( y ) − f ( x ) \nabla f(\mathbf{x})^T(\mathbf{y}-\mathbf{x})+\frac{\nabla^2 f(\zeta)}{2}\alpha(\mathbf{y}-\mathbf{x})^2\leq f(\mathbf{y})-f(\mathbf{x})
∇ f ( x ) T ( y − x ) + 2 ∇ 2 f ( ζ ) α ( y − x ) 2 ≤ f ( y ) − f ( x )
令α → 0 \alpha\rightarrow 0 α → 0 ,则有∇ f ( x ) T ( y − x ) ≤ f ( y ) − f ( x ) \nabla f(\mathbf{x})^T(\mathbf{y}-\mathbf{x})\leq f(\mathbf{y})-f(\mathbf{x}) ∇ f ( x ) T ( y − x ) ≤ f ( y ) − f ( x ) 。
充分性。假如已有上式,那么对于任意x , y , α \mathbf{x},\mathbf{y},\alpha x , y , α ,我们取z = ( 1 − α ) x + α y \mathbf{z}=(1-\alpha)\mathbf{x}+\alpha\mathbf{y} z = ( 1 − α ) x + α y ,代入上式:
∇ f ( z ) T ( x − z ) ≤ f ( x ) − f ( z ) ∇ f ( z ) T ( y − z ) ≤ f ( y ) − f ( z ) \nabla f(\mathbf{z})^T(\mathbf{x}-\mathbf{z})\leq f(\mathbf{x})-f(\mathbf{z})\\
\nabla f(\mathbf{z})^T(\mathbf{y}-\mathbf{z})\leq f(\mathbf{y})-f(\mathbf{z})\\
∇ f ( z ) T ( x − z ) ≤ f ( x ) − f ( z ) ∇ f ( z ) T ( y − z ) ≤ f ( y ) − f ( z )
把上两式加权和,有:
α f ( y ) + ( 1 − α ) f ( x ) ≥ ∇ f ( z ) T ( z − z ) + f ( z ) = f ( z ) \alpha f(\mathbf{y})+(1-\alpha)f(\mathbf{x})\geq \nabla f(\mathbf{z})^T(\mathbf{z}-\mathbf{z})+f(\mathbf{z})=f(\mathbf{z})
α f ( y ) + ( 1 − α ) f ( x ) ≥ ∇ f ( z ) T ( z − z ) + f ( z ) = f ( z )
证毕。
定理 :设S ⊂ R n S\subset R^n S ⊂ R n 是非空开凸集,f : S → R 1 f:S\rightarrow R^1 f : S → R 1 二阶可导,则f f f 是S S S 上的凸函数的充要条件是f f f 的 Hessian 矩阵在S S S 上都是半正定的。
当 Hessian 矩阵是正定的时,f f f 是严格凸函数,但反之不成立。
若一个 MP
问题的目标函数f f f 是凸函数,可行集X X X 是凸集,则称规划问题为凸规划 。
定理 :对于 MP
问题,若f , g i f,g_i f , g i 函数均为凸函数,h j h_j h j 为线性函数,那么原问题是一个凸规划。
证明:对于g i g_i g i 是凸函数,根据前述定理,则它的零水平集 (g i ( x ) ≤ 0 g_i(\mathbf{x})\leq 0 g i ( x ) ≤ 0 ) 都为凸集。容易验证h j ( x ) = 0 h_j(\mathbf{x})=0 h j ( x ) = 0 也是凸集,那么所有的凸集的交还是凸集。
证明:设x ∗ \mathbf{x}^* x ∗ 是 MP
的一个局部最优解,故有一个邻域N δ ( x ∗ ) N_\delta(\mathbf{x}^*) N δ ( x ∗ ) 满足:
∀ x ∈ X ∩ N δ ( x ∗ ) , f ( x ∗ ) ≤ f ( x ) \forall\mathbf{x}\in X\cap N_\delta(\mathbf{x}^*),f(\mathbf{x^*})\leq f(\mathbf{x})
∀ x ∈ X ∩ N δ ( x ∗ ) , f ( x ∗ ) ≤ f ( x )
反设x ∗ \mathbf{x}^* x ∗ 不是最优解,那么存在一个x ˉ ∈ X \bar{\mathbf{x}}\in X x ˉ ∈ X ,使得f ( x ˉ ) < f ( x ∗ ) f(\bar{\mathbf{x}})< f(\mathbf{x}^*) f ( x ˉ ) < f ( x ∗ ) ,则有:
f ( α x ˉ + ( 1 − α ) x ∗ ) ≤ α f ( x ˉ ) + ( 1 − α ) f ( x ∗ ) < α f ( x ∗ ) + ( 1 − α ) f ( x ∗ ) = f ( x ∗ ) \begin{aligned}
f(\alpha\bar{\mathbf{x}}+(1-\alpha)\mathbf{x}^*) & \leq \alpha f(\bar{\mathbf{x}})+(1-\alpha)f(\mathbf{x}^*)\\
&<\alpha f(\mathbf{x}^*)+(1-\alpha)f(\mathbf{x}^*)\\
& = f(\mathbf{x}^*)
\end{aligned}
f ( α x ˉ + ( 1 − α ) x ∗ ) ≤ α f ( x ˉ ) + ( 1 − α ) f ( x ∗ ) < α f ( x ∗ ) + ( 1 − α ) f ( x ∗ ) = f ( x ∗ )
而当α \alpha α 充分小时,α x ˉ + ( 1 − α ) x ∗ \alpha\bar{\mathbf{x}}+(1-\alpha)\mathbf{x}^* α x ˉ + ( 1 − α ) x ∗ 可以成为邻域N δ ( x ∗ ) N_\delta(\mathbf{x}^*) N δ ( x ∗ ) 中的点,故与x ∗ \mathbf{x}^* x ∗ 是局部极小值相矛盾。证毕
# 一维搜索方法
考虑一个一维的单峰函数:f ( t ) , t ∈ [ a , b ] f(t),t\in[a,b] f ( t ) , t ∈ [ a , b ] ,满足∃ t ∗ \exists t^* ∃ t ∗ ,使得f f f 在[ a , t ∗ ] [a,t^*] [ a , t ∗ ] 上单调增,在[ t ∗ , b ] [t^*,b] [ t ∗ , b ] 上单调减。我们要解决的问题就是给出搜索区间 [ a , b ] [a,b] [ a , b ] ,去求得函数的峰t ∗ t^* t ∗ 。
方法 1 :三分法。
给定一个搜索区间[ a , b ] [a,b] [ a , b ] ,我们可以在其中选择两个点x 1 , y 1 x_1,y_1 x 1 , y 1 ,满足a < x 1 < y 1 < b a<x_1<y_1<b a < x 1 < y 1 < b :
然后计算两个函数值f ( x 1 ) , f ( y 1 ) f(x_1),f(y_1) f ( x 1 ) , f ( y 1 ) 。根据这两个函数值,我们一定可以保证峰不在两侧区间[ a , x 1 ] [a,x_1] [ a , x 1 ] 或[ y 1 , b ] [y_1,b] [ y 1 , b ] 中的某一个里 。
很显然,若f ( x 1 ) > f ( y 1 ) f(x_1)>f(y_1) f ( x 1 ) > f ( y 1 ) ,则说明函数的峰一定不在[ y 1 , b ] [y_1,b] [ y 1 , b ] 中,反之若f ( x 1 ) < f ( y 1 ) f(x_1)<f(y_1) f ( x 1 ) < f ( y 1 ) 则函数的峰比不可能在[ a , x 1 ] [a,x_1] [ a , x 1 ] 中。这个结合图像特别好理解。因为若峰在[ a , x 1 ] [a,x_1] [ a , x 1 ] 中,那么函数在[ x 1 , b ] [x_1,b] [ x 1 , b ] 上就单调减,那么就不可能f ( x 1 ) < f ( x 2 ) f(x_1)<f(x_2) f ( x 1 ) < f ( x 2 ) ,反之同理。
因此每分割一次区间,我们都可以去掉一部分,如此反复操作最后就可以把区间越变越小,逼近峰点。
方法 2 :黄金分割法。
一个有点明显的优化就是我们不想每次都计算f ( x 1 ) , f ( y 1 ) f(x_1),f(y_1) f ( x 1 ) , f ( y 1 ) 两个函数值,我们是否可以重复利用之前已经计算的结果?用图表示就是:
第一次搜索区间为[ a , b ] [a,b] [ a , b ] ,我们选择x 1 , y 1 x_1,y_1 x 1 , y 1 后扔掉了[ a , x 1 ] [a,x_1] [ a , x 1 ] 区间。第二次搜索区间为[ x 1 , b ] [x_1,b] [ x 1 , b ] ,我们选择x 2 , y 2 x_2,y_2 x 2 , y 2 ,此时我们希望x 2 = y 1 x_2=y_1 x 2 = y 1 。这样就不用去计算f ( x 2 ) f(x_2) f ( x 2 ) ,而只需利用之前计算的f ( y 1 ) f(y_1) f ( y 1 ) 即可。
为保持这个过程可以永远进行下去,我们希望x 1 , y 1 x_1,y_1 x 1 , y 1 在搜索区间[ a , b ] [a,b] [ a , b ] 中的位置和比例关系和y 1 , y 2 y_1,y_2 y 1 , y 2 在搜索区间[ x 1 , b ] [x_1,b] [ x 1 , b ] 也x , y x,y x , y 的选择是对称的(因为也可能扔掉右边的区间):
故有比例关系:
1 − y 1 − a b − a = y 1 − x 1 b − x 1 1-\frac{y_1-a}{b-a}=\frac{y_1-x_1}{b-x_1}
1 − b − a y 1 − a = b − x 1 y 1 − x 1
设搜索区间[ a , b ] [a,b] [ a , b ] 长度为单位 1,设x 1 − a = t x_1-a=t x 1 − a = t 那么b − y 2 = t b-y_2=t b − y 2 = t ,y 1 − x 1 = 1 − 2 t y_1-x_1=1-2t y 1 − x 1 = 1 − 2 t 。那么代入就会有:
1 − 1 − t 1 = 1 − 2 t 1 − t 1-\frac{1-t}{1}=\frac{1-2t}{1-t}
1 − 1 1 − t = 1 − t 1 − 2 t
又因为0 < t < 1 0<t<1 0 < t < 1 解得t = 3 − 5 2 t=\frac{3-\sqrt{5}}{2} t = 2 3 − 5 。所以y − a = 5 − 1 2 ( b − a ) y-a=\frac{\sqrt{5}-1}{2}(b-a) y − a = 2 5 − 1 ( b − a ) 。故分割过程可变为:
选定x 1 = a + 3 − 5 2 ( b − a ) , y 1 = a + 5 − 1 2 ( b − a ) x_1=a+\frac{3-\sqrt{5}}{2}(b-a),y_1=a+\frac{\sqrt{5}-1}{2}(b-a) x 1 = a + 2 3 − 5 ( b − a ) , y 1 = a + 2 5 − 1 ( b − a ) 计算f ( x 1 ) , f ( y 1 ) f(x_1),f(y_1) f ( x 1 ) , f ( y 1 ) 。
根据大小关系决定扔掉区间[ a , x 1 ] [a,x_1] [ a , x 1 ] 或[ y 1 , b ] [y_1,b] [ y 1 , b ] 。
若扔掉[ a , x 1 ] [a,x_1] [ a , x 1 ] ,则令搜索区间为[ x 1 , b ] [x_1,b] [ x 1 , b ] ,且选定新的x 2 = y 1 , y 2 = x 1 + 5 − 1 2 ( b − x 1 ) x_2=y_1,y_2=x_1+\frac{\sqrt{5}-1}{2}(b-x_1) x 2 = y 1 , y 2 = x 1 + 2 5 − 1 ( b − x 1 ) 。对称同理,如此反复。
方法 3 : Newton 法
此时问题发生了变化,若f f f 是一维可微的,即使它不是单峰的,我们也可以去尝试求解它的一个极值点。
假如我们现在已经有一个尝试点 t k t_k t k (它不是极值点,但在前往极值点的路上 www),我们希望构建t k + 1 t_{k+1} t k + 1 ,再这样一步步进行,直到逼近极值点。
首先,我们可以把原函数f ( x ) f(x) f ( x ) 的值,都用在t k t_k t k 处的二阶泰勒展开式近似:
∀ x , f ( x ) ≈ f ( t k ) + f ′ ( t k ) ( x − t k ) + f ′ ′ ( t k ) 2 ( x − t k ) 2 \forall x,f(x)\approx f(t_k)+f'(t_k)(x-t_k)+\frac{f''(t_k)}{2}(x-t_k)^2
∀ x , f ( x ) ≈ f ( t k ) + f ′ ( t k ) ( x − t k ) + 2 f ′ ′ ( t k ) ( x − t k ) 2
然后要求f ( x ) f(x) f ( x ) 的极值点,就是让f ′ ( x ) = 0 f'(x)=0 f ′ ( x ) = 0 ,则有:
0 = f ′ ( x ) ≈ f ′ ( t k ) + f ′ ′ ( t k ) ( x − t k ) 0=f'(x)\approx f'(t_k)+f''(t_k)(x-t_k)
0 = f ′ ( x ) ≈ f ′ ( t k ) + f ′ ′ ( t k ) ( x − t k )
解得:
x ≈ t k − f ′ ( t k ) f ′ ′ ( t k ) x\approx t_k-\frac{f'(t_k)}{f''(t_k)}
x ≈ t k − f ′ ′ ( t k ) f ′ ( t k )
当然这里是约等于!是因为显然由于我们只用了二阶近似,所以若x = t k − f ′ ( t k ) f ′ ′ ( t k ) x=t_k-\frac{f'(t_k)}{f''(t_k)} x = t k − f ′ ′ ( t k ) f ′ ( t k ) ,那么f ′ ( x ) ≠ 0 f'(x)\neq 0 f ′ ( x ) = 0 。
但是这仍然有指导意义,因为t k − f ′ ( t k ) f ′ ′ ( t k ) t_k-\frac{f'(t_k)}{f''(t_k)} t k − f ′ ′ ( t k ) f ′ ( t k ) 比t k t_k t k 更接近极值点。故我们可以取新的尝试点t k + 1 = t k − f ′ ( t k ) f ′ ′ ( t k ) t_{k+1}=t_k-\frac{f'(t_k)}{f''(t_k)} t k + 1 = t k − f ′ ′ ( t k ) f ′ ( t k ) ,如此反复计算以逼近极值点。
Newton 法显然不一定总是收敛到极值点的,实际上它具有局部收敛性,即尝试点若离极值点较近时会导致收敛。
在 https://subonan.com/2022/04/22 / 数值计算 / 中有给出了 Newton 法局部收敛性的定理说明。
# 无约束最优化方法
当可行域X = R n X=R^n X = R n 时,我们讨论无约束的n n n 元函数优化问题m i n f ( x ) min\;f(\mathbf{x}) m i n f ( x ) (Unbounded Mathematical Programming, UMP
)。
定理 :设f : R n → R 1 f:R^n\rightarrow R^1 f : R n → R 1 在x ˉ ∈ R n \bar{\mathbf{x}}\in R^n x ˉ ∈ R n 处可微,若存在p ∈ R n \mathbf{p}\in R^n p ∈ R n 使得:
∇ f ( x ˉ ) T p < 0 \nabla f(\bar{\mathbf{x}})^T\mathbf{p}<0
∇ f ( x ˉ ) T p < 0
则向量p \mathbf{p} p 是f f f 在x ˉ \bar{\mathbf{x}} x ˉ 处的下降方向。
证明:泰勒展开,得
f ( x ˉ + t p ) = f ( x ˉ ) + t ∇ f ( x ˉ ) T p + o ( ∥ t p ∥ ) f(\bar{\mathbf{x}}+t\mathbf{p})=f(\bar{\mathbf{x}})+t\nabla f(\bar{\mathbf{x}})^T\mathbf{p}+o(\|t\mathbf{p}\|)
f ( x ˉ + t p ) = f ( x ˉ ) + t ∇ f ( x ˉ ) T p + o ( ∥ t p ∥ )
由于∇ f ( x ˉ ) T p < 0 \nabla f(\bar{\mathbf{x}})^T\mathbf{p}<0 ∇ f ( x ˉ ) T p < 0 ,总可以取到足够小的t t t 使得
t [ ∇ f ( x ˉ ) T p + o ( ∥ t p ∥ ) t ] < 0 t[\nabla f(\bar{\mathbf{x}})^T\mathbf{p}+\frac{o(\|t\mathbf{p}\|)}{t}]<0
t [ ∇ f ( x ˉ ) T p + t o ( ∥ t p ∥ ) ] < 0
故存在t t t ,使得f ( x ˉ + t p ) < f ( x ˉ ) f(\bar{\mathbf{x}}+t\mathbf{p})<f(\bar{\mathbf{x}}) f ( x ˉ + t p ) < f ( x ˉ ) 。证毕
定理 :设f : R n → R 1 f:R^n\rightarrow R^1 f : R n → R 1 在点x ∗ ∈ R n \mathbf{x}^*\in R^n x ∗ ∈ R n 处的 Hessian 矩阵∇ 2 f ( x ∗ ) \nabla^2f(\mathbf{x}^*) ∇ 2 f ( x ∗ ) 存在,若:
∇ f ( x ∗ ) = 0 \nabla f(\mathbf{x}^*)=0 ∇ f ( x ∗ ) = 0 且∇ 2 f ( x ∗ ) \nabla^2f(\mathbf{x}^*) ∇ 2 f ( x ∗ ) 正定
则x ∗ \mathbf{x}^* x ∗ 是 UMP
的严格局部最优点。
证明:当 Hessian 矩阵正定时,说明f f f 是一个可微严格凸函数,所以有:
∀ x , ∇ f ( x ∗ ) T ( x − x ∗ ) < f ( x ) − f ( x ∗ ) \forall \mathbf{x},\nabla f(\mathbf{x}^*)^T(\mathbf{x}-\mathbf{x}^*)< f(\mathbf{x})-f(\mathbf{x}^*)
∀ x , ∇ f ( x ∗ ) T ( x − x ∗ ) < f ( x ) − f ( x ∗ )
又因为∇ f ( x ∗ ) = 0 \nabla f(\mathbf{x}^*)=0 ∇ f ( x ∗ ) = 0 ,故有∀ x , f ( x ∗ ) < f ( x ) \forall \mathbf{x},f(\mathbf{x}^*)<f(\mathbf{x}) ∀ x , f ( x ∗ ) < f ( x ) 。证毕
最速下降法
优化过程中,一个很显然的策略就是沿着梯度方向进行更新迭代。可是沿着哪个方向函数值下降最快呢?根据泰勒公式:
f ( x ˉ ) − f ( x ˉ + t p ) = − t ∇ f ( x ˉ ) T p − o ( ∥ t p ∥ ) f(\bar{\mathbf{x}})-f(\bar{\mathbf{x}}+t\mathbf{p})=-t\nabla f(\bar{\mathbf{x}})^T\mathbf{p}-o(\|t\mathbf{p}\|)
f ( x ˉ ) − f ( x ˉ + t p ) = − t ∇ f ( x ˉ ) T p − o ( ∥ t p ∥ )
假如∇ f ( x ˉ ) \nabla f(\bar{\mathbf{x}}) ∇ f ( x ˉ ) 和p \mathbf{p} p 长度一定的话,显然它们共线时,右式值最大,即
p = − ∇ f ( x ˉ ) \mathbf{p}=-\nabla f(\bar{\mathbf{x}})
p = − ∇ f ( x ˉ )
时,函数值下降最大。
共轭方向法
定义 :设A A A 为n n n 阶实对称矩阵,对于非零向量p , q ∈ R n \mathbf{p},\mathbf{q}\in R^n p , q ∈ R n ,若有:
p T A q = 0 \mathbf{p}^TA\mathbf{q}=0
p T A q = 0
则称p , q \mathbf{p},\mathbf{q} p , q 是相互A A A 共轭的。对于非零向量组,满足:
p i T A p j = 0 , i , j = 0 , 1 , . . . , n − 1 \mathbf{p}_i^TA\mathbf{p}_j=0,i,j=0,1,...,n-1
p i T A p j = 0 , i , j = 0 , 1 , . . . , n − 1
则称p i \mathbf{p}_i p i 是A A A 的共轭方向组,称他们为一组A A A 的共轭方向。
定理 :设A A A 是n n n 阶实对称正定矩阵,p i \mathbf{p}_i p i 是非零向量,若p 0 , . . . , p n − 1 \mathbf{p}_0,...,\mathbf{p}_{n-1} p 0 , . . . , p n − 1 是一组A A A 共轭方向,则它们一定是线性无关的。
证明:假设存在一组不全为 0 的数满足:
∑ i = 0 n − 1 α i p i = 0 \sum_{i=0}^{n-1}\alpha_i \mathbf{p}_i=0
i = 0 ∑ n − 1 α i p i = 0
用p j T A \mathbf{p}_j^TA p j T A 左乘上式:
∑ i = 0 n − 1 α i p j T A p i = 0 \sum_{i=0}^{n-1}\alpha_i \mathbf{p}_j^TA\mathbf{p}_i=0
i = 0 ∑ n − 1 α i p j T A p i = 0
由于A A A 是正定的,且p i \mathbf{p}_i p i 是共轭方向,故当且仅当i = j i=j i = j 时,有:
α i p i T A p i = 0 \alpha_i \mathbf{p}_i^TA\mathbf{p}_i=0
α i p i T A p i = 0
其他情况p j T A p i = 0 \mathbf{p}_j^TA\mathbf{p}_i=0 p j T A p i = 0 。又因为A A A 正定,故p i T A p i > 0 \mathbf{p}_i^TA\mathbf{p}_i>0 p i T A p i > 0 ,故α i = 0 \alpha_i=0 α i = 0 。同理可推出所有的α i = 0 \alpha_i=0 α i = 0 。证毕。
考虑二次严格凸函数的无约束最优化问题 ( AP
):
m i n f ( x ) = x T A x + b T x + c min\;f(\mathbf{x})=\mathbf{x}^TA\mathbf{x}+\mathbf{b}^T\mathbf{x}+\mathbf{c}
m i n f ( x ) = x T A x + b T x + c
其中A A A 是n n n 阶实对称正定矩阵。
定理 :若p 0 , . . . , p n − 1 \mathbf{p}_0,...,\mathbf{p}_{n-1} p 0 , . . . , p n − 1 为任意一组A A A 的共轭方向,则由任意起始点x 0 \mathbf{x}_0 x 0 出发,依次沿着p 0 , . . . , p n − 1 \mathbf{p}_0,...,\mathbf{p}_{n-1} p 0 , . . . , p n − 1 进行一维搜索,则最多经过n n n 轮迭代可达整体最优解。
对于 AP
问题,我们讨论形成一组共轭方向的通用方法:
任选一个初始点x 0 \mathbf{x}_0 x 0 ,第一个搜索方向取p 0 = − ∇ f ( x 0 ) \mathbf{p}_0=-\nabla f(\mathbf{x}_0) p 0 = − ∇ f ( x 0 ) 。
沿着p 0 \mathbf{p}_0 p 0 方向一维搜索,得到一个新的点:x 1 = x 0 + t 0 p 0 \mathbf{x}_1=\mathbf{x}_0+t_0\mathbf{p}_0 x 1 = x 0 + t 0 p 0 。
第二个搜索方向取p 1 = − ∇ f ( x 1 ) + λ 0 p 0 \mathbf{p}_1=-\nabla f(\mathbf{x}_1)+\lambda_0\mathbf{p}_0 p 1 = − ∇ f ( x 1 ) + λ 0 p 0 。其中要求p 1 \mathbf{p}_1 p 1 和p 0 \mathbf{p}_0 p 0 相互共轭,利用p 1 T A p 0 = 0 \mathbf{p}_1^T A\mathbf{p}_0=0 p 1 T A p 0 = 0 ,解得:
λ 0 = p 0 T A ∇ f ( x 1 ) p 0 T A p 0 \lambda_0=\frac{\mathbf{p}_0^TA\nabla f(\mathbf{x}_1)}{\mathbf{p}_0^TA\mathbf{p}_0}
λ 0 = p 0 T A p 0 p 0 T A ∇ f ( x 1 )
继续在p 1 \mathbf{p}_1 p 1 方向上一维搜索。实际上,通式是:
p k + 1 = − ∇ f ( x k + 1 ) + λ k p k λ k = p k T A ∇ f ( x k + 1 ) p k T A p k \mathbf{p}_{k+1}=-\nabla f(\mathbf{x}_{k+1})+\lambda_k\mathbf{p}_k\\
\lambda_k=\frac{\mathbf{p}_k^TA\nabla f(\mathbf{x}_{k+1})}{\mathbf{p}_k^TA\mathbf{p}_k}
p k + 1 = − ∇ f ( x k + 1 ) + λ k p k λ k = p k T A p k p k T A ∇ f ( x k + 1 )
为了简化记忆,实际上:
λ k = ∥ ∇ f ( x k + 1 ) ∥ 2 ∥ ∇ f ( x k ) ∥ 2 \lambda_k=\frac{\|\nabla f(\mathbf{x}_{k+1})\|^2}{\|\nabla f(\mathbf{x}_k)\|^2}
λ k = ∥ ∇ f ( x k ) ∥ 2 ∥ ∇ f ( x k + 1 ) ∥ 2
以此产生了若干个搜索方向被称为 Fletcher-Reeves 共轭梯度法 。
F-R 方法 收敛较快,但极度依赖于一维搜索的精度。当一维搜索并不保证精度时,我们可以用 Polak-Ribiere-Polyak 共轭梯度法,区别仅仅在于:
λ k = ∇ f ( x k + 1 ) T [ ∇ f ( x k + 1 ) − ∇ f ( x k ) ] ∥ ∇ f ( x k ) ∥ 2 \lambda_k=\frac{\nabla f(\mathbf{x}_{k+1})^T[\nabla f(\mathbf{x}_{k+1})-\nabla f(\mathbf{x}_k)]}{\|\nabla f(\mathbf{x}_k)\|^2}
λ k = ∥ ∇ f ( x k ) ∥ 2 ∇ f ( x k + 1 ) T [ ∇ f ( x k + 1 ) − ∇ f ( x k ) ]
# 约束最优化方法
# K-T 条件法
设 MP
问题得可行域为:
X = { x ∈ R n ∣ g i ( x ) ≤ 0 , h j ( x ) = 0 } , i = 1 , . . . , p , j = 1 , . . . , q X=\{\mathbf{x}\in R^n\;|\;g_i(\mathbf{x})\leq 0,h_j(\mathbf{x})=0\},i=1,...,p,j=1,...,q
X = { x ∈ R n ∣ g i ( x ) ≤ 0 , h j ( x ) = 0 } , i = 1 , . . . , p , j = 1 , . . . , q
对于g i ( x ) ≤ 0 g_i(\mathbf{x})\leq 0 g i ( x ) ≤ 0 的约束也可以继续分类,我们称对于使得g i ( x ∗ ) = 0 g_i(\mathbf{x}^*)=0 g i ( x ∗ ) = 0 的点x ∗ \mathbf{x}^* x ∗ ,g i ( x ∗ ) = 0 g_i(\mathbf{x}^*)=0 g i ( x ∗ ) = 0 是它的一个积极约束 ,一个微小的扰动就会导致积极约束被破坏。我们记x ∗ \mathbf{x}^* x ∗ 的积极约束的下标为:
I ( x ∗ ) = { i ∣ g i ( x ∗ ) = 0 } I(\mathbf{x}^*)=\{i\;|\;g_i(\mathbf{x}^*)=0\}
I ( x ∗ ) = { i ∣ g i ( x ∗ ) = 0 }
定理 :设f f f 和g i , i ∈ I ( x ∗ ) g_i,i\in I(\mathbf{x}^*) g i , i ∈ I ( x ∗ ) 在x ∗ \mathbf{x}^* x ∗ 处可微,而g i , i ∉ I ( x ∗ ) g_i,i\notin I(\mathbf{x}^*) g i , i ∈ / I ( x ∗ ) 在x ∗ \mathbf{x}^* x ∗ 处连续,且h j h_j h j 在x ∗ \mathbf{x}^* x ∗ 都连续可微。
并且,∇ g i ( x ∗ ) , i ∈ I ( x ∗ ) , ∇ h j ( x ∗ ) \nabla g_i(\mathbf{x}^*),i\in I(\mathbf{x}^*),\nabla h_j(\mathbf{x}^*) ∇ g i ( x ∗ ) , i ∈ I ( x ∗ ) , ∇ h j ( x ∗ ) 线性无关。若x ∗ \mathbf{x}^* x ∗ 是 MP
的局部最优解,则存在两组实数λ i ∗ , μ j ∗ \lambda_i^*,\mu_j^* λ i ∗ , μ j ∗ 使得:
∇ f ( x ∗ ) + ∑ i ∈ I ( x ∗ ) λ i ∗ ∇ g i ( x ∗ ) + ∑ j μ j ∗ ∇ h j ( x ∗ ) = 0 λ i ∗ ≥ 0 , i ∈ I ( x ∗ ) \nabla f(\mathbf{x}^*)+\sum_{i\in I(\mathbf{x}^*)}\lambda_i^*\nabla g_i(\mathbf{x}^*)+\sum_j\mu_j^*\nabla h_j(\mathbf{x}^*)=0\\
\lambda_i^*\geq 0,i\in I(\mathbf{x}^*)
∇ f ( x ∗ ) + i ∈ I ( x ∗ ) ∑ λ i ∗ ∇ g i ( x ∗ ) + j ∑ μ j ∗ ∇ h j ( x ∗ ) = 0 λ i ∗ ≥ 0 , i ∈ I ( x ∗ )
其中向量组∇ g i ( x ∗ ) , i ∈ I ( x ∗ ) , ∇ h j ( x ∗ ) \nabla g_i(\mathbf{x}^*),i\in I(\mathbf{x}^*),\nabla h_j(\mathbf{x}^*) ∇ g i ( x ∗ ) , i ∈ I ( x ∗ ) , ∇ h j ( x ∗ ) 线性无关称为一个约束规范条件 。有各种各样的约束规范条件,当然这个是比较简单的一种。
式子∇ f ( x ∗ ) + ∑ i ∈ I ( x ∗ ) λ i ∗ ∇ g i ( x ∗ ) + ∑ j μ j ∗ ∇ h j ( x ∗ ) = 0 \nabla f(\mathbf{x}^*)+\sum_{i\in I(\mathbf{x}^*)}\lambda_i^*\nabla g_i(\mathbf{x}^*)+\sum_j\mu_j^*\nabla h_j(\mathbf{x}^*)=0 ∇ f ( x ∗ ) + ∑ i ∈ I ( x ∗ ) λ i ∗ ∇ g i ( x ∗ ) + ∑ j μ j ∗ ∇ h j ( x ∗ ) = 0 被称为 MP
的 Kuhn-Tucker 条件 ,凡是满足 K-T 条件的点被称为 MP
的 K-T 点。上述定理说明, MP
的局部最优解一定是 MP
的 K-T 点。
下面我们来考虑一下 K-T 条件的几何意义。首先若不考虑h j h_j h j 的部分,则有:
− ∇ f ( x ∗ ) = ∑ i ∈ I ( x ∗ ) λ i ∗ ∇ g i ( x ∗ ) , λ i ∗ ≥ 0 -\nabla f(\mathbf{x}^*)=\sum_{i\in I(\mathbf{x}^*)}\lambda_i^*\nabla g_i(\mathbf{x}^*),\quad \lambda_i^*\ge 0
− ∇ f ( x ∗ ) = i ∈ I ( x ∗ ) ∑ λ i ∗ ∇ g i ( x ∗ ) , λ i ∗ ≥ 0
可以发现负梯度− ∇ f ( x ∗ ) -\nabla f(\mathbf{x}^*) − ∇ f ( x ∗ ) 落在了由∇ g i ( x ∗ ) , i ∈ I ( x ∗ ) \nabla g_i(\mathbf{x}^*),i\in I(\mathbf{x}^*) ∇ g i ( x ∗ ) , i ∈ I ( x ∗ ) 的线性组合的集合中 :
C = { y ∣ y = ∑ i ∈ I ( x ∗ ) α i ∇ g i ( x ∗ ) , α i ≥ 0 } C=\{\mathbf{y}\;|\;\mathbf{y}=\sum_{i\in I(\mathbf{x}^*)}\alpha_i\nabla g_i(\mathbf{x}^*),\alpha_i\geq 0\}
C = { y ∣ y = i ∈ I ( x ∗ ) ∑ α i ∇ g i ( x ∗ ) , α i ≥ 0 }
上述集合称为由∇ g i ( x ∗ ) \nabla g_i(\mathbf{x}^*) ∇ g i ( x ∗ ) 张成的锥 。注意,由于α i ≥ 0 \alpha_i\geq 0 α i ≥ 0 ,所以是锥而不是子空间。
相比之下,若考虑h j h_j h j 的部分,则有:
− ∇ f ( x ∗ ) = ∑ j μ j ∗ ∇ h j ( x ∗ ) -\nabla f(\mathbf{x}^*)=\sum_j\mu_j^*\nabla h_j(\mathbf{x}^*)
− ∇ f ( x ∗ ) = j ∑ μ j ∗ ∇ h j ( x ∗ )
这只能说明负梯度落在子空间内,而不是锥内。此外,这个条件就是拉格朗日乘子法中的条件。
若在 K-T 条件中,要求g i ( x ) , i ∈ I g_i(\mathbf{x}),i\in I g i ( x ) , i ∈ I 在x ∗ \mathbf{x}^* x ∗ 处均可微,那么 K-T 条件可进一步为:
∇ f ( x ∗ ) + ∑ i = 1 p λ i ∗ ∇ g i ( x ∗ ) + ∑ j μ j ∗ ∇ h j ( x ∗ ) = 0 λ i ∗ ≥ 0 , i = 1 , . . . , p λ i ∗ g i ( x ∗ ) = 0 , i = 1 , . . . , p \nabla f(\mathbf{x}^*)+\sum_{i=1}^p\lambda_i^*\nabla g_i(\mathbf{x}^*)+\sum_j\mu_j^*\nabla h_j(\mathbf{x}^*)=0\\
\lambda_i^*\geq 0,i=1,...,p\\
\lambda_i^*g_i(\mathbf{x}^*)=0,i=1,...,p
∇ f ( x ∗ ) + i = 1 ∑ p λ i ∗ ∇ g i ( x ∗ ) + j ∑ μ j ∗ ∇ h j ( x ∗ ) = 0 λ i ∗ ≥ 0 , i = 1 , . . . , p λ i ∗ g i ( x ∗ ) = 0 , i = 1 , . . . , p
为什么现在不需要区分I ( x ∗ ) I(\mathbf{x}^*) I ( x ∗ ) 了呢?就是因为有了互补松紧条件 (λ i ∗ g i ( x ∗ ) = 0 \lambda_i^* g_i(\mathbf{x}^*)=0 λ i ∗ g i ( x ∗ ) = 0 ),若i ∉ I ( x ∗ i\notin I(\mathbf{x}^* i ∈ / I ( x ∗ ),则λ i ∗ = 0 \lambda_i^*=0 λ i ∗ = 0 。
引入 Lagrange 函数:
L ( x , λ , μ ) = f ( x ) + ∑ i = 1 p λ i g i ( x ) + ∑ j = 1 q μ j h j ( x ) L(\mathbf{x},\lambda,\mu)=f(\mathbf{x})+\sum_{i=1}^p\lambda_ig_i(\mathbf{x})+\sum_{j=1}^q\mu_jh_j(\mathbf{x})
L ( x , λ , μ ) = f ( x ) + i = 1 ∑ p λ i g i ( x ) + j = 1 ∑ q μ j h j ( x )
MP
问题的 K-T 条件可写为:
{ ∇ x L ( x ∗ , λ ∗ , μ ∗ ) = 0 λ i ∗ g i ( x ∗ ) = 0 , i = 1 , . . , p λ i ∗ ≥ 0 , i = 1 , . . . , p \begin{cases}
\nabla_x L(\mathbf{x}^*,\lambda^*,\mu^*)=0\\
\lambda_i^*g_i(\mathbf{x}^*)=0,i=1,..,p\\
\lambda_i^*\geq 0,i=1,...,p
\end{cases}
⎩ ⎪ ⎪ ⎨ ⎪ ⎪ ⎧ ∇ x L ( x ∗ , λ ∗ , μ ∗ ) = 0 λ i ∗ g i ( x ∗ ) = 0 , i = 1 , . . , p λ i ∗ ≥ 0 , i = 1 , . . . , p
其中,λ , μ \lambda,\mu λ , μ 称为 Lagrange 乘子 。
定理 :对于 MP
问题,若f , g i ( i ∈ I ) , h j f,g_i(i\in I),h_j f , g i ( i ∈ I ) , h j 在x ∗ \mathbf{x}^* x ∗ 处连续可微,且x ∗ \mathbf{x}^* x ∗ 满足 K-T 条件,且f , g i ( i ∈ I ) , h j f,g_i(i\in I),h_j f , g i ( i ∈ I ) , h j 在x ∗ \mathbf{x}^* x ∗ 是凸函数,且h j h_j h j 是线性函数,则x ∗ \mathbf{x}^* x ∗ 是 MP
问题的整体最优解。
所以一个基本的求解方法就可以为:
确定f , g , h f,g,h f , g , h 连续可微性(实际中一般用的函数都是处处连续可微的)。
确定f , g f,g f , g 是否凸,h h h 是否线性。
列出 K-T 条件和可行性条件,并进行求解。
检验解是否满足上述定理的要求。
# 简约梯度法
考虑如下问题:
{ m i n f ( x ) = 0 s , t . A x = b x ≥ 0 \begin{cases}
min & f(\mathbf{x})=0\\
s,t. & A\mathbf{x}=\mathbf{b}\\
& \mathbf{x}\geq 0
\end{cases}
⎩ ⎪ ⎪ ⎨ ⎪ ⎪ ⎧ m i n s , t . f ( x ) = 0 A x = b x ≥ 0
其中A A A 是一个秩为m m m 的m × n m\times n m × n 的矩阵。现作如下约束非退化假设 :
每个可行点至少有m m m 个大于等于 0 的分量。
A A A 的任意m m m 列线性无关。
类似之前的单纯形法,我们仍可以把x \mathbf{x} x 拆分为基向量和非基向量两部分,即:
f ( x ) = f ( x B , x N ) f(\mathbf{x})=f(\mathbf{x}_B,\mathbf{x}_N)
f ( x ) = f ( x B , x N )
仍有B x B + N x N = b B\mathbf{x}_B+N\mathbf{x}_N=\mathbf{b} B x B + N x N = b ,故f f f 可以表示为关于x N \mathbf{x}_N x N 的函数:
F ( x N ) = f ( x B , x N ) = f ( B − 1 b − B − 1 N x N , x N ) F(\mathbf{x}_N)=f(\mathbf{x}_B,\mathbf{x}_N)=f(B^{-1}\mathbf{b}-B^{-1}N\mathbf{x}_N,\mathbf{x}_N)
F ( x N ) = f ( x B , x N ) = f ( B − 1 b − B − 1 N x N , x N )
对它求梯度,有:
∇ F ( x N ) = − ( B − 1 N ) T ∇ B f ( x ) + ∇ N f ( x ) \nabla F(\mathbf{x}_N)=-(B^{-1}N)^T\nabla_B f(\mathbf{x})+\nabla_N f(\mathbf{x})
∇ F ( x N ) = − ( B − 1 N ) T ∇ B f ( x ) + ∇ N f ( x )
上述梯度称为f f f 在x \mathbf{x} x 处的简约梯度 。其中,∇ B f ( x ) \nabla_B f(\mathbf{x}) ∇ B f ( x ) 是f f f 相对于那些基分量求偏导组成的向量,∇ N f ( x ) \nabla_N f(\mathbf{x}) ∇ N f ( x ) 是对非基分量求偏导组成的向量。即有∇ f ( x ) = ( ∇ B f ( x ) ∇ N f ( x ) ) \nabla f(\mathbf{x})=\begin{pmatrix}\nabla_B f(\mathbf{x})\\ \nabla_N f(\mathbf{x})\end{pmatrix} ∇ f ( x ) = ( ∇ B f ( x ) ∇ N f ( x ) ) 。
下面我们考虑如何构造搜索方向p = ( p B p N ) \mathbf{p}=\begin{pmatrix}\mathbf{p}_B\\ \mathbf{p}_N\end{pmatrix} p = ( p B p N ) , 对于一个x \mathbf{x} x 的最大的m m m 个分量组成的向量为x B > 0 \mathbf{x}_B>0 x B > 0 (非退化假设),并记下标集合为I B I_B I B 。
一个朴素的想法就是p N = − ∇ F ( x N ) \mathbf{p}_N=-\nabla F(\mathbf{x}_N) p N = − ∇ F ( x N ) 。这样作会导致x ≥ 0 \mathbf{x}\geq 0 x ≥ 0 的条件被破坏。想象一下如果沿着− ∇ F ( x N ) -\nabla F(\mathbf{x}_N) − ∇ F ( x N ) 的方向一维搜索,那x N \mathbf{x}_N x N 中如果有一个分量为 0,那么对于x N − t ∇ F ( x N ) \mathbf{x}_N-t\nabla F(\mathbf{x}_N) x N − t ∇ F ( x N ) ,我们就无法取足够小的t t t 使其为正。
我们这样选取p N \mathbf{p}_N p N 的分量:
∀ i ∉ I B p i = { − ∇ F ( x N ) i ∇ F ( x N ) i ≤ 0 − x i ∇ F ( x N ) i ∇ F ( x N ) i > 0 \forall i\notin I_B\\
p_i=\begin{cases}
-\nabla F(\mathbf{x}_N)_i & \nabla F(\mathbf{x}_N)_i\leq 0\\
-x_i\nabla F(\mathbf{x}_N)_i & \nabla F(\mathbf{x}_N)_i>0
\end{cases}
∀ i ∈ / I B p i = { − ∇ F ( x N ) i − x i ∇ F ( x N ) i ∇ F ( x N ) i ≤ 0 ∇ F ( x N ) i > 0
这样可以巧妙地避免上述问题,因为x i ( 1 − t ∇ F ( x N ) i ) x_i(1-t\nabla F(\mathbf{x}_N)_i) x i ( 1 − t ∇ F ( x N ) i ) 的话,若x i = 0 x_i=0 x i = 0 则无论怎么取t t t 也不影响,若x i > 0 x_i>0 x i > 0 ,则可以选择足够小的t t t 使得1 − t ∇ F ( x N ) i > 0 1-t\nabla F(\mathbf{x}_N)_i>0 1 − t ∇ F ( x N ) i > 0 。
当然另一方面我们还希望保持A x = b A\mathbf{x}=\mathbf{b} A x = b 的可行性,即:
∀ t , A ( x + t p ) = b \forall t,A(\mathbf{x}+t\mathbf{p})=\mathbf{b}
∀ t , A ( x + t p ) = b
那么我们就想让A p = 0 A\mathbf{p}=0 A p = 0 。就可以解得:
p B = − B − 1 N p N \mathbf{p}_B=-B^{-1}N\mathbf{p}_N
p B = − B − 1 N p N
如此我们可以定下,若给了尝试点x \mathbf{x} x 满足A x = b , x ≥ 0 A\mathbf{x}=\mathbf{b},\mathbf{x}\geq 0 A x = b , x ≥ 0 ,构造一个搜索方向为:
{ p N = { − ∇ F ( x N ) i ∇ F ( x N ) i ≤ 0 − x i ∇ F ( x N ) i ∇ F ( x N ) i > 0 p B = − B − 1 N p N \begin{cases}
\mathbf{p}_N=\begin{cases}
-\nabla F(\mathbf{x}_N)_i & \nabla F(\mathbf{x}_N)_i\leq 0\\
-x_i\nabla F(\mathbf{x}_N)_i & \nabla F(\mathbf{x}_N)_i>0
\end{cases}\\
\mathbf{p}_B=-B^{-1}N\mathbf{p}_N
\end{cases}
⎩ ⎪ ⎪ ⎨ ⎪ ⎪ ⎧ p N = { − ∇ F ( x N ) i − x i ∇ F ( x N ) i ∇ F ( x N ) i ≤ 0 ∇ F ( x N ) i > 0 p B = − B − 1 N p N
定理 :对于非线性规划问题,设f f f 是可微函数,p \mathbf{p} p 是上述方法确定的搜索方向,则:
p ≠ 0 \mathbf{p}\neq 0 p = 0 时,p \mathbf{p} p 是f f f 在x \mathbf{x} x 处的可行下降方向。
p = 0 \mathbf{p}=0 p = 0 得充要条件是x \mathbf{x} x 是原问题的 K-T 点。
证明:
关于 1,可行性在构造过程中已经说明了。关于下降,其实有:
∇ f ( x ) T p = ∇ F ( x N ) T p N ≤ 0 \nabla f(\mathbf{x})^T\mathbf{p}=\nabla F(\mathbf{x}_N)^T\mathbf{p}_N\leq 0
∇ f ( x ) T p = ∇ F ( x N ) T p N ≤ 0
由本章 "无约束优化" 的第一个定理,它是是一个函数下降方向。
关于 2,我们先证明若点x \mathbf{x} x 满足 K-T 条件,则p = 0 \mathbf{p}=0 p = 0 。这个一次的A x = b A\mathbf{x}=\mathbf{b} A x = b 满足 K-T 条件,即:
{ ∇ f ( x ) − λ ∗ + A T μ ∗ = 0 λ ∗ T x = 0 λ ∗ ≥ 0 \begin{cases}
\nabla f(\mathbf{x})-\lambda^*+A^T\mu^*=0\\
\lambda^{*T}\mathbf{x}=0\\
\lambda^*\geq 0
\end{cases}
⎩ ⎪ ⎪ ⎨ ⎪ ⎪ ⎧ ∇ f ( x ) − λ ∗ + A T μ ∗ = 0 λ ∗ T x = 0 λ ∗ ≥ 0
同时我们可以把λ ∗ \lambda^* λ ∗ 分解为( λ B ∗ , λ N ∗ ) (\lambda_B^*,\lambda_N^*) ( λ B ∗ , λ N ∗ ) ,然后因为x B > 0 \mathbf{x}_B>0 x B > 0 ,由互补松紧性,有λ B ∗ = 0 \lambda_B^*=0 λ B ∗ = 0 。又因为:
∇ B f ( x ) − λ B ∗ + B T μ ∗ = 0 \nabla_B f(\mathbf{x})-\lambda_B^*+B^T\mu^*=0
∇ B f ( x ) − λ B ∗ + B T μ ∗ = 0
注意!这里逻辑在于并不是A + B = 0 ⇒ A = 0 ∧ B = 0 A+B=0\Rightarrow A=0\wedge B=0 A + B = 0 ⇒ A = 0 ∧ B = 0 ,而是若一个向量为 0,则它的所有分量都为 0。所以我们可以从∇ f ( x ) − λ ∗ + A T μ ∗ = 0 \nabla f(\mathbf{x})-\lambda^*+A^T\mu^*=0 ∇ f ( x ) − λ ∗ + A T μ ∗ = 0 推出上面这个式子。
再根据简约梯度的式子,有:
∵ ∇ f ( x ) − λ ∗ + A T μ ∗ = 0 ∴ ∇ B f ( x ) − λ B ∗ + B T μ ∗ = 0 ∵ λ B ∗ = 0 ∴ μ ∗ = − ( B T ) − 1 ∇ B f ( x ) ∵ ∇ f ( x ) − λ ∗ + A T μ ∗ = 0 ∴ ∇ N f ( x ) − λ N ∗ + N T μ ∗ = 0 ∴ λ N ∗ = ∇ F ( x N ) \begin{aligned}
&\because\nabla f(\mathbf{x})-\lambda^*+A^T\mu^*=0\\
&\therefore\nabla_B f(\mathbf{x})-\lambda_B^*+B^T\mu^*=0\\
&\because \lambda_B^*=0\\
&\therefore\mu^*=-(B^T)^{-1}\nabla_B f(\mathbf{x})\\
&\because\nabla f(\mathbf{x})-\lambda^*+A^T\mu^*=0\\
&\therefore\nabla_N f(\mathbf{x})-\lambda_N^*+N^T\mu^*=0\\
&\therefore \lambda_N^*=\nabla F(\mathbf{x}_N)\\
\end{aligned}
∵ ∇ f ( x ) − λ ∗ + A T μ ∗ = 0 ∴ ∇ B f ( x ) − λ B ∗ + B T μ ∗ = 0 ∵ λ B ∗ = 0 ∴ μ ∗ = − ( B T ) − 1 ∇ B f ( x ) ∵ ∇ f ( x ) − λ ∗ + A T μ ∗ = 0 ∴ ∇ N f ( x ) − λ N ∗ + N T μ ∗ = 0 ∴ λ N ∗ = ∇ F ( x N )
又因为λ ∗ T x = 0 , λ ∗ ≥ 0 \lambda^{*T}\mathbf{x}=0,\lambda^*\geq 0 λ ∗ T x = 0 , λ ∗ ≥ 0 ,根据p \mathbf{p} p 的构造方法,故有p N = 0 \mathbf{p}_N=0 p N = 0 。所以p B \mathbf{p}_B p B 也为 0。
反过来的话,很显然我们可以取λ B ∗ = 0 , λ N ∗ = ∇ F ( x N ) , μ ∗ = − ( B T ) − 1 ∇ B f ( x ) \lambda_B^*=0,\lambda_N^*=\nabla F(\mathbf{x}_N),\mu^*=-(B^T)^{-1}\nabla_B f(\mathbf{x}) λ B ∗ = 0 , λ N ∗ = ∇ F ( x N ) , μ ∗ = − ( B T ) − 1 ∇ B f ( x ) 即可验证满足 K-T 条件。
证毕
有了以上搜索方向,我们再回看一下沿着这个方向一维搜索的过程。给定点x \mathbf{x} x 和搜索方向p \mathbf{p} p ,我们希望:
∀ t > 0 , x + t p ≥ 0 \forall t>0,\mathbf{x}+t\mathbf{p}\geq 0
∀ t > 0 , x + t p ≥ 0
于是t t t 的上界为:
{ + ∞ p ≥ 0 m i n 1 ≤ i ≤ n { − x i p i ∣ p i < 0 } o t h e r w i s e \begin{cases}
+\infty & \mathbf{p}\geq 0\\
\mathop{min}\limits_{1\leq i\leq n}\{-\frac{x_i}{p_i}\;|\;p_i<0\}&otherwise
\end{cases}
{ + ∞ 1 ≤ i ≤ n min { − p i x i ∣ p i < 0 } p ≥ 0 o t h e r w i s e
在非退化假设下,上述 Wolfe 简约梯度方法 是收敛的。我们总结它的计算步骤为:
选取初始可行点x \mathbf{x} x 。
设I B I_B I B 是x \mathbf{x} x 的最大的m m m 个分量的下标集合,A = ( B , N ) A=(B,N) A = ( B , N ) 。计算:
∇ f ( x ) = ( ∇ B f ( x ) ∇ N f ( x ) ) \nabla f(\mathbf{x})=\begin{pmatrix}
\nabla_B f(\mathbf{x})\\
\nabla_N f(\mathbf{x})
\end{pmatrix}
∇ f ( x ) = ( ∇ B f ( x ) ∇ N f ( x ) )
计算简约梯度:
∇ F ( x N ) = − ( B − 1 N ) T ∇ B f ( x ) + ∇ N f ( x ) \nabla F(\mathbf{x}_N)=-(B^{-1}N)^T\nabla_B f(\mathbf{x})+\nabla_N f(\mathbf{x})
∇ F ( x N ) = − ( B − 1 N ) T ∇ B f ( x ) + ∇ N f ( x )
用下述方法构造搜索方向p \mathbf{p} p :
{ p N = { − ∇ F ( x N ) i ∇ F ( x N ) i ≤ 0 − x i ∇ F ( x N ) i ∇ F ( x N ) i > 0 p B = − B − 1 N p N \begin{cases}
\mathbf{p}_N=\begin{cases}
-\nabla F(\mathbf{x}_N)_i & \nabla F(\mathbf{x}_N)_i\leq 0\\
-x_i\nabla F(\mathbf{x}_N)_i & \nabla F(\mathbf{x}_N)_i>0
\end{cases}\\
\mathbf{p}_B=-B^{-1}N\mathbf{p}_N
\end{cases}
⎩ ⎪ ⎪ ⎨ ⎪ ⎪ ⎧ p N = { − ∇ F ( x N ) i − x i ∇ F ( x N ) i ∇ F ( x N ) i ≤ 0 ∇ F ( x N ) i > 0 p B = − B − 1 N p N
进行一维搜索,确定m i n f ( x + t p ) min\;f(\mathbf{x}+t\mathbf{p}) m i n f ( x + t p ) 。
重复 2-5 直到满足停止条件。
# 惩罚函数法
一个自然的想法就是,对于一个带约束的优化问题:m i n x ∈ X f ( x ) \mathop{min}\limits_{\mathbf{x}\in X}f(\mathbf{x}) x ∈ X min f ( x ) ,我们可以设置一个罚函数 :
p c ( x ) = { 0 x ∈ X c o t h e r w i s e p_c(\mathbf{x})=\begin{cases}
0 & \mathbf{x}\in X\\
c & otherwise
\end{cases}
p c ( x ) = { 0 c x ∈ X o t h e r w i s e
其中c c c 反映了惩罚力度 ,然后把原问题转化为无约束的规划问题m i n f ( x ) + p c ( x ) min f(\mathbf{x})+p_c(\mathbf{x}) m i n f ( x ) + p c ( x ) 。
但是这样不好的是显然这个罚函数有跳跃,即并不连续可微。取而代之地可以选择一个新的罚函数:
p c ( c ) = c ∑ i = 1 p m a x ( g i ( x ) , 0 ) 2 + c 2 ∑ j = 1 q h j ( x ) 2 p_c(\mathbf{c})=c\sum_{i=1}^pmax(g_i(\mathbf{x}),0)^2+\frac{c}{2}\sum_{j=1}^qh_j(\mathbf{x})^2
p c ( c ) = c i = 1 ∑ p m a x ( g i ( x ) , 0 ) 2 + 2 c j = 1 ∑ q h j ( x ) 2
可以证明,当f , g i , h i f,g_i,h_i f , g i , h i 均连续可微时,上述罚函数也是连续可微的。
然而在实际过程中,一下就选取到合适的惩罚因子c c c 是很困难的。相反,我们会构造一个等比数列:{ c 0 , α c 0 , α 2 c 0 , . . . } \{c_0,\alpha c_0,\alpha^2c_0,...\} { c 0 , α c 0 , α 2 c 0 , . . . } 这样同时求解若干个无约束优化问题。又因为乘法因子等比,所以在并行地求解过程中,乘法函数也很好计算p α c 0 = α p c 0 p_{\alpha c_0}=\alpha p_{c_0} p α c 0 = α p c 0 ,即{ p c 0 ( x ) , α p c 0 ( x ) , α 2 p c 0 ( x ) , . . . } \{p_{c_0}(\mathbf{x}),\alpha p_{c_0}(\mathbf{x}),\alpha^2p_{c_0}(\mathbf{x}),...\} { p c 0 ( x ) , α p c 0 ( x ) , α 2 p c 0 ( x ) , . . . } 可一起计算。最后在所有惩罚因子中选取最小的那个。
此外,我们也可以选择障碍函数 。仅考虑含不等式的约束g i ( x ) ≤ 0 g_i(\mathbf{x})\leq 0 g i ( x ) ≤ 0 的话,我们可以设置障碍函数:
B c ( x ) = − c ∑ i = 1 p 1 g i ( x ) B_c(\mathbf{x})=-c\sum_{i=1}^p\frac{1}{g_i(\mathbf{x})}
B c ( x ) = − c i = 1 ∑ p g i ( x ) 1
故趋近于边界时,总会有一个g i ( x ) g_i(\mathbf{x}) g i ( x ) 从负数趋近于 0,即障碍函数会趋近于无穷大。
由于障碍函数增长速度很快,在实际中我们往往要构造一个单调减小的等比数列,然后求得极优值。