多维无约束优化算法

本文详细介绍了多维无约束优化算法,包括最速下降法、牛顿法、拟牛顿法(如阻尼牛顿法、DFP和BFGS算法)、共轭方向法及共轭梯度法。这些方法各有特点,如最速下降法具有全局收敛性但收敛速度慢,牛顿法则快速但计算复杂,而变尺度法则兼顾收敛速度和计算简便。通过选择合适的算法和优化策略,可以有效地寻找目标函数的极小值。
摘要由CSDN通过智能技术生成

在没有任何限制条件下寻求目标函数的极小点:
min ⁡ x ∈ R n f ( x ) \displaystyle \min_{x \in R^n}f(x) xRnminf(x)
求解方法有多种,主要不同点在于如何构造搜索方向

最速下降法

基本思想

在每次迭代中,沿最速下降方向(负梯度方向)进行搜索,每一步沿负梯度方向取最优步长。

  • 只以一阶梯度的信息确定下一步的方向,收敛速度慢;越接近极值点,收敛越慢
  • 一般用于最优化开始的几步搜索

分析

由泰勒公式:
f ( x + λ p ) = f ( x ) + λ Λ T ( x ) p + o ( λ ∣ ∣ p ∣ ∣ ) ( λ > 0 ) \bf{f(x + \lambda p) = f(x) + \lambda \Lambda^T(x)p + o(\lambda ||p||)}(\lambda>0) f(x+λp)=f(x)+λΛT(x)p+o(λp)(λ>0)
由于 Λ T ( x ) p = − ∣ ∣ Λ T ( x ) ∣ ∣ ∣ ∣ p ∣ ∣ c o s θ \bf{\Lambda^T(x)p = - ||\Lambda^T(x)||||p||cos\theta} ΛT(x)p=ΛT(x)pcosθ θ \theta θ p \bf{p} p − Λ ( x ) \bf{-\Lambda(x)} Λ(x)的夹角,当 λ \lambda λ ∣ ∣ p ∣ ∣ ||p|| p固定时,取 c o s θ = 1 cos\theta = 1 cosθ=1可使 Λ T ( x ) p \Lambda^T(x)p ΛT(x)p取最小值, f ( x ) f(x) f(x)下降最多。即当 θ = 0 \theta = 0 θ=0时, f ( x ) f(x) f(x)下降最快,此时有 p = − ∇ f ( x ) \bf{p = - \nabla f(x)} p=f(x)

从而算法的搜索方向 p ( k ) p^{(k)} p(k)为负梯度方向 − ∇ f ( x ) - \nabla f(x) f(x)。故算法的迭代式为;
x ( k + 1 ) = x ( k ) − λ k ∇ f ( x ( k ) ) x^{(k+1)} = x^{(k)} - \lambda_k \nabla f(x^{(k)}) x(k+1)=x(k)λkf(x(k))

算法步骤

(1) 选取初始点估计值 x ( 0 ) x^{(0)} x(0),确定允许误差 ε \varepsilon ε,令 k = 0 k = 0 k=0

(2) 计算目标函数在 x ( k ) x^{(k)} x(k)处的负梯度$ - \nabla (x^{(k)})$

(3) 检查收敛性,若 ∣ ∣ ∇ ( x ( k ) ) ∣ ∣ ≤ ε ||\nabla (x^{(k)})|| \leq \varepsilon (x(k))ε,则 x ∗ = x ( k ) x^* = x^{(k)} x=x(k),计算终止,否则继续

(4) 确定搜索方向

​ 负梯度方向的单位向量: p ( k ) = − ∇ ( x ( k ) ) ∣ ∣ ∇ ( x ( k ) ) ∣ ∣ p^{(k)} = \frac{- \nabla (x^{(k)})}{||\nabla (x^{(k)})||} p(k)=(x(k))(x(k))

(5) 一维搜索

