最优化之牛顿法

来源:互联网 发布:java实例精通pdf下载 编辑:程序博客网 时间:2024/05/17 17:14

求解无约束现行规划问题的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 npdef 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处的下降方向。


0 0
原创粉丝点击