大家好,欢迎来到IT知识分享网。
1.牛顿法的局限性
牛顿法是一种具有较高实用性的优化问题求解方法。如果牛顿法收敛,其收敛阶数至少是2。但牛顿法有其局限性,这里列举两个有代表性的缺陷,其中一个缺陷是引入拟牛顿法的基本思路。
牛顿法的基本思路是在每次迭代中,利用二次型函数来局部近似目标函数![最优化理论-拟牛顿法[Matlab]插图3 f](https://haidsoft.com/wp-content/uploads/2022/11/2022112316405970.jpg)
该公式在初始点![最优化理论-拟牛顿法[Matlab]插图7 $x^{(0)}$](https://haidsoft.com/wp-content/uploads/2022/11/2022112316405970.jpg)
![最优化理论-拟牛顿法[Matlab]插图9 $f(x^{(k+1)})\nless f(x^{(k)})$](https://haidsoft.com/wp-content/uploads/2022/11/2022112316405970.jpg)
这便是牛顿法的第一个缺陷,对于该问题,可以引入一个适当的步长![最优化理论-拟牛顿法[Matlab]插图11 \alpha_{k}](https://haidsoft.com/wp-content/uploads/2022/11/2022112316405970.jpg)
其中,![最优化理论-拟牛顿法[Matlab]插图15 \alpha_{k}=argmin_{\alpha\geqslant 0}f(x^{(k)}-\alpha_{}F(x^{(k)})^{-1}g^{(k)})](https://haidsoft.com/wp-content/uploads/2022/11/2022112316405970.jpg)
但牛顿法还有另外一个比较严重的缺陷,就是必须要计算第k步函数的二阶黑塞矩阵![最优化理论-拟牛顿法[Matlab]插图19 F(x^{(k)})^{-1}](https://haidsoft.com/wp-content/uploads/2022/11/2022112316405970.jpg)
![最优化理论-拟牛顿法[Matlab]插图19 F(x^{(k)})^{-1}](https://haidsoft.com/wp-content/uploads/2022/11/2022112316405970.jpg)
![最优化理论-拟牛顿法[Matlab]插图19 F(x^{(k)})^{-1}](https://haidsoft.com/wp-content/uploads/2022/11/2022112316405970.jpg)
![最优化理论-拟牛顿法[Matlab]插图19 F(x^{(k)})^{-1}](https://haidsoft.com/wp-content/uploads/2022/11/2022112316405970.jpg)
![最优化理论-拟牛顿法[Matlab]插图19 F(x^{(k)})^{-1}](https://haidsoft.com/wp-content/uploads/2022/11/2022112316405970.jpg)
![最优化理论-拟牛顿法[Matlab]插图21 $H_{k}=F(x^{(k)})^{-1}$](https://haidsoft.com/wp-content/uploads/2022/11/2022112316405970.jpg)
其中的![最优化理论-拟牛顿法[Matlab]插图25 H_k](https://haidsoft.com/wp-content/uploads/2022/11/2022112316405970.jpg)
![最优化理论-拟牛顿法[Matlab]插图25 H_k](https://haidsoft.com/wp-content/uploads/2022/11/2022112316405970.jpg)
2.黑塞矩阵逆矩阵的近似
令
在![最优化理论-拟牛顿法[Matlab]插图29 x^{(k)}](https://haidsoft.com/wp-content/uploads/2022/11/2022112316405970.jpg)
![最优化理论-拟牛顿法[Matlab]插图3 f](https://haidsoft.com/wp-content/uploads/2022/11/2022112316405970.jpg)
![最优化理论-拟牛顿法[Matlab]插图31 x^{(k+1)}](https://haidsoft.com/wp-content/uploads/2022/11/2022112316405970.jpg)
代入![最优化理论-拟牛顿法[Matlab]插图35 $x^{(k+1)}=x^{(k)}-\alpha_{}H_{k}g^{(k)}$](https://haidsoft.com/wp-content/uploads/2022/11/2022112316405970.jpg)
要使得![最优化理论-拟牛顿法[Matlab]插图39 $f(x^{(k+1)})< f(x^{(k)})$](https://haidsoft.com/wp-content/uploads/2022/11/2022112316405970.jpg)
![最优化理论-拟牛顿法[Matlab]插图41 \alpha](https://haidsoft.com/wp-content/uploads/2022/11/2022112316405970.jpg)
![最优化理论-拟牛顿法[Matlab]](https://haidsoft.com/wp-content/uploads/2022/11/2022112316405970.jpg)
![最优化理论-拟牛顿法[Matlab]插图25 H_k](https://haidsoft.com/wp-content/uploads/2022/11/2022112316405970.jpg)
![最优化理论-拟牛顿法[Matlab]插图25 H_k](https://haidsoft.com/wp-content/uploads/2022/11/2022112316405970.jpg)
假定目标函数![最优化理论-拟牛顿法[Matlab]插图3 f](https://haidsoft.com/wp-content/uploads/2022/11/2022112316405970.jpg)
规定
可得
则![最优化理论-拟牛顿法[Matlab]插图53 Q^{-1}](https://haidsoft.com/wp-content/uploads/2022/11/2022112316405970.jpg)
因此,近似矩阵![最优化理论-拟牛顿法[Matlab]插图57 H_{k+1}](https://haidsoft.com/wp-content/uploads/2022/11/2022112316405970.jpg)
如果迭代n次,总共产生n个迭代方向![最优化理论-拟牛顿法[Matlab]插图61 \Delta_{}x^{(0)}](https://haidsoft.com/wp-content/uploads/2022/11/2022112316405970.jpg)
![最优化理论-拟牛顿法[Matlab]插图63 \Delta_{}x^{(1)}](https://haidsoft.com/wp-content/uploads/2022/11/2022112316405970.jpg)
![最优化理论-拟牛顿法[Matlab]插图65 \Delta_{}x^{(n-1)}](https://haidsoft.com/wp-content/uploads/2022/11/2022112316405970.jpg)
…
如果![最优化理论-拟牛顿法[Matlab]插图73 \Delta_{}g^{(0)}](https://haidsoft.com/wp-content/uploads/2022/11/2022112316405970.jpg)
![最优化理论-拟牛顿法[Matlab]插图75 \Delta_{}g^{(1)}](https://haidsoft.com/wp-content/uploads/2022/11/2022112316405970.jpg)
![最优化理论-拟牛顿法[Matlab]插图77 \Delta_{}g^{(n-1)}](https://haidsoft.com/wp-content/uploads/2022/11/2022112316405970.jpg)
![最优化理论-拟牛顿法[Matlab]插图79 H_{n}](https://haidsoft.com/wp-content/uploads/2022/11/2022112316405970.jpg)
![最优化理论-拟牛顿法[Matlab]插图53 Q^{-1}](https://haidsoft.com/wp-content/uploads/2022/11/2022112316405970.jpg)
![最优化理论-拟牛顿法[Matlab]插图81 H_{n}=Q^{-1}](https://haidsoft.com/wp-content/uploads/2022/11/2022112316405970.jpg)
![最优化理论-拟牛顿法[Matlab]插图57 H_{k+1}](https://haidsoft.com/wp-content/uploads/2022/11/2022112316405970.jpg)
可以用数学归纳法证明,拟牛顿法也是一种共轭方向法,即证![最优化理论-拟牛顿法[Matlab]插图83 d^{(0)},d^{(1)},...,d^{(k+1)}](https://haidsoft.com/wp-content/uploads/2022/11/2022112316405970.jpg)
第三个要求是一个跟实际计算相关的要求,即近似矩阵![最优化理论-拟牛顿法[Matlab]插图85 H_{k}](https://haidsoft.com/wp-content/uploads/2022/11/2022112316405970.jpg)
![最优化理论-拟牛顿法[Matlab]插图57 H_{k+1}](https://haidsoft.com/wp-content/uploads/2022/11/2022112316405970.jpg)
![最优化理论-拟牛顿法[Matlab]插图85 H_{k}](https://haidsoft.com/wp-content/uploads/2022/11/2022112316405970.jpg)
从矩阵![最优化理论-拟牛顿法[Matlab]插图85 H_{k}](https://haidsoft.com/wp-content/uploads/2022/11/2022112316405970.jpg)
![最优化理论-拟牛顿法[Matlab]插图85 H_{k}](https://haidsoft.com/wp-content/uploads/2022/11/2022112316405970.jpg)
![最优化理论-拟牛顿法[Matlab]插图85 H_{k}](https://haidsoft.com/wp-content/uploads/2022/11/2022112316405970.jpg)
3.秩一修正算法
在秩一修正算法中,修正项为![最优化理论-拟牛顿法[Matlab]插图87 \alpha_{k}z^{(k)}z^{(k)T}](https://haidsoft.com/wp-content/uploads/2022/11/2022112316405970.jpg)
![最优化理论-拟牛顿法[Matlab]插图89 \alpha_{k}\in\mathbb{R}](https://haidsoft.com/wp-content/uploads/2022/11/2022112316405970.jpg)
![最优化理论-拟牛顿法[Matlab]插图91 z^{(k)}\in\mathbb{R}^{n}](https://haidsoft.com/wp-content/uploads/2022/11/2022112316405970.jpg)
其中,由代数知识容易证明,![最优化理论-拟牛顿法[Matlab]插图95 rank(z^{(k)}z^{(k)T})=1](https://haidsoft.com/wp-content/uploads/2022/11/2022112316405970.jpg)
![最优化理论-拟牛顿法[Matlab]插图25 H_k](https://haidsoft.com/wp-content/uploads/2022/11/2022112316405970.jpg)
![最优化理论-拟牛顿法[Matlab]插图97 H_{(k+1)}](https://haidsoft.com/wp-content/uploads/2022/11/2022112316405970.jpg)
令
整理得
据此可得
接下来把![最优化理论-拟牛顿法[Matlab]插图105 \alpha_k(z^{(k)T}\Delta_{}g^{(k)})^2](https://haidsoft.com/wp-content/uploads/2022/11/2022112316405970.jpg)
![最优化理论-拟牛顿法[Matlab]插图107 H_k,\Delta_{}g^{(k)},\Delta_{}x^{(k)}](https://haidsoft.com/wp-content/uploads/2022/11/2022112316405970.jpg)
![最优化理论-拟牛顿法[Matlab]插图109 H_{k+1}\Delta_{}g^{(k)}=(H_k+\alpha_kz^{(k)}z^{(k)T})\Delta_{}g^{(k)}=\Delta_{}x^{(k)}](https://haidsoft.com/wp-content/uploads/2022/11/2022112316405970.jpg)
两边同左乘![最优化理论-拟牛顿法[Matlab]插图113 \Delta_{}g^{(k)T}](https://haidsoft.com/wp-content/uploads/2022/11/2022112316405970.jpg)
替换![最优化理论-拟牛顿法[Matlab]插图117 \alpha_kz^{(k)}z^{(k)T}=\frac{(\Delta_{}x^{(k)}-H_kg^{(k)})(\Delta_{}x-H_kg^{(k)})^T}{\alpha_k(z^{(k)T}\Delta_{}g^{(k)})^2}](https://haidsoft.com/wp-content/uploads/2022/11/2022112316405970.jpg)
最终我们得出了秩1算法中近似矩阵![最优化理论-拟牛顿法[Matlab]插图25 H_k](https://haidsoft.com/wp-content/uploads/2022/11/2022112316405970.jpg)
![最优化理论-拟牛顿法[Matlab]插图121 H_0](https://haidsoft.com/wp-content/uploads/2022/11/2022112316405970.jpg)
![最优化理论-拟牛顿法[Matlab]插图123 I_n](https://haidsoft.com/wp-content/uploads/2022/11/2022112316405970.jpg)
秩1算法步骤如下:
1.令![最优化理论-拟牛顿法[Matlab]插图125 k=0](https://haidsoft.com/wp-content/uploads/2022/11/2022112316405970.jpg)
![最优化理论-拟牛顿法[Matlab]插图127 x^{(0)}](https://haidsoft.com/wp-content/uploads/2022/11/2022112316405970.jpg)
![最优化理论-拟牛顿法[Matlab]插图121 H_0](https://haidsoft.com/wp-content/uploads/2022/11/2022112316405970.jpg)
![最优化理论-拟牛顿法[Matlab]插图123 I_n](https://haidsoft.com/wp-content/uploads/2022/11/2022112316405970.jpg)
2.如果![最优化理论-拟牛顿法[Matlab]插图129 g^{(k)}=0](https://haidsoft.com/wp-content/uploads/2022/11/2022112316405970.jpg)
![最优化理论-拟牛顿法[Matlab]插图131 d^{(k)}=-H_kg^{(k)}](https://haidsoft.com/wp-content/uploads/2022/11/2022112316405970.jpg)
3.计算
4.计算
5.令![最优化理论-拟牛顿法[Matlab]插图141 k=k+1](https://haidsoft.com/wp-content/uploads/2022/11/2022112316405970.jpg)
这里有个问题,秩1算法是由![最优化理论-拟牛顿法[Matlab]插图143 H_{k+1}\Delta_{}g^{(k)}=\Delta_{}x^{(k)}](https://haidsoft.com/wp-content/uploads/2022/11/2022112316405970.jpg)
![最优化理论-拟牛顿法[Matlab]插图145 H_{k+1}\Delta_{}g^{(i)}=\Delta_{}x^{(i)}\ \ \ \ \ \ 0\leq i\leq k](https://haidsoft.com/wp-content/uploads/2022/11/2022112316405970.jpg)
![最优化理论-拟牛顿法[Matlab]插图25 H_k](https://haidsoft.com/wp-content/uploads/2022/11/2022112316405970.jpg)
秩1算法的matlab代码如下:
function [xmin,fval] = rand1_QNM(f,g,x0,tolerance) %此函数使用秩一修正公式求解二次型函数的极小值, %f是待求的二次型函数,g为二次型函数的梯度,x0是初值,tolerance是退出循环的最小范围,Q是黑塞矩阵 k=1; n=length(x0); x=x0; %储存初始点x0 d=zeros(n,1); %储存方向向量d_k H=eye(n,n); %初始拟牛顿矩阵选择单位矩阵,即用最速下降法选取方式 y=[f(x0)]; while norm(g(x),2)>=tolerance d=-H*g(x); alpha_1=10; %设置alpha_1和alpha_2,以用割线法求出一个极小值 alpha_2=9; while abs(g(x+alpha_2*d)'*d)>abs(g(x)'*d)*0.5 %使用强Wolfe条件选取步长alpha g_1=g(x+alpha_1*d)'*d; g_2=g(x+alpha_2*d)'*d; delta_a=alpha_2-alpha_1; if g_2-g_1~=0 %若g_2-g_1不等于零时,直接使用割线法公式 alpha_1=alpha_2; alpha_2=alpha_2-g_2*delta_a/(g_2-g_1); else alpha_1=alpha_2; alpha_2=alpha_2-g_2*delta_a/(g_2-g_1+10^(-5)); %若g_2-g_1等于零,则在分母上加上一个非常小的常数,继续迭代 end end alpha=alpha_2; x_2=x+alpha*d; if mod(k,6)==0 %再启动rand1方法,效率会降低,但能保证稳定性 H=eye(n,n); else delta_x=x_2-x; delta_g=g(x_2)-g(x); if delta_g'*(delta_x-H*delta_g)>0 H=H+(delta_x-H*delta_g)*(delta_x-H*delta_g)'/(delta_g'*(delta_x-H*delta_g)); %秩一修正公式 elseif delta_g'*(delta_x-H*delta_g)==0 H=H+(delta_x-H*delta_g)*(delta_x-H*delta_g)'/(delta_g'*(delta_x-H*delta_g)+10^-5); %若分母为零,则添加一个非常小的常数epsilon,保证分母有意义 else H=eye(n,n); %若delta_g'*(delta_x-H*delta_g)<0,求得的H_(k+1)有可能非正定,此时使用最速下降法,即H_(k+1)为单位矩阵。 end end x=x_2; y(k+1)=f(x); k=k+1; end xmin=x; fval=f(xmin); disp(['使用步数k=',num2str(k-1)]) semilogy(0:1:k-1,y,'-*r') title('秩一修正优化效果图') xlabel ('迭代次数') ylabel ('优化函数值') end
测试函数:
初始值
测试结果:
需要注意的是,秩1修正算法不能完全令人满意。首先,该算法产生的矩阵![最优化理论-拟牛顿法[Matlab]插图57 H_{k+1}](https://haidsoft.com/wp-content/uploads/2022/11/2022112316405970.jpg)
![最优化理论-拟牛顿法[Matlab]插图155 d^{(k+1)}](https://haidsoft.com/wp-content/uploads/2022/11/2022112316405970.jpg)
![最优化理论-拟牛顿法[Matlab]插图157 \Delta_{}g^{(k)T}(\Delta_{}x^{(k)}-H_k\Delta_{}g^{(k)})](https://haidsoft.com/wp-content/uploads/2022/11/2022112316405970.jpg)
例如:
在初始点
初始近似矩阵
情况下,得到的![最优化理论-拟牛顿法[Matlab]插图165 H_1](https://haidsoft.com/wp-content/uploads/2022/11/2022112316405970.jpg)
下列介绍的DFP算法和BFGS算法都可以在一维搜索精确的情况下,保证每个近似矩阵![最优化理论-拟牛顿法[Matlab]插图25 H_k](https://haidsoft.com/wp-content/uploads/2022/11/2022112316405970.jpg)
4.DFP算法
DFP算法步骤如下:
1.令![最优化理论-拟牛顿法[Matlab]插图125 k=0](https://haidsoft.com/wp-content/uploads/2022/11/2022112316405970.jpg)
![最优化理论-拟牛顿法[Matlab]插图127 x^{(0)}](https://haidsoft.com/wp-content/uploads/2022/11/2022112316405970.jpg)
![最优化理论-拟牛顿法[Matlab]插图121 H_0](https://haidsoft.com/wp-content/uploads/2022/11/2022112316405970.jpg)
![最优化理论-拟牛顿法[Matlab]插图123 I_n](https://haidsoft.com/wp-content/uploads/2022/11/2022112316405970.jpg)
2.如果![最优化理论-拟牛顿法[Matlab]插图129 g^{(k)}=0](https://haidsoft.com/wp-content/uploads/2022/11/2022112316405970.jpg)
![最优化理论-拟牛顿法[Matlab]插图131 d^{(k)}=-H_kg^{(k)}](https://haidsoft.com/wp-content/uploads/2022/11/2022112316405970.jpg)
3.计算
4.计算
5.令![最优化理论-拟牛顿法[Matlab]插图141 k=k+1](https://haidsoft.com/wp-content/uploads/2022/11/2022112316405970.jpg)
同秩1修正法,利用数学归纳法可以轻松证明DFP算法满足拟牛顿方程
并且可以证明,只要![最优化理论-拟牛顿法[Matlab]插图25 H_k](https://haidsoft.com/wp-content/uploads/2022/11/2022112316405970.jpg)
![最优化理论-拟牛顿法[Matlab]插图57 H_{k+1}](https://haidsoft.com/wp-content/uploads/2022/11/2022112316405970.jpg)
再对任意非零向量![最优化理论-拟牛顿法[Matlab]插图169 x](https://haidsoft.com/wp-content/uploads/2022/11/2022112316405970.jpg)
![最优化理论-拟牛顿法[Matlab]](https://haidsoft.com/wp-content/uploads/2022/11/2022112316405970.jpg)
DFP算法的maltab代码如下:
function [x_min,fval] = DFP_QNM(f,g,x0,tolerance) %此函数使用DFP算法求解函数极小值,在一维搜索的时候使用精确线搜索,以割线法求得线搜索方向的极小值 n=length(x0); %获取向量x0长度,以构建对应规模的矩阵 x=x0; y=[f(x0)]; H=eye(n,n); %初始H0使用单位矩阵,即使用最速下降法作为初始拟牛顿矩阵 k=1; while norm(g(x),2)>=tolerance %停机准则为x_k处的梯度二范数小于给定容忍值 d=-H*g(x); %求出第k次迭代的方向d_k alpha_1=10; %设置alpha_1和alpha_2,以用割线法求出一个极小值 alpha_2=9; while abs(g(x+alpha_2*d)'*d)>abs(g(x)'*d)*0.5 %使用强Wolfe条件选取步长alpha g_1=g(x+alpha_1*d)'*d; g_2=g(x+alpha_2*d)'*d; delta_a=alpha_2-alpha_1; if g_2-g_1~=0 %若g_2-g_1不等于零时,直接使用割线法公式 alpha_1=alpha_2; alpha_2=alpha_2-g_2*delta_a/(g_2-g_1); else alpha_1=alpha_2; alpha_2=alpha_2-g_2*delta_a/(g_2-g_1+10^(-5)); %若g_2-g_1等于零,则在分母上加上一个非常小的常数,继续迭代 end end alpha=alpha_2; x_2=x+alpha*d; %确定x_k+1的值 %if mod(k,6)==0 再启动DFP方法,但效率会降低 % H=eye(n,n); %else delta_x=x_2-x; delta_g=g(x_2)-g(x); H=H+delta_x*delta_x'/(delta_x'*delta_g)-(H*delta_g)*(H*delta_g)'/(delta_g'*H*delta_g); %以DFP算法确定H_k+1 %end x=x_2; y(k+1)=f(x); k=k+1; end x_min=x; fval=f(x); disp(['迭代次数k=',num2str(k-1)]); semilogy(0:k-1,y,'-*r') title('DFP算法求解函数极小值') xlabel('迭代次数') ylabel('优化函数值') end
测试函数:
初始点为
DFP算法能够使得矩阵![最优化理论-拟牛顿法[Matlab]插图25 H_k](https://haidsoft.com/wp-content/uploads/2022/11/2022112316405970.jpg)
![最优化理论-拟牛顿法[Matlab]插图25 H_k](https://haidsoft.com/wp-content/uploads/2022/11/2022112316405970.jpg)
5.BFGS算法
在DFP算法中,根据![最优化理论-拟牛顿法[Matlab]插图145 H_{k+1}\Delta_{}g^{(i)}=\Delta_{}x^{(i)}\ \ \ \ \ \ 0\leq i\leq k](https://haidsoft.com/wp-content/uploads/2022/11/2022112316405970.jpg)
这里的![最优化理论-拟牛顿法[Matlab]插图25 H_k](https://haidsoft.com/wp-content/uploads/2022/11/2022112316405970.jpg)
![最优化理论-拟牛顿法[Matlab]插图53 Q^{-1}](https://haidsoft.com/wp-content/uploads/2022/11/2022112316405970.jpg)
![最优化理论-拟牛顿法[Matlab]插图181 B_k](https://haidsoft.com/wp-content/uploads/2022/11/2022112316405970.jpg)
![最优化理论-拟牛顿法[Matlab]插图183 B_{k+1}](https://haidsoft.com/wp-content/uploads/2022/11/2022112316405970.jpg)
可以看到,这与![最优化理论-拟牛顿法[Matlab]插图145 H_{k+1}\Delta_{}g^{(i)}=\Delta_{}x^{(i)}\ \ \ \ \ \ 0\leq i\leq k](https://haidsoft.com/wp-content/uploads/2022/11/2022112316405970.jpg)
![最优化理论-拟牛顿法[Matlab]插图187 \Delta_{}x^{(i)}](https://haidsoft.com/wp-content/uploads/2022/11/2022112316405970.jpg)
![最优化理论-拟牛顿法[Matlab]插图189 \Delta_{}g^{(i)}](https://haidsoft.com/wp-content/uploads/2022/11/2022112316405970.jpg)
![最优化理论-拟牛顿法[Matlab]插图25 H_k](https://haidsoft.com/wp-content/uploads/2022/11/2022112316405970.jpg)
![最优化理论-拟牛顿法[Matlab]插图187 \Delta_{}x^{(i)}](https://haidsoft.com/wp-content/uploads/2022/11/2022112316405970.jpg)
![最优化理论-拟牛顿法[Matlab]插图189 \Delta_{}g^{(i)}](https://haidsoft.com/wp-content/uploads/2022/11/2022112316405970.jpg)
![最优化理论-拟牛顿法[Matlab]插图25 H_k](https://haidsoft.com/wp-content/uploads/2022/11/2022112316405970.jpg)
![最优化理论-拟牛顿法[Matlab]插图181 B_k](https://haidsoft.com/wp-content/uploads/2022/11/2022112316405970.jpg)
![最优化理论-拟牛顿法[Matlab]插图181 B_k](https://haidsoft.com/wp-content/uploads/2022/11/2022112316405970.jpg)
基于上述公式,可知在BFGS算法中,为获得黑塞矩阵逆矩阵的近似矩阵更新公式,只需对矩阵![最优化理论-拟牛顿法[Matlab]插图183 B_{k+1}](https://haidsoft.com/wp-content/uploads/2022/11/2022112316405970.jpg)
为化简上式,引入公式:
引理(Sherman-Morrison公式):如果矩阵A非奇异,u和v为列向量,满足![最优化理论-拟牛顿法[Matlab]插图197 1+v^TA^{-1}u\neq 0](https://haidsoft.com/wp-content/uploads/2022/11/2022112316405970.jpg)
![最优化理论-拟牛顿法[Matlab]插图199 A+uv^T](https://haidsoft.com/wp-content/uploads/2022/11/2022112316405970.jpg)
![最优化理论-拟牛顿法[Matlab]插图201 A^{-1}](https://haidsoft.com/wp-content/uploads/2022/11/2022112316405970.jpg)
利用该引理,可以将上述式子化简,最终形式如下:
BFGS算法计算步骤如下:
1.令![最优化理论-拟牛顿法[Matlab]插图125 k=0](https://haidsoft.com/wp-content/uploads/2022/11/2022112316405970.jpg)
![最优化理论-拟牛顿法[Matlab]插图127 x^{(0)}](https://haidsoft.com/wp-content/uploads/2022/11/2022112316405970.jpg)
![最优化理论-拟牛顿法[Matlab]插图121 H_0](https://haidsoft.com/wp-content/uploads/2022/11/2022112316405970.jpg)
![最优化理论-拟牛顿法[Matlab]插图123 I_n](https://haidsoft.com/wp-content/uploads/2022/11/2022112316405970.jpg)
2.如果![最优化理论-拟牛顿法[Matlab]插图129 g^{(k)}=0](https://haidsoft.com/wp-content/uploads/2022/11/2022112316405970.jpg)
![最优化理论-拟牛顿法[Matlab]插图131 d^{(k)}=-H_kg^{(k)}](https://haidsoft.com/wp-content/uploads/2022/11/2022112316405970.jpg)
3.计算
4.计算
5.令![最优化理论-拟牛顿法[Matlab]插图141 k=k+1](https://haidsoft.com/wp-content/uploads/2022/11/2022112316405970.jpg)
BFGS算法maltab代码如下:
function [x_min,fval] = BFGS_QNM(f,g,x0,tolerance) %此函数使用BFGS公式求解函数极小值,在一维搜索使用精确线搜索,使用割线法求得最优步长alpha n=length(x0); %获取向量x0长度,以构建对应规模的矩阵 x=x0; y=[f(x0)]; H=eye(n,n); %初始H0使用单位矩阵,即使用最速下降法作为初始拟牛顿矩阵 k=1; while norm(g(x),2)>=tolerance %停机准则为x_k处的梯度二范数小于给定容忍值 d=-H*g(x); %求出第k次迭代的方向d_k alpha_1=10; %设置alpha_1和alpha_2,以用割线法求出一个极小值 alpha_2=9; while abs(g(x+alpha_2*d)'*d)>abs(g(x)'*d)*0.5 %使用强Wolfe条件选取步长alpha g_1=g(x+alpha_1*d)'*d; g_2=g(x+alpha_2*d)'*d; delta_a=alpha_2-alpha_1; if g_2-g_1~=0 %若g_2-g_1不等于零时,直接使用割线法公式 alpha_1=alpha_2; alpha_2=alpha_2-g_2*delta_a/(g_2-g_1); else alpha_1=alpha_2; alpha_2=alpha_2-g_2*delta_a/(g_2-g_1+10^(-5)); %若g_2-g_1等于零,则在分母上加上一个非常小的常数,继续迭代 end end alpha=alpha_2; x_2=x+alpha*d; %确定x_k+1的值 %if mod(k,6)==0 再启动BFGS方法,但效率会降低 % H=eye(n,n); %else delta_x=x_2-x; delta_g=g(x_2)-g(x); H=H+(1+(delta_g'*H*delta_g)/(delta_g'*delta_x))*(delta_x*delta_x')/(delta_x'*delta_g)-((H*delta_g*delta_x')+(H*delta_g*delta_x')')/(delta_g'*delta_x); %BFGS的拟牛顿矩阵更新公式 %end x=x_2; y(k+1)=f(x); k=k+1; end x_min=x; fval=f(x); disp(['迭代次数k=',num2str(k-1)]); semilogy(0:1:k-1,y,'-*r') title('BFGS算法求解函数极小值') xlabel('迭代次数') ylabel('优化函数值') end
测试函数:
初始点为
由于BFGS算法是由DFP算法对偶而来,因此保持了DFP算法正定的性质,以及拟牛顿方程具有继承性,共轭方向等特性。并且,当迭代过程中一维搜索的精度不高时,BFGS算法仍然比较稳健。
上述几种算法的实际表现符合预期,对于二次型问题可以做到至多n步找到最优值。但需要指出的是,在实际设计算法时,要考虑一维搜索停机准则,建议使用非精确的线搜索以减少计算量,秩1算法还需要考虑![最优化理论-拟牛顿法[Matlab]插图25 H_k](https://haidsoft.com/wp-content/uploads/2022/11/2022112316405970.jpg)
6.补充说明
2024.7.16
更新了秩1修正、DFP和BFGS算法,进一步地减少了其空间复杂度和时间复杂度。对于秩1修正算法,由于其不能保证拟牛顿矩阵![最优化理论-拟牛顿法[Matlab]插图25 H_k](https://haidsoft.com/wp-content/uploads/2022/11/2022112316405970.jpg)
测试函数:
秩1修正:
DFP算法:
BFGS算法:
可以看到,BFGS算法迭代次数最少,效率最高,图像中有出现没有下降的情况,对此有两种可能的原因,一是给定的函数非正定,则可能得出的拟牛顿矩阵非正定,从而没有下降;二是由于在进行一维搜索的时候采用非精确搜索,虽然提高了算法的稳定性(不容易陷入循环出不来),但可能选择的步长会导致函数值上升,但总体而言,三者均能够准确找到最小值点。
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/119436.html
![最优化理论-拟牛顿法[Matlab]插图151 最优化理论-拟牛顿法[Matlab]](https://i-blog.csdnimg.cn/direct/2c0c734d8f894716aa91f1ac3c6690a4.png)
![最优化理论-拟牛顿法[Matlab]插图153 最优化理论-拟牛顿法[Matlab]](https://i-blog.csdnimg.cn/direct/dd640f79f52f4878a933378faddc5bc0.png)
![最优化理论-拟牛顿法[Matlab]插图177 最优化理论-拟牛顿法[Matlab]](https://i-blog.csdnimg.cn/direct/d4a0d2c3bb39435fb4055e178da53fc6.png)
![最优化理论-拟牛顿法[Matlab]插图179 最优化理论-拟牛顿法[Matlab]](https://i-blog.csdnimg.cn/direct/663ec6de36a84103b5d2f05998aa6848.png)
![最优化理论-拟牛顿法[Matlab]插图207 最优化理论-拟牛顿法[Matlab]](https://i-blog.csdnimg.cn/direct/86cf021abea64cdc87c7961c1184475e.png)
![最优化理论-拟牛顿法[Matlab]插图209 最优化理论-拟牛顿法[Matlab]](https://i-blog.csdnimg.cn/direct/9cbef2e296bf46909dcb6715bb665422.png)
![最优化理论-拟牛顿法[Matlab]插图213 最优化理论-拟牛顿法[Matlab]](https://i-blog.csdnimg.cn/direct/a0e652030b2147ef8041708bed820436.png)
![最优化理论-拟牛顿法[Matlab]插图215 最优化理论-拟牛顿法[Matlab]](https://i-blog.csdnimg.cn/direct/0ce505273a764be3afbc21f7dc79cfed.png)
![最优化理论-拟牛顿法[Matlab]插图217 最优化理论-拟牛顿法[Matlab]](https://i-blog.csdnimg.cn/direct/2cd3d48f6dc54476bb6219fe1ea5be17.png)