不受约束的问题
非线性规划问题分为两种问题:无约束和约束。 不受约束的优化问题是形式上的问题
min f ( x ) , x = [ x 1 , x 2 , ⋯ , x n ] T ∈ R n ( 1 ) \min \boldsymbol{f}\left( \boldsymbol{x} \right) ,\boldsymbol{x}=\left[ \boldsymbol{x}_1,\boldsymbol{x}_2,\cdots ,\boldsymbol{x}_{\boldsymbol{n}} \right] ^{\boldsymbol{T}}\in \mathbb{R}^{\boldsymbol{n}}\,\, \left( 1 \right) minf(x),x=[x1,x2,⋯,xn]T∈Rn(1)
一个一般的约束优化问题包括方程(1)中具有相等约束的目标函数:
E ( x ) = 0 ( 2 ) \boldsymbol{E}\left( \boldsymbol{x} \right) =0 \left( 2 \right) E(x)=0(2)
和不平等约束:
I ( x ) ⩽ 0 ( 3 ) \boldsymbol{I}\left( \boldsymbol{x} \right) \leqslant 0 \left( 3 \right) I(x)⩽0(3)
其中, x ∈ R n , E ( x ) ∈ R p 和 I ( x ) ∈ R q \boldsymbol{x}\in \mathbb{R}^{\boldsymbol{n}},\boldsymbol{E}\left( \boldsymbol{x} \right) \in \mathbb{R}^{\boldsymbol{p}}和\,\,\boldsymbol{I}\left( \boldsymbol{x} \right) \in \mathbb{R}^{\boldsymbol{q}} x∈Rn,E(x)∈Rp和I(x)∈Rq
在本节中,将考虑上述问题(1)。如果 x ∗ = [ x 1 ∗ , x 2 ∗ , ⋯ , x n ∗ ] T ∈ R n \boldsymbol{x}^*=\left[ \boldsymbol{x}_{1}^{*},\boldsymbol{x}_{2}^{*},\cdots ,\boldsymbol{x}_{\boldsymbol{n}}^{*} \right] ^{\boldsymbol{T}}\in \mathbb{R}^{\boldsymbol{n}} x∗=[x1∗,x2∗,⋯,xn∗]T∈Rn是问题的最优解,则
g ( x ∗ ) = 0 ( 4 ) y T H ( x ∗ ) y ⩾ 0 , ∀ y ∈ R n ( 5 ) \boldsymbol{g}\left( \boldsymbol{x}^* \right) =0 \left( 4 \right) \\\boldsymbol{y}^{\boldsymbol{T}}\boldsymbol{H}\left( \boldsymbol{x}^* \right) \boldsymbol{y}\geqslant 0,\forall \boldsymbol{y}\in \mathbb{R}^{\boldsymbol{n}}\,\, \left( 5 \right) g(x∗)=0(4)yTH(x∗)y⩾0,∀y∈Rn(5)
其中 g ( x ) = ∇ f ( x ) \boldsymbol{g}\left( \boldsymbol{x} \right) =\nabla \boldsymbol{f}\left( \boldsymbol{x} \right) g(x)=∇f(x) 是梯度向量, H ( x ) \boldsymbol{H}\left( \boldsymbol{x} \right) H(x) 是由下式定义的黑森矩阵,
g ( x ) = ∇ f ( x ) = [ ∂ f ( x ) ∂ x 1 ∂ f ( x ) x 2 ⋮ ∂ f ( x ) ∂ x n ] H ( x ) = [ ∂ 2 f ( x ) ∂ x 1 2 ∂ 2 f ( x ) ∂ x 1 ∂ x 2 ⋯ ∂ 2 f ( x ) ∂ x 1 ∂ x n ∂ 2 f ( x ) ∂ x 2 ∂ x 1 ∂ 2 f ( x ) ∂ x 2 2 ⋯ ∂ 2 f ( x ) ∂ x 2 ∂ x n ⋮ ⋮ ⋱ ⋮ ∂ 2 f ( x ) ∂ x n ∂ x 1 ∂ 2 f ( x ) ∂ x n ∂ x 2 ⋯ ∂ 2 f ( x ) ∂ x n 2 ] \boldsymbol{g}\left( \boldsymbol{x} \right) =\nabla \boldsymbol{f}\left( \boldsymbol{x} \right) =\left[ \begin{array}{c} \frac{\partial \boldsymbol{f}\left( \boldsymbol{x} \right)}{\partial \boldsymbol{x}_1}\\ \frac{\partial \boldsymbol{f}\left( \boldsymbol{x} \right)}{\boldsymbol{x}_2}\\ \vdots\\ \frac{\partial \boldsymbol{f}\left( \boldsymbol{x} \right)}{\partial \boldsymbol{x}_{\boldsymbol{n}}}\\\end{array} \right] \\\boldsymbol{H}\left( \boldsymbol{x} \right) =\left[ \begin{matrix} \frac{\partial ^2\boldsymbol{f}\left( \boldsymbol{x} \right)}{\partial \boldsymbol{x}_{1}^{2}}& \frac{\partial ^2\boldsymbol{f}\left( \boldsymbol{x} \right)}{\partial \boldsymbol{x}_1\partial \boldsymbol{x}_2}& \cdots& \frac{\partial ^2\boldsymbol{f}\left( \boldsymbol{x} \right)}{\partial \boldsymbol{x}_1\partial \boldsymbol{x}_{\boldsymbol{n}}}\\ \frac{\partial ^2\boldsymbol{f}\left( \boldsymbol{x} \right)}{\partial \boldsymbol{x}_2\partial \boldsymbol{x}_1}& \frac{\partial ^2\boldsymbol{f}\left( \boldsymbol{x} \right)}{\partial \boldsymbol{x}_{2}^{2}}& \cdots& \frac{\partial ^2\boldsymbol{f}\left( \boldsymbol{x} \right)}{\partial \boldsymbol{x}_2\partial \boldsymbol{x}_{\boldsymbol{n}}}\\ \vdots& \vdots& \ddots& \vdots\\ \frac{\partial ^2\boldsymbol{f}\left( \boldsymbol{x} \right)}{\partial \boldsymbol{x}_{\boldsymbol{n}}\partial \boldsymbol{x}_1}& \frac{\partial ^2\boldsymbol{f}\left( \boldsymbol{x} \right)}{\partial \boldsymbol{x}_{\boldsymbol{n}}\partial \boldsymbol{x}_2}& \cdots& \frac{\partial ^2\boldsymbol{f}\left( \boldsymbol{x} \right)}{\partial \boldsymbol{x}_{\boldsymbol{n}}^{2}}\\\end{matrix} \right] g(x)=∇f(x)=⎣⎢⎢⎢⎢⎡∂x1∂f(x)x2∂f(x)⋮∂xn∂f(x)⎦⎥⎥⎥⎥⎤H(x)=⎣⎢⎢⎢⎢⎢⎡∂x12∂2f(x)∂x2∂x1∂2f(x)⋮∂xn∂x1∂2f(x)∂x1∂x2∂2f(x)∂x22∂2f(x)⋮∂xn∂x2∂2f(x)⋯⋯⋱⋯∂x1∂xn∂2f(x)∂x2∂xn∂2f(x)⋮∂xn2∂2f(x)⎦⎥⎥⎥⎥⎥⎤
等式(5)表示黑森矩阵是一个正半定数。 式(4)-(5)是 x ∗ \boldsymbol{x}^* x∗的必要最优条件。 如果条件(5)替换为条件:
y T H ( x ∗ ) y > 0 , ∀ y ∈ R n ( 6 ) \boldsymbol{y}^{\boldsymbol{T}}\boldsymbol{H}\left( \boldsymbol{x}* \right) \boldsymbol{y}>0,\forall \boldsymbol{y}\in \mathbb{R}^{\boldsymbol{n}}\,\, \left( 6 \right) yTH(x∗)y>0,∀y∈Rn(6)
(即,黑森矩阵是正定的),则条件(4)-(6)是充分的最优性条件。
用于求解(1)的数值方法是迭代的。 他们将从解 x ∗ \boldsymbol{x}^* x∗的初始猜测 x ( 0 ) \boldsymbol{x}^{\left( 0 \right)} x(0)开始,然后构造解 x ( 0 ) , x ( 1 ) , x ( 2 ) , ⋯ , \boldsymbol{x}^{\left( 0 \right)},\boldsymbol{x}^{\left( 1 \right)},\boldsymbol{x}^{\left( 2 \right)},\cdots , x(0),x(1),x(2),⋯,的序列,其中 f ( x ( 0 ) ) > f ( x ( 1 ) ) > ⋯ \boldsymbol{f}\left( \boldsymbol{x}^{\left( 0 \right)} \right) >\boldsymbol{f}\left( \boldsymbol{x}^{\left( 1 \right)} \right) >\cdots f(x(0))>f(x(1))>⋯ 在迭代 k \boldsymbol{k} k时,数值优化中从点 x ( k ) \boldsymbol{x}^{\left( \boldsymbol{k} \right)} x(k)移至点 x ( k + 1 ) \boldsymbol{x}^{\left( \boldsymbol{k}+1 \right)} x(k+1)通常需要经历两个步骤:第一步是搜索方向 p ( k ) \boldsymbol{p}^{\left( \boldsymbol{k} \right)} p(k)确定,然后在第二步中沿 p ( k ) \boldsymbol{p}^{\left( \boldsymbol{k} \right)} p(k)方向进行线搜索(其中 ∥ p ( k + 1 ) ∥ = 1 \left\| \boldsymbol{p}^{\left( \boldsymbol{k}+1 \right)} \right\| =1 ∥∥p(k+1)∥∥=1)以找到最小点 x ( k + 1 ) = x ( k ) + α p ( k ) \boldsymbol{x}^{\left( \boldsymbol{k}+1 \right)}=\boldsymbol{x}^{\left( \boldsymbol{k} \right)}+\boldsymbol{\alpha p}^{\left( \boldsymbol{k} \right)} x(k+1)=x(k)+αp(k),使得 f ( x ( k + 1 ) ) < f ( x ( k ) ) \boldsymbol{f}\left( \boldsymbol{x}^{\left( \boldsymbol{k}+1 \right)} \right) <\boldsymbol{f}\left( \boldsymbol{x}^{\left( \boldsymbol{k} \right)} \right) f(x(k+1))<f(x(k)) 。 如果满足以下条件,则迭代过程在解 x ( k ) \boldsymbol{x}^{\left( \boldsymbol{k} \right)} x(k)处停止。
∥ g ( x ( k ) ) ∥ < ε \left\| \boldsymbol{g}\left( \boldsymbol{x}^{\left( \boldsymbol{k} \right)} \right) \right\| <\boldsymbol{\varepsilon } ∥∥∥g(x(k))∥∥∥<ε
其中 ε < 0 \boldsymbol{\varepsilon }<0 ε<0是任意小的正实数,而 H ( x ( k ) ) \boldsymbol{H}\left( \boldsymbol{x}^{\left( \boldsymbol{k} \right)} \right) H(x(k)) 是正半定数。
无约束优化的数值优化技术关注两个问题:
-
线搜索问题:给定一个函数 f ( x ) \boldsymbol{f}\left( \boldsymbol{x} \right) f(x) ,其梯度 g ( x ) = ∇ f ( x ) \boldsymbol{g}\left( \boldsymbol{x} \right) =\nabla \boldsymbol{f}\left( \boldsymbol{x} \right) g(x)=∇f(x) ,在迭代 k \boldsymbol{k} k下降方向 p ( k ) \boldsymbol{p}^{\left( \boldsymbol{k} \right)} p(k)上的一个点 x ( k ) \boldsymbol{x}^{\left( \boldsymbol{k} \right)} x(k),找到 α ( k ) > 0 \boldsymbol{\alpha }^{\left( \boldsymbol{k} \right)}>0 α(k)>0使得对于 α = α ( k ) \boldsymbol{\alpha }=\boldsymbol{\alpha }^{\left( \boldsymbol{k} \right)} α=α(k),沿着射线 x ( k ) + α p ( k ) \boldsymbol{x}^{\left( \boldsymbol{k} \right)}+\boldsymbol{\alpha p}^{\left( \boldsymbol{k} \right)} x(k)+αp(k)函数 f \boldsymbol{f} f最小化,即
α ( k ) = a r g min α > 0 { f ( x ( k ) + α p ( k ) ) } \boldsymbol{\alpha }^{\left( \boldsymbol{k} \right)}=\boldsymbol{arg}\underset{\boldsymbol{\alpha }>0}{\min}\left\{ \boldsymbol{f}\left( \boldsymbol{x}^{\left( \boldsymbol{k} \right)}+\boldsymbol{\alpha p}^{\left( \boldsymbol{k} \right)} \right) \right\} α(k)=argα>0min{f(x(k)+αp(k))}
-
搜索方向问题:给定一个函数 f ( x ) \boldsymbol{f}\left( \boldsymbol{x} \right) f(x) 和点 x ( k ) \boldsymbol{x}^{\left( \boldsymbol{k} \right)} x(k),在迭代 k \boldsymbol{k} k处,找到一个单位矢量 p ( k ) \boldsymbol{p}^{\left( \boldsymbol{k} \right)} p(k),使得 f ( x ( k ) + α p ( k ) ) \boldsymbol{f}\left( \boldsymbol{x}^{\left( \boldsymbol{k} \right)}+\boldsymbol{\alpha p}^{\left( \boldsymbol{k} \right)} \right) f(x(k)+αp(k)) 对于 0 < α < α max 0<\boldsymbol{\alpha }<\boldsymbol{\alpha }_{\max} 0<α<αmax是递减函数。 即 p ( k ) \boldsymbol{p}^{\left( \boldsymbol{k} \right)} p(k)是下降方向。
数值优化方法的不同之处在于确定搜索方向以及对梯度矢量和黑森矩阵进行近似和(或)更新的方法。
线搜索算法
线搜索算法有两种:精确线搜索和不精确线搜索算法。 精确线搜索算法会寻找精确步长 α ( α = α E x a c t ) \boldsymbol{\alpha }\left( \boldsymbol{\alpha }=\boldsymbol{\alpha }_{\boldsymbol{Exact}} \right) α(α=αExact) ,以便
α E x a c t = a r g min α > 0 { f ( x ( k ) + α p ( k ) ) } \boldsymbol{\alpha }_{\boldsymbol{Exact}}=\boldsymbol{arg}\underset{\boldsymbol{\alpha }>0}{\min}\left\{ \boldsymbol{f}\left( \boldsymbol{x}^{\left( \boldsymbol{k} \right)}+\boldsymbol{\alpha p}^{\left( \boldsymbol{k} \right)} \right) \right\} αExact=argα>0min{f(x(k)+αp(k))}
在数字上不切实际。 不精确的线搜索算法寻找与精确步长 α E x a c t \boldsymbol{\alpha }_{\boldsymbol{Exact}} αExact近似的值。 从初始猜测 α 0 \boldsymbol{\alpha }^0 α0开始,逐步构建步长序列 α 0 , α 1 , α 2 , ⋯ , α k \boldsymbol{\alpha }^0,\boldsymbol{\alpha }^1,\boldsymbol{\alpha }^2,\cdots ,\boldsymbol{\alpha }^{\boldsymbol{k}} α0,α1,α2,⋯,αk的序列,以使 α k ≈ α E x a c t \boldsymbol{\alpha }^{\boldsymbol{k}}\approx \boldsymbol{\alpha }_{\boldsymbol{Exact}} αk≈αExact迭代地完成。
最著名的不精确线搜索算法是回溯线搜索算法,该算法使用两个参数 a \boldsymbol{a} a和 b \boldsymbol{b} b并基于Armijo条件:
f ( x ( k ) + α k p ( k ) ) < f ( x ) + a α k g ( x ( k ) ) T p ( k ) \boldsymbol{f}\left( \boldsymbol{x}^{\left( \boldsymbol{k} \right)}+\boldsymbol{\alpha }^{\boldsymbol{k}}\boldsymbol{p}^{\left( \boldsymbol{k} \right)} \right) <\boldsymbol{f}\left( \boldsymbol{x} \right) +\boldsymbol{a\alpha }^{\boldsymbol{k}}\boldsymbol{g}\left( \boldsymbol{x}^{\left( \boldsymbol{k} \right)} \right) ^{\boldsymbol{T}}\boldsymbol{p}^{\left( \boldsymbol{k} \right)} f(x(k)+αkp(k))<f(x)+aαkg(x(k))Tp(k)
参数 a \boldsymbol{a} a与Armijo的终止条件相关。 参数 0 < b < 1 0<\boldsymbol{b}<1 0<b<1用于在每次迭代中更新步长,其中 α j = b α j − 1 \boldsymbol{\alpha }^{\boldsymbol{j}}=\boldsymbol{b\alpha }^{\boldsymbol{j}-1} αj=bαj−1,从大步长 α 0 \boldsymbol{\alpha }^0 α0(通常= 1)开始。
MATLAB函数LineSearch.m接收一个函数 f \boldsymbol{f} f,代表起始向量 x \boldsymbol{x} x的 f \boldsymbol{f} f梯度的向量 g \boldsymbol{g} g和单位(方向)向量 p \boldsymbol{p} p并返回最佳步长 α \boldsymbol{\alpha } α:
function alpha = LineSearch(f, g, x, p)
a = 0.3 ; b = 0.9 ;
alpha = 1.0 ;
while f(x+alpha*p) > f(x) + a*alpha*g(x)'*p
alpha = b*alpha ;
end
end
函数LineSearch.py的Python代码是:
import numpy as np
def LineSearch(f, g, x, p):
a, b = 0.3, 0.9
alpha = 1.0
while f(x+alpha*p) > f(x) + a*alpha*np.dot(g(x), p):
alpha *= b
return alpha
最陡下降法
牛顿法
拟牛顿法
用MATLAB解决无约束的优化问题
用Gekko解决无约束的优化问题
解决约束的优化问题
MATLAB fmincon函数解决约束优化问题
Python解决约束最小化问题
Gekko Python解决约束优化
详情参阅 - 亚图跨际