牛顿下山法matlab_优化算法之牛顿法

牛顿下山法matlab_优化算法之牛顿法_第1张图片

牛顿法(Newton's method)是一种在实数域和复数域上近似求解方程的方法,,它使用函数f(x)的泰勒级数的前面几项来寻找方程f(y)=0的根。 牛顿法最初由艾萨克·牛顿在《Method of Fluxions》(1671年完成,1736年公开发表)中提出。约瑟夫·鲍易也曾于1690年在Analysis Aequationum中提出此方法。

目录

1. 问题提出 

2. 基本思想 

3. 迭代公式

4. 算法步骤 

5. 算法收敛性 

6. 解的情况

7. 阻尼牛顿法

8. 算法实现

9. 算法评价

1问题提出

对于无约束优化模型

73112399cdb216b6185c4c9c05f732b0.png

其中91f021400cf9c595b41025f465248795.png为二阶连续光滑且Hessian阵可逆。

2基本思想

用一个二次函数去近似目标函数f(x),然后精确地求出这个二次函数的极小点.

牛顿下山法matlab_优化算法之牛顿法_第2张图片

Newton法几何解释

3迭代公式

 Newton法的迭代公式为:

744d781f90ddec64d6031ba2683b69d1.png

其中8b53dd9c83968d4ba554c95b24701638.png称为牛顿方向。

考虑函数f(x)在点2bbe28d414b8781315b0da3d704477d1.png处的二次泰勒近似

20c53b5956ad3d3b4a9c42b5936c06c5.png

由于d08f6dd5f76719f4289e996cc90e828f.png可逆,则e5e9bb91a68243a1277db1fba788d8b5.png的一阶稳定点满足e354739a0f5f77b2a5487f55036d8017.png,即

ff79c5ce86b3343bfc471f656e0f0361.png

由上式可得

2fd9306cd09fe404689342bb6ac88799.png

这正是牛顿法的迭代公式。由此说明,牛顿法在每次迭代中考虑函数在当前的局部二次泰勒展开,其迭代步长为1,迭代方向是梯度方向经过Hessian逆阵的调整。如果函数f为凸函数,此时d08f6dd5f76719f4289e996cc90e828f.png正定,从而4c40f400fe578cbbb9caffd8c937ffe6.png,即牛顿方向是下降方向。

4算法步骤

牛顿法的算法步骤如下:

Step 0. 选取初始点2cc49e53fe3bec968e4030c171e83286.png,允许误差ε> 0,令 k=1;

Step 1. 计算3e77b4c77a2a726572700cf17a0df04c.png。若a787c5917203204f445c49933c087fdc.png,算法停止;.否则,转 Step 2;

Step 2. 计算89f64bf5b9b3cec1d988cf387e386796.png。置k=k+1,转 step 1.

5算法收敛性

这里讨论牛顿算法的局部收敛性质,这是由于Hessian阵d08f6dd5f76719f4289e996cc90e828f.png可能不总是正定,即a38db09978ab0ec0405f672229fc6b54.png牛顿方向可能不总是下降方向。我们假设目标函数f为凸函数,二阶连续可微,最优解8d88d3699044087861a16b8cc1ce685a.pngd08f6dd5f76719f4289e996cc90e828f.png正定。此时,在8d88d3699044087861a16b8cc1ce685a.png附近的点,其d08f6dd5f76719f4289e996cc90e828f.png也是正定的。从而牛顿方法是有定义的,并且在迭代步长最终取1的情况下具有二次收敛性。

定理:假设函数f二阶可微,其Hessian阵d08f6dd5f76719f4289e996cc90e828f.png在最优解8d88d3699044087861a16b8cc1ce685a.png的邻域是Lipschitz连续的,且在8d88d3699044087861a16b8cc1ce685a.png处满足充分条件c48d04fbdab42d14feeb8d8e2eb443d3.png8db5c439ed335e9abadebd8d2d2142b0.png正定。考虑迭代公式ec56b4e63132fa29b087047424c6963b.png,则下面结论成立:

(i)如果初始点2cc49e53fe3bec968e4030c171e83286.png充分接近解点8d88d3699044087861a16b8cc1ce685a.png,算法产生的点列813bdea86e2a50bcff27bb81bed993bf.png收敛到8d88d3699044087861a16b8cc1ce685a.png;

(ii)点列813bdea86e2a50bcff27bb81bed993bf.png收敛速率是二次的;

(iii)梯度模长的点列8b9e71cc81513a3626bd7c0a904d5229.png二次收敛到0.

6解的情况

用Newton法求解无约束问题会出现以下情形:

  • 算法收敛到极小点;

  • 算法收敛到鞍点;

  • Hesse矩阵不可逆,无法迭代下去。

7阻尼牛顿法

牛顿法的有效性严重依赖初始点的选择,即初始点需要充分靠近极小值点,否则可能导致算法不收敛。由于实际问题的精确最小值点一般是不知道的,因此初始点的选择给算法的实现带来了很大的挑战。为了解决这一问题,可引入线搜索技术以得到大范围的收敛算法,即阻尼牛顿法

阻尼牛顿法的算法步骤如下:

Step 0. 选取初始点2cc49e53fe3bec968e4030c171e83286.png,允许误差ε> 0,令 k=1;

Step 1. 计算3e77b4c77a2a726572700cf17a0df04c.png。若a787c5917203204f445c49933c087fdc.png,算法停止;.否则,转 Step 2;

Step 2. 取搜索方向57e2c06e583a1d4a71c03e14626c94f0.png,利用线搜索技术确定步长e2490d634d9f69d6dfdee80d748a5b64.png;

Step 3. 令40347a4dba9db4456d287bfba001b975.png。置k=k+1,转 step 1.

8算法实现

例1:求解无约束优化问题

f6be9f4ed523c47d3d8651e115496dcf.png

该问题有精确解a3ea813b205108787da84e7fe58a3f8e.png

解:

方法1:牛顿法法

使用 MATLAB 编写最速下降法的主函数如下:

function [X,Y,Error] = Newton(x0)

%使用牛顿法求解无约束问题:min f(x)

%输入:x0为初始点,fun为目标函数,grad为梯度函数

%输出:X,Y分别为每一步的迭代点及相应函数值,Error为误差

tic

%% 定义目标函数及导函数信息(可以根据需要进行修改)

f = @(x)100*(x(1)^2-x(2))^2+(x(1)-1)^2;                      %目标函数

g = @(x)[400*x(1)*(x(1)^2-x(2))+2*(x(1)-1);-200*(x(1)^2-x(2))];   %一阶导数

G = @(x)[1200*x(1)^2-400*x(2)+2,-400*x(1);-400*x(1), 200 ];    %二阶导数  

%% 初始化算法参数

n = 1;

e = norm(g(x0));

X = x0;

Y = f(x0);

Error = e;

%% 设定终止条件

N = 5000;                                        %最大迭代步

E = 1e-6;                                         %给定误差

%% 迭代

while n < N && e > E

    n = n+1;

    %判断Hesse矩阵是否可逆

    ifdet(G(x0)) == 0

       disp('Hesse矩阵不可逆,无法进行迭代!');

        break

    else

        d =-inv(G(x0))*g(x0);                     %迭代方向

        x0 =x0+d;                               %迭代公式

        X(:,n)= x0;

        Y(n) =f(x0);

        e =norm(g(x0));

       Error(n) = e;

    end

end

toc

end

调用格式如下:

x0 = [0;0];                 %迭代初始点(可以根据需要修改)

[X,Y,E]=Newton(x0);

本问题求解结果如下:

牛顿下山法matlab_优化算法之牛顿法_第3张图片

牛顿下山法matlab_优化算法之牛顿法_第4张图片

牛顿下山法matlab_优化算法之牛顿法_第5张图片

方法2:阻尼牛顿法

使用 MATLAB 编写最速下降法的主函数如下:

function [X,Y,Error] =ZNNewton(x0)

%使用阻尼牛顿法求解无约束问题:min f(x)

%使用非精确Armijo搜索步长规则

%输入:x0为初始点,fun为目标函数,grad为梯度函数

%输出:X,Y分别为每一步的迭代点及相应函数值,Error为误差

tic

%% 初始化参数

f = @(x)100*(x(1)^2-x(2))^2+(x(1)-1)^2;                        %目标函数

g =@(x)[400*x(1)*(x(1)^2-x(2))+2*(x(1)-1);-200*(x(1)^2-x(2))];    %一阶导数

G =@(x)[1200*x(1)^2-400*x(2)+2, -400*x(1);-400*x(1), 200 ];      %二阶导数  

%% 初始化算法参数

n = 1;

e = norm(g(x0));

X = x0;

Y = f(x0);

Error = e;

beta=0.5;sigma=0.4;

%% 设定终止条件

N = 5000;                                       %最大迭代步               

E = 1e-6;                                        %给定误差

%% 迭代

while n < N &&e > E

    n = n+1;

        %判断Hesse矩阵是否可逆

        if det(G(x0)) == 0

            disp('Hesse矩阵不可逆,无法进行迭代!');

            break

        else

            d = -inv(G(x0))*g(x0);                 %迭代方向

            %使用Armijo法求步长

            m=0; mk=0;

            while(m<20)

               if(f(x0+beta^m*d)

                    mk=m; break;

                end

                m=m+1;

            end

            x0 = x0+beta^mk*d;                   %迭代公式

            X(:,n) = x0;

            Y(n) = f(x0);

            e = norm(g(x0));

            Error(n) = e;

        end

end

toc

end

调用格式如下:

x0 = [0;0];                 %迭代初始点(可以根据需要修改)

[X,Y,E]=ZNNewton(x0);

本问题求解结果如下:

牛顿下山法matlab_优化算法之牛顿法_第6张图片

牛顿下山法matlab_优化算法之牛顿法_第7张图片

牛顿下山法matlab_优化算法之牛顿法_第8张图片

9算法评价

1)优点:

  • Newton法产生的点列7e9401d30e7702271ba66a3e3b02da98.png若收敛,则收敛速度快---具有至少二阶收敛速率

  • Newton法具有二次终止性,即对强凸函数Newton法只需迭代一次就能得到最优值。

2)缺点:

  • Newton法可能会出现在某步迭代时,目标函数值上升;

  • 当初始点远离极小点时,Newton法产生的点列可能不收敛,或者收敛到鞍点,或者Hesse矩阵不可逆,无法计算;

  • Newton法需要计算Hesse矩阵,计算量大.

往期回顾

算法丨优化算法之最速下降法

算法丨经典优化算法大合集(比赛备用,值得收藏)

算法丨优化算法系列之遗传算法原理

算法丨优化算法系列之遗传算法MATLAB程序设计及应用实例

算法丨优化算法系列之模拟退火算法(1)

算法丨优化算法系列之模拟退火算法(2)——0-1背包问题

参考文献:马昌凤.最优化方法及其 Matlab 程序设计[M]. 科学出版社, 2010.

牛顿下山法matlab_优化算法之牛顿法_第9张图片

你可能感兴趣的:(牛顿下山法matlab)