​ 以 x ( k ) x^{(k)} x(k)为起点,沿负梯度方向 p ( k ) p^{(k)} p(k)进行一维搜索,求得最优步长 λ k \lambda_k λk。使得:
f ( x ( k ) + λ k p ( k ) ) = min ⁡ λ > 0 f ( x ( k ) + λ p ( k ) ) f(x^{(k)} + \lambda_k p^{(k)}) = \displaystyle \min_{\lambda >0} f(x^{(k)} + \lambda p^{(k)}) f(x(k)+λkp(k))=λ>0minf(x(k)+λp(k))
下一个迭代点为:
x ( k + 1 ) = x ( k ) − λ k p ( k ) x^{(k+1)} = x^{(k)} - \lambda_k p^{(k)} x(k+1)=x(k)λkp(k)
(6) k = k + 1 k = k + 1 k=k+1,转(2)。

特点

  • 有很好的全局收敛性,任意初始点开始迭代,所产生的点列均收敛。
  • 收敛速度比较慢。所谓“最速方向”,仅仅反映函数 f ( x ) f(x) f(x)在点 x ( k ) x^{(k)} x(k)的局部性质,对整体来说,不一定就是下降最快的方向
  • 由最优步长 λ k \lambda _k λk的意义知: ( p ( k ) ) T ∇ f ( x ( k + 1 ) ) = 0 (p^{(k)})^T \nabla f(x^{(k+1)}) = 0 (p(k))Tf(x(k+1))=0,所以在相邻两次迭代中,搜索方向是相互正交的。

牛顿法

基本思想

每次迭代时,用适当的二次函数近似目标函数,并用迭代点指向近似二次函数极小点的方向来构造搜索方向。

分析

f f f有二阶连续偏导数, x ( k ) x^{(k)} x(k) f f f的极小点的第 k k k次近似, f f f在近似点 x ( k ) x^{(k)} x(k)处泰勒展开,二阶近似:
f ( x ) ≈ φ ( x ) = f ( x ( k ) ) + ∇ ( x ( k ) ) T ( x − x ( k ) ) + 1 2 ( x − x ( k ) ) T H ( x ( k ) ) ( x − x ( k ) ) f(x) \approx \varphi(x) = f(x^{(k)}) + \nabla (x^{(k)})^T (x - x^{(k)}) + \frac{1}{2} (x - x^{(k)})^T H(x^{(k)})(x - x^{(k)}) f(x)φ(x)=f(x(k))+(x(k))T(xx(k))+21(xx(k))TH(x(k))(xx(k))
易见 φ ( x ) \varphi(x) φ(x)是二次函数,求它的极小值:令
∇ φ ( x ) = ∇ ( x ( k ) ) + H ( x ( k ) ) ( x − x ( k ) ) = 0 \nabla \varphi (x) = \nabla (x^{(k)}) + H(x^{(k)})(x - x^{(k)}) = 0 φ(x)=(x(k))+H(x(k))(xx(k))=0
若Hessian矩阵 H ( x ( k ) ) H(x^{(k)}) H(x(k))正定,则 φ ( x ) \varphi(x) φ(x)的驻点就是 φ ( x ) \varphi(x) φ(x)的极小点。以它作为 f f f的极小点的第 k + 1 k+1 k+1次近似,记为 x ( k + 1 ) x^{(k+1)} x(k+1),即:
x ( k + 1 ) = x ( k ) + H − 1 ( x ( k ) ) ∇ ( x ( k ) ) x^{(k+1)} = x^{(k)} + H^{-1}(x^{(k)})\nabla (x^{(k)}) x(k+1)=x(k)+H1(x(k))(x(k))
此式即为牛顿法迭代公式。

算法步骤

(1) 选取初始点估计值 x ( 0 ) x^{(0)} x(0),确定允许误差 ε \varepsilon ε,令 k = 0 k = 0 k=0

(2) 计算目标函数在 x ( k ) x^{(k)} x(k)处的梯度 ∇ ( x ( k ) ) \nabla (x^{(k)}) (x(k))

(3) 检查收敛性,若 ∣ ∣ ∇ ( x ( k ) ) ∣ ∣ ≤ ε ||\nabla (x^{(k)})|| \leq \varepsilon (x(k))ε,则 x ∗ = x ( k ) x^* = x^{(k)} x=x(k),计算终止,否则继续

