在没有任何限制条件下寻求目标函数的极小点:
min x ∈ R n f ( x ) \displaystyle \min_{x \in R^n}f(x) x∈Rnminf(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)∣∣∣∣p∣∣cosθ, θ \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)−λk∇f(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 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(x−x(k))+21(x−x(k))TH(x(k))(x−x(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))(x−x(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)+H−1(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)=H−1(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)。
就是用梯度差分或者一个近似矩阵 H k H_k Hk去代替 H − 1 ( x ( k ) ) H^{-1}(x^{(k)}) H−1(x(k)),以克服牛顿法中需要计算 H − 1 ( x ( k ) ) H^{-1}(x^{(k)}) H−1(x(k))的缺点。
不同构造 H k H_k Hk的方法,产生不同的拟牛顿法。
选择较优目标值的初始点是困难的,需要对牛顿法进行修正。
牛顿法中,假设 λ 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)=H−1(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阶正定阵A, p i ≠ 0 , ( i = 0 , 1 , . . . , n − 1 ) p_i \ne 0,(i = 0, 1, ..., n - 1) pi=0,(i=0,1,...,n−1)为A的共轭向量系,对于 ∀ v ∈ R n \forall v \in R^n ∀v∈Rn,有 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=0n−1piTApipiTAvpi。
n阶正定阵A, p i ≠ 0 , ( i = 0 , 1 , . . . , n − 1 ) p_i \ne 0,(i = 0, 1, ..., n - 1) pi=0,(i=0,1,...,n−1)为A的共轭向量系,且二次函数式从n维欧式空间的任何初始点 x ( 0 ) x^{(0)} x(0)开始,顺次沿着 p i p_i pi方向作m次搜索得到 x ( m ) x^{(m)} x(m),则;
对任意选取的初始值 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,...,n−1),求取矩阵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=vi−j=0∑i−1pjApjpjTAvipj(j=1,2,...,n−1)
算法执行过程中,为简便计算,可取 v i v_i vi 为单位阵中的列向量。
得到共轭向量组 p i ( i = 0 , 1 , . . . , n − 1 ) p_i(i = 0, 1, ..., n-1) pi(i=0,1,...,n−1),然后令下降方向为: p ( k ) = p k ( k = 0 , 1 , . . . , n − 1 ) p^{(k)} = p_k (k = 0, 1, ..., n-1) p(k)=pk(k=0,1,...,n−1),并且 λ 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=vk−j=0∑k−1pjApjpjTAvkpj,转(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,....,n−1)作为共轭方法中的线性无关向量组 v i ( i = 0 , 1 , . . . . , n − 1 ) v_i (i = 0, 1, ...., n-1) vi(i=0,1,....,n−1),从而构成A的共轭向量组 p i ( i = 0 , 1 , . . . . , n − 1 ) p_i (i = 0, 1, ...., n-1) pi(i=0,1,....,n−1)。
(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(k−1))TAp(k−1)(∇(x(k)))TAp(k−1)p(k−1)
转(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)
(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))+βk−1p(k−1).
经过推导,得到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} βk−1=(∇(x(k−1)))T∇(x(k−1))(∇(x(k)))T∇(x(k))=∣∣∇(x(k−1))∣∣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)} βk−1,p(k)=−∇(x(k))+βk−1p(k−1),转(3)
此外还有PRF与DM公式。
拟牛顿法的一种,变尺度法是求解无约束极值问题的一种有效方法。为克服梯度法收敛慢和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 = Δ 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))T−qkTHkqkHkqkqkTHk
Δ 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+1≥fk,则令 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=n−1,则转(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)
编程数值计算多元函数的梯度和海因矩阵。
多维无约束优化算法,其中变尺度法迭代中选取的搜索方向是共轭的,故将变尺度法和共轭梯度法归结为一类算法。