Trust-Region with DogLeg method 信赖域和狗腿法的最优化求解

        刚上研一,我选了一门叫《最优化算法的课》,里面讲到有很多优化的算法,如大家耳熟能详的梯度下降法、牛顿法等等,这些算法大量运用于《数据挖掘》《模式识别》《机器学习》等课程之中,解决一些回归、拟合及模式分类的一些参数优化问题。《最优化计算方法》中讲了很多参数的优化算法,本文主要讲一下“信赖域 with 狗腿法“算法。

    我们遇到的大多数是一些实际的问题,这门课是我们学校数学学院开的,原教材里讲了很多原理推导,我这儿就不再累述了,直接讲算法的框架和运用。

         (1)

 优化算法的目的是:min   f(xk+p)pk为下降方向。 f(xk+p) 可以用泰勒公式展开为                             

              (2)

   其中 

             

                        下面开始讲算法框架:Trust Region

                                                                                                                                                                                                                                                      

                                                                                                                                                                                                                                            


                                                                                                                                                                                                                                                   

 τ的求法可以根据后面的程序所得

                                                                                                                       

                                                                                                                                                                                                                                          

 程序:                             

clear;clc
x=[0.1 0]';
maxiter = 100;
iter = 1;
trustRegionBound = 10;

while iter < maxiter

    if sum(abs(g(x))) < 0.00001
        break;
    end
    iter = iter + 1;
    du = -g(x)' * g(x) * g(x) / (g(x)' * B(x) * g(x));
    dB = -B(x)^-1 * g(x);
    a = 2;
    if du'*du > trustRegionBound*trustRegionBound;
        a = trustRegionBound / sqrt((du'*du));
    else if dB'*dB > trustRegionBound*trustRegionBound
        a = sqrt((trustRegionBound*trustRegionBound - du'*du) / ((dB-du)'*(dB-du))) + 1;
        end    
    end
    if a < 1
        d = a * du;
    else
        d = du + (a - 1) * (dB - du);
    end
    %更新信赖域
    p = (f(x)-f(x+d))/(q(x,zeros(2,1))-q(x,d));
    if p > 0.75 && sqrt(abs(d'*d) - trustRegionBound) < 0.001
        trustRegionBound = min(2 * trustRegionBound, 10000);
    else if p < 0.25
            trustRegionBound = sqrt(abs(d'*d)) * 0.25;
        end
    end
    if p > 0%q(zeros(2,1),x) > q(d, x)
        x = x + d;
    end
end
function y = q(x,d)
y = d'*g(x) + 1/2*d'*B(x)*d;
end
function y = f(x)
y = 100 * (x(2) - x(1)^2)^2 + (1 - x(1))^2;
end
function y = B(x)
y = [400 * (3*x(1)^2- x(2)) + 2, -400 * x(1);...
    -400 * x(1), 200];
end
function y = g(x)
y = [400 * (x(1)^2 - x(2)) * x(1) + 2 * (x(1) - 1), 200 * (x(2) - x(1)^2)]';
end







  • 5
    点赞
  • 35
    收藏
    觉得还不错? 一键收藏
  • 8
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值