(4) 构造牛顿方向: p ( k ) = H − 1 ( x ( k ) ) ∇ ( x ( k ) ) p^{(k)} = H^{-1}(x^{(k)})\nabla (x^{(k)}) p(k)=H1(x(k))(x(k))

(5) 更新点列: x ( k + 1 ) = x ( k ) + p ( k ) x^{(k+1)} = x^{(k)} + p^{(k)} x(k+1)=x(k)+p(k)

(6) k = k + 1 k = k + 1 k=k+1,转(2)。

特点

  • 要求 f ( x ) f(x) f(x)是二阶可微函数,有时计算hessian矩阵的逆矩阵十分困难
  • 初始点与极小点的距离不宜太短,较远的话hessian矩阵奇异,此时牛顿方向可能不存在,迭代可能不收敛,甚至下降性也不能保证。

拟牛顿法

就是用梯度差分或者一个近似矩阵 H k H_k Hk去代替 H − 1 ( x ( k ) ) H^{-1}(x^{(k)}) H1(x(k)),以克服牛顿法中需要计算 H − 1 ( x ( k ) ) H^{-1}(x^{(k)}) H1(x(k))的缺点。

不同构造 H k H_k Hk的方法,产生不同的拟牛顿法。

特点
  • 仅需要一阶导数
  • 保持正定,使方法具有下降性质
  • 每次迭代需要 o ( n 2 ) o(n^2) o(n2)次乘法运算,牛顿法需要 o ( n 4 ) o(n^4) o(n4)
  • 搜索方向相互共轭,具有二次终止性

阻尼牛顿法

基本思想

选择较优目标值的初始点是困难的,需要对牛顿法进行修正。

牛顿法中,假设 λ k = 1 \lambda _ k = 1 λk=1,但在阻尼牛顿法中,每一次的迭代需要计算搜索因子 λ k \lambda _ k λk,进行一次一维搜索,以保证算法的收敛或者加快收敛速度。

分析

首先确定搜索方向:
p ( k ) = − ∇ 2 f ( x ( k ) ) − 1 ∇ ( f ( x ( k ) ) ) p^{(k)} = - \nabla ^ 2 f(x^{(k)})^{-1} \nabla (f(x^{(k)})) p(k)=2f(x(k))1(f(x(k)))
然后求解一元函数寻优问题:
f ( x ( k ) + λ k p ( k ) ) = min ⁡ λ > 0 f ( x ( k ) + λ p ( k ) ) f(x^{(k)} + \lambda _ k p^{(k)}) = \displaystyle \min_{\lambda > 0}f(x^{(k)} + \lambda p^{(k)}) f(x(k)+λkp(k))=λ>0minf(x(k)+λp(k))
得到阻尼牛顿法新的迭代点公式:
x ( k + 1 ) = x ( k ) + λ k p ( k ) x^{(k+1)} = x^{(k)} + \lambda _ k p^{(k)} x(k+1)=x(k)+λkp(k)

算法步骤

(1) 选取初始点估计值 x ( 0 ) x^{(0)} x(0),确定允许误差 ε \varepsilon ε,令 k = 0 k = 0 k=0

(2) 计算目标函数在 x ( k ) x^{(k)} x(k)处的梯度 ∇ ( x ( k ) ) \nabla (x^{(k)}) (x(k))

(3) 检查收敛性,若 ∣ ∣ ∇ ( x ( k ) ) ∣ ∣ ≤ ε ||\nabla (x^{(k)})|| \leq \varepsilon (x(k))ε,则 x ∗ = x ( k ) x^* = x^{(k)} x=x(k),计算终止,否则继续

(4) 构造牛顿方向: p ( k ) = H − 1 ( x ( k ) ) ∇ ( x ( k ) ) p^{(k)} = H^{-1}(x^{(k)})\nabla (x^{(k)}) p(k)=H1(x(k))(x(k))

