最优化之牛顿法

本文介绍了牛顿法在解决无约束优化问题中的应用,特别是针对二次可微函数的情况。牛顿法通过目标函数的二次Taylor展开确定搜索方向,但在非凸或非线性问题中,其收敛性和下降性质不保证。为改进局部收敛性,提出了阻尼Newton法,通过一维搜索确定步长。在特定条件下,Newton法表现出快速的二阶收敛性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

求解无约束现行规划问题的Newton法是利用目标函数的二次Taylor展开式构造搜索方向的方法,它是以为搜索中的Newton法的推广。

考虑UNP,其中f(x)二阶连续可微,▽2f(x)正定。

Newton法就是以Newton方向为搜索方向,以1为步长进行迭代的方法。

算法如下:

1. 初始步。给定初始点x,精度参数e > 0。

2. 终止判断。若||▽f(x)|| <= e,停止,x为最优解。否则转3。

3. 构造搜索方向。令d = - inv( [▽2f(x)] )·▽f(x)。(一维搜索即为 -f'(x)/f''(x) )

4. 确定新的迭代点。令x = x + d。转2。(相当于步长为1)


对于一般的无约束凸二次规划问题(UQP),用Newton法解时剧透二次终止行。

对于一般的无约束非线性规划问题(UNP),用Newton法求解时,既不能保证经过有限次迭代得到精确最优解,也不能保证该算法具有收敛性,并且Newton方向不一定是下降方向。但是在一定条件下,若初始点在最优解附近,则Newton法具有二阶收敛性,即收敛速度非常快。


这里给出凸二次规划问题的求解代码。

'''
1/2 x^ * H * x + c^ * x + d
'''
import numpy as np

def algo(H, c, b, x0, e):
    x = x0
    k = 1
    while(True):
        g = np.dot(H, x) + c
        norm = np.linalg.norm(g)
        if(norm < e):
            break
        d = -H.I.dot(g)
        x = x + d
        print 'k = %s;norm = %s' %(str(k), str(norm))
        k += 1
    return x
        

if __name__ == '__main__':
    H = np.matrix([[2.0, 0.0], [0.0, 4.0]])
    c = np.matrix([[0.0], [0.0]])
    b = 0.0
    x0 = np.matrix([[1.0], [1.0]])
    e = 1e-6
    
    result = algo(H, c, b, x0, e)
    print result


为了克服Newton法仅具有局部收敛性,仍以Newton方向为搜索方向,但用最优一维搜索或可接受一维搜索确定步长,这就是阻尼Newton法。

但是当▽2f(x)不是正定矩阵时,Newton方向d可能不是f在x处的下降方向。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值