沿着 p ( k ) p^{(k)} p(k)进行一维搜索求得最优搜索因子 λ k \lambda _ k λk
f ( x ( k ) + λ k p ( k ) ) = min ⁡ λ > 0 f ( x ( k ) + λ p ( k ) ) f(x^{(k)} + \lambda _ k p^{(k)}) = \displaystyle \min_{\lambda > 0}f(x^{(k)} + \lambda p^{(k)}) f(x(k)+λkp(k))=λ>0minf(x(k)+λp(k))
(5) 更新点列: x ( k + 1 ) = x ( k ) + λ k p ( k ) x^{(k+1)} = x^{(k)} + \lambda _ kp^{(k)} x(k+1)=x(k)+λkp(k)

(6) k = k + 1 k = k + 1 k=k+1,转(2)。

特点

  • 保持了牛顿法收敛速度快的特点,降低了对初始点的选择要求

  • 由此得到的点列 { x ( k ) } \{x^{(k)}\} {x(k)}有如下性质;

    ​ (1) { f ( x ( k ) ) } \{ f(x^{(k)}) \} {f(x(k))}为严格单调下降数列

    ​ (2) { x ( k ) } \{x^{(k)}\} {x(k)}的任一极限点 x ^ \hat{x} x^必为 f ( x ) f(x) f(x)的极小点

共轭方向法

基本思想

牛顿法收敛速度快,但是计算困难,梯度法计算简便,但是收敛速度较慢。

结合优点,就有了共轭方向法。

原理就是利用矩阵A的共轭向量组作为搜索方向。

分析

背景知识;

p i p_i pi是A-共轭向量系是指:

对于对称矩阵A, p i ( i = 1 , 2 , . . . , m ; m < n ) p_i (i = 1, 2, ..., m; m<n) pi(i=1,2,...,m;m<n)为m维列向量组,满足 ( p i , p j ) A = p i T A p j = 0 ( i ≠ j ) (p_i, p_j) _A = p_i ^T A p_j =0 (i \ne j) (pi,pj)A=piTApj=0(i=j)

n阶正定阵A, p i ≠ 0 , ( i = 0 , 1 , . . . , n − 1 ) p_i \ne 0,(i = 0, 1, ..., n - 1) pi=0,(i=0,1,...,n1)为A的共轭向量系,对于 ∀ v ∈ R n \forall v \in R^n vRn,有 v = ∑ i = 0 n − 1 p i T A v p i T A p i p i v=\sum_{i=0}^{n-1} \frac{p_i^T Av}{p_i^T A p_i} p_i v=i=0n1piTApipiTAvpi

n阶正定阵A, p i ≠ 0 , ( i = 0 , 1 , . . . , n − 1 ) p_i \ne 0,(i = 0, 1, ..., n - 1) pi=0,(i=0,1,...,n1)为A的共轭向量系,且二次函数式从n维欧式空间的任何初始点 x ( 0 ) x^{(0)} x(0)开始,顺次沿着 p i p_i pi方向作m次搜索得到 x ( m ) x^{(m)} x(m),则;

  1. p i T ∇ ( x ( m ) ) = 0 , ( i = 0 , 1 , . . . , m − 1 ) p_i ^ T \nabla (x^{(m)}) = 0,(i = 0, 1, ..., m-1) piT(x(m))=0,(i=0,1,...,m1)
  2. m = n m = n m=n,则 x ( n ) x^{(n)} x(n)就是 f ( x ) f(x) f(x)的极小值点

对任意选取的初始值 x ( 0 ) x^{(0)} x(0),至多迭代n步就可以收敛到 f ( x ) f(x) f(x)的全局极小点 x ∗ x^* x

对于任何一组线性无关的向量 v i ( i = 0 , 1 , . . . , n − 1 ) v_i(i = 0, 1, ..., n-1) vi(i=0,1,...,n1),求取矩阵A的一组共轭向量的算法为:
p 0 = v 0 , p i = v i − ∑ j = 0 i − 1 p j T A v i p j A p j p j ( j = 1 , 2 , . . . , n − 1 ) p_0 = v_0,p_i = v_i - \sum_{j= 0}^{i -1} \frac{p_j^T A v_i}{p_j A p_j} p_j \qquad (j = 1, 2, ..., n-1) p0=v0,pi=vij=0i1pjApjpjTAvipj(j=1,2,...,n1)
算法执行过程中,为简便计算,可取 v i v_i vi 为单位阵中的列向量。

得到共轭向量组 p i ( i = 0 , 1 , . . . , n − 1 ) p_i(i = 0, 1, ..., n-1) pi(i=0,1,...,n1),然后令下降方向为: p ( k ) = p k ( k = 0 , 1 , . . . , n − 1 ) p^{(k)} = p_k (k = 0, 1, ..., n-1) p(k)=pk(k=0,1,...,n1),并且 λ k \lambda _k λk由一维搜索确定。

note: 算法中函数 f ( x ) f(x) f(x)是用二阶泰勒展开式近似的,所以得到的最优解可能还不是极小点,因此可将该最优解作为初始值在进行一轮迭代,一般要重复多次,逐步达到极小点。

算法步骤

(1) 选取初始点估计值 x ( 0 ) x^{(0)} x(0),确定允许误差 ε \varepsilon ε,令 k = 0 k = 0 k=0

(2) 令 p ( 0 ) = p 0 = v 0 p^{(0)} = p_0 = v_0 p(0)=p0=v0,计算 ∇ ( x ( 0 ) ) \nabla (x^{(0)}) (x(0))

(3) 沿着 p ( k ) p^{(k)} p(k)进行一维搜索求得最优搜索因子 λ k \lambda _ k λk
f ( x ( k ) + λ k p ( k ) ) = min ⁡ λ > 0 f ( x ( k ) + λ p ( k ) ) f(x^{(k)} + \lambda _ k p^{(k)}) = \displaystyle \min_{\lambda > 0}f(x^{(k)} + \lambda p^{(k)}) f(x(k)+λkp(k))=λ>0minf(x(k)+λp(k))
计算得到下一个迭代点:

x ( k + 1 ) = x ( k ) + λ k p ( k ) x^{(k+1)} = x^{(k)} + \lambda _ kp^{(k)} x(k+1)=x(k)+λkp(k)

(4) k = k + 1 k = k + 1 k=k+1,计算 ∇ ( x ( k ) ) \nabla (x^{(k)}) (x(k))

(5) 检查收敛性,若 ∣ ∣ ∇ ( x ( k ) ) ∣ ∣ ≤ ε ||\nabla (x^{(k)})|| \leq \varepsilon (x(k))ε,则 x ∗ = x ( k ) x^* = x^{(k)} x=x(k),计算终止,否则继续

(6) 循环变量检查:若 k = n k = n k=n,则转(8),否则继续

(7) 计算 p ( k ) = p k = v k − ∑ j = 0 k − 1 p j T A v k p j A p j p j p^{(k)} = p_k = v_k - \sum_{j= 0}^{k -1} \frac{p_j^T A v_k}{p_j A p_j} p_j p(k)=pk=vkj=0k1pjApjpjTAvkpj,转(3)

(8) 开始下一轮迭代:令 x ( 0 ) = x ( n ) , p ( 0 ) = p 0 = v 0 , ∇ ( x ( 0 ) ) = ∇ ( x ( n ) ) x^{(0)} = x^{(n)},p^{(0)} = p_0 = v_0, \nabla (x^{(0)}) = \nabla (x^{(n)}) x(0)=x(n),p(0)=p0=v0,(x(0))=(x(n)),转(3)

共轭梯度法

基本思想

在共轭方向法中,选取不同的初始线性无关向量组 v i v_i vi ,可以得到不同的A-共轭向量组。

共轭梯度法,试讲目标函数在各点的负梯度 − ∇ ( x ( i ) ) , ( i = 0 , 1 , . . . . , n − 1 ) - \nabla (x{(i)}),(i = 0, 1, ...., n-1) (x(i)),(i=0,1,....,n1)作为共轭方法中的线性无关向量组 v i ( i = 0 , 1 , . . . . , n − 1 ) v_i (i = 0, 1, ...., n-1) vi(i=0,1,....,n1),从而构成A的共轭向量组 p i ( i = 0 , 1 , . . . . , n − 1 ) p_i (i = 0, 1, ...., n-1) pi(i=0,1,....,n1)

算法步骤

(1) 选取初始点估计值 x ( 0 ) x^{(0)} x(0),确定允许误差 ε \varepsilon ε,令 k = 0 k = 0 k=0

(2) 计算 ∇ ( x ( 0 ) ) \nabla (x^{(0)}) (x(0)),令 p ( 0 ) = − ∇ ( x ( 0 ) ) p^{(0)} = -\nabla (x^{(0)}) p(0)=(x(0))

(3) 一维搜索求得最优搜索因子 λ k \lambda _ k λk
f ( x ( k ) + λ k p ( k ) ) = min ⁡ λ > 0 f ( x ( k ) + λ p ( k ) ) f(x^{(k)} + \lambda _ k p^{(k)}) = \displaystyle \min_{\lambda > 0}f(x^{(k)} + \lambda p^{(k)}) f(x(k)+λkp(k))=λ>0minf(x(k)+λp(k))
计算得到下一个迭代点:

x ( k + 1 ) = x ( k ) + λ k p ( k ) x^{(k+1)} = x^{(k)} + \lambda _ kp^{(k)} x(k+1)=x(k)+λkp(k)

(4) k = k + 1 k = k + 1 k=k+1,计算 ∇ ( x ( k ) ) \nabla (x^{(k)}) (x(k))

(5) 检查收敛性,若 ∣ ∣ ∇ ( x ( k ) ) ∣ ∣ ≤ ε ||\nabla (x^{(k)})|| \leq \varepsilon (x(k))ε,则 x ∗ = x ( k ) x^* = x^{(k)} x=x(k),计算终止,否则继续

(6) 循环变量检查:若 k = n k = n k=n,则转(8),否则继续

(7) 计算 p ( k ) = − ∇ ( x ( k ) ) + ( ∇ ( x ( k ) ) ) T A p ( k − 1 ) ( p ( k − 1 ) ) T A p ( k − 1 ) p ( k − 1 ) p^{(k)} = - \nabla (x^{(k)}) + \frac{(\nabla(x^{(k)})) ^T A p^{(k - 1)}}{(p^{(k-1)})^T A p^{(k-1)}} p^{(k-1)} p(k)=(x(k))+(p(k1))TAp(k1)((x(k)))TAp(k1)p(k1)

转(3)

(8) 开始下一轮迭代:令 x ( 0 ) = x ( n ) , p ( 0 ) = − ∇ ( x ( 0 ) ) x^{(0)} = x^{(n)},p^{(0)}= -\nabla (x^{(0)}) x(0)=x(n),p(0)=(x(0)),转(3)

note

(7)中使用矩阵A,对于二次型函数,A已经存在,非二次型函数,可以用 H ( x ( k ) ) H(x^{(k)}) H(x(k))代替矩阵A,这样一来计算量很大。

用FR公式避免Hessian矩阵的计算,(7)中公式改写为: p ( k ) = − ∇ ( x ( k ) ) + β k − 1 p ( k − 1 ) p^{(k)} = - \nabla (x^{(k)}) + \beta _ {k-1} p^{(k-1)} p(k)=(x(k))+βk1p(k1).

经过推导,得到FR公式为:
β k − 1 = ( ∇ ( x ( k ) ) ) T ∇ ( x ( k ) ) ( ∇ ( x ( k − 1 ) ) ) T ∇ ( x ( k − 1 ) ) = ∣ ∣ ∇ ( x ( k ) ) ∣ ∣ 2 ∣ ∣ ∇ ( x ( k − 1 ) ) ∣ ∣ 2 \beta _{k-1} = \frac{(\nabla(x^{(k)})) ^T \nabla (x^{(k)})}{(\nabla(x^{(k-1)})) ^T \nabla (x^{(k-1)})} = \frac{||\nabla (x^{(k)})||^2}{||\nabla (x^{(k-1)})|| ^ 2} βk1=((x(k1)))T(x(k1))((x(k)))T(x(k))=(x(k1))2(x(k))2
步骤(7) 改写为:

计算 β k − 1 , p ( k ) = − ∇ ( x ( k ) ) + β k − 1 p ( k − 1 ) \beta _{k-1},p^{(k)} = - \nabla (x^{(k)}) + \beta _ {k-1} p^{(k-1)} βk1,p(k)=(x(k))+βk1p(k1),转(3)

此外还有PRF与DM公式。

在这里插入图片描述

变尺度法(DFP)

拟牛顿法的一种,变尺度法是求解无约束极值问题的一种有效方法。为克服梯度法收敛慢和Newton法计算工作量大的缺点而提出来的一种算法

基本思想

梯度法中,沿最速下降方向搜索,有局部特征,产生拉锯现象,收敛较慢,沿牛顿方向收敛快,但是计算Hessian矩阵困难。

因此,构造矩阵 H k H_k Hk按照:
p ( k ) = − H k ∇ ( x ( k ) ) p^{(k)} = - H_k \nabla (x^{(k)}) p(k)=Hk(x(k))
选择搜索方向。

为保证下降方向且计算简便,要求 H k H_k Hk;

  • 正定
  • 递推关系 H k + 1 = H k + Δ H k H_{k+1} = H_k + \Delta H_k Hk+1=Hk+ΔHk
DFP算法

Δ H k = Δ x ( k ) ( Δ x ( k ) ) T ( Δ x ( k ) ) T q k − H k q k q k T H k q k T H k q k \Delta H_k = \frac{\Delta x^{(k)} (\Delta x^{(k)}) ^T}{(\Delta x^{(k)}) ^T q_k} - \frac{H_k q_k q_k^T H_k}{q_k^T H_k q_k} ΔHk=(Δx(k))TqkΔx(k)(Δx(k))TqkTHkqkHkqkqkTHk

BFGS 算法

Δ H k = q k T H k q k Δ x ( k ) ( Δ x ( k ) ) T ( ( Δ x ( k ) ) T q k ) 2 − Δ x ( k ) q k T H k ( Δ x ( k ) ) T q k − H k q k ( Δ x ( k ) ) T ( Δ x ( k ) ) T q k + Δ x ( k ) ( Δ x ( k ) ) T ( Δ x ( k ) ) T q k = ( I − Δ x ( k ) q k T ( Δ x ( k ) ) T q k ) H k ( I − Δ x ( k ) q k T ( Δ x ( k ) ) T q k ) + Δ x ( k ) ( Δ x ( k ) ) T ( Δ x ( k ) ) T q k \Delta H_k = \frac{q_k^T H_k q_k \Delta x^{(k)} (\Delta x^{(k)}) ^T}{((\Delta x^{(k)}) ^T q_k)^2} - \frac{\Delta x^{(k)} q_k^T H_k}{(\Delta x^{(k)}) ^T q_k} - \frac{H_k q_k (\Delta x^{(k)}) ^T}{(\Delta x^{(k)}) ^T q_k} + \frac{\Delta x^{(k)} (\Delta x^{(k)}) ^T}{(\Delta x^{(k)}) ^T q_k} \\ = (I - \frac{\Delta x^{(k)} q_k^T}{(\Delta x^{(k)}) ^T q_k}) H_k (I - \frac{\Delta x^{(k)} q_k^T}{(\Delta x^{(k)}) ^T q_k}) + \frac{\Delta x^{(k)} (\Delta x^{(k)}) ^T}{(\Delta x^{(k)}) ^T q_k} ΔHk=((Δx(k))Tqk)2qkTHkqkΔx(k)(Δx(k))T(Δx(k))TqkΔx(k)qkTHk(Δx(k))TqkHkqk(Δx(k))T+(Δx(k))TqkΔx(k)(Δx(k))T=(I(Δx(k))TqkΔx(k)qkT)Hk(I(Δx(k))TqkΔx(k)qkT)+(Δx(k))TqkΔx(k)(Δx(k))T

q k = ∇ ( x ( k + 1 ) ) − ∇ ( x ( k ) ) q_k = \nabla (x^{(k+1)}) - \nabla (x^{(k)}) qk=(x(k+1))(x(k))

算法流程

(1) 选取初始点估计值 x ( 0 ) x^{(0)} x(0),确定允许误差 ε \varepsilon ε,选取初始矩阵 H 0 = I H_0 =I H0=I

(2) 计算 f 0 = f ( x ( 0 ) ) , ∇ 0 = ∇ ( x ( 0 ) ) f_0 = f(x^{(0)}),\nabla_0 = \nabla (x^{(0)}) f0=f(x(0)),0=(x(0)),令 p ( 0 ) = − ∇ 0 , k = 0 p^{(0)} = - \nabla _0,k = 0 p(0)=0,k=0

(3) 检查收敛性,若 ∣ ∣ ∇ 0 ∣ ∣ ≤ ε ||\nabla _0|| \leq \varepsilon 0ε,则 x ∗ = x ( 0 ) x^* = x^{(0)} x=x(0),计算终止,否则继续

(4) 一维搜索求得最优步长 λ k \lambda _ k λk
f ( x ( k ) + λ k p ( k ) ) = min ⁡ λ > 0 f ( x ( k ) + λ p ( k ) ) f(x^{(k)} + \lambda _ k p^{(k)}) = \displaystyle \min_{\lambda > 0}f(x^{(k)} + \lambda p^{(k)}) f(x(k)+λkp(k))=λ>0minf(x(k)+λp(k))
计算得到下一个迭代点:

x ( k + 1 ) = x ( k ) + λ k p ( k ) x^{(k+1)} = x^{(k)} + \lambda _ kp^{(k)} x(k+1)=x(k)+λkp(k)

之后计算 f k + 1 = f ( x ( k + 1 ) ) , ∇ k + 1 = ∇ ( x ( k + 1 ) ) f_{k+1} = f(x^{(k+1)}), \nabla _{k+1} = \nabla (x^{(k+1)}) fk+1=f(x(k+1)),k+1=(x(k+1))

(5) 检查收敛性,若 ∣ ∣ ∇ k + 1 ∣ ∣ ≤ ε ||\nabla _{k+1} || \leq \varepsilon k+1ε,则 x ∗ = x ( k + 1 ) x^* = x^{(k+1)} x=x(k+1),计算终止,否则继续

(6) 正定检查,即检查函数值是否下降,若 f k + 1 ≥ f k f_{k+1} \geq f_k fk+1fk,则令 x ( 0 ) = x ( k ) , f 0 = f k , ∇ 0 = ∇ k , H 0 = I , k = 0 x^{(0)} = x^(k),f_0 = f_k, \nabla _0 = \nabla _k , H_0 = I, k =0 x(0)=x(k),f0=fk,0=k,H0=I,k=0,转(4),否则继续

(7) 检查迭代次数:

k = n − 1 k = n -1 k=n1,则转(9),否则继续

(8) 计算 q k = ∇ ( x ( k + 1 ) ) − ∇ ( x ( k ) ) q_k = \nabla (x^{(k+1)}) - \nabla (x^{(k)}) qk=(x(k+1))(x(k)),使用DFP算法或者BFGS算法计算 H k + 1 H_{k+1} Hk+1,确定搜索方向 p ( k + 1 ) = − H k + 1 ∇ ( x ( k + 1 ) ) p^{(k+1)} = - H_{k+1} \nabla (x^{(k+1)}) p(k+1)=Hk+1(x(k+1)),令 k = k + 1 k = k+1 k=k+1,转(3)

(9) 令 x ( 0 ) = x ( n ) , f 0 = f n , ∇ 0 = ∇ n , H 0 = I , k = 0 x^{(0)} = x^(n),f_0 = f_n, \nabla_0 = \nabla _n, H_0 = I , k=0 x(0)=x(n),f0=fn,0=n,H0=I,k=0,转(4)

特点
  • 避免二阶导数矩阵及其求逆计算
  • 比梯度法收敛速度快

编程数值计算多元函数的梯度和海因矩阵。

小结

多维无约束优化算法,其中变尺度法迭代中选取的搜索方向是共轭的,故将变尺度法和共轭梯度法归结为一类算法。

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值