您的位置:首页 > 其它

最优化之最速下降法

2014-12-30 19:09 274 查看
求解无约束非线性规划问题:min f(x),其中 f: Rn -> R1具有连续偏导。

最速下降法的思想是:沿着目标函数在当前迭代点处欧式范数意义下的最速下降方向即负梯度方向进行一维搜索,从而得到新的迭代点。当目标函数在迭代点处的梯度与零向量接近到一定程度时,该点可作为UNP的近似最优解。

算法:

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

2. 终止判断。求g = ▽f(x)。若||g|| <= e,停止,得到最优的x,否则转3.。

3. 构造搜索方向。令d = - g。

4. 进行一维搜索。求min f(x + λd)的最优步长λ,或可接受步长λ。

5. 确定新的迭代点。令x = x + λd,转2。

最速下降法具有现行收敛速度。

下面给出无约束凸二次规划问题的解法代码:

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 = -g
print d
lambda_ = -np.sum(float(g.transpose().dot(d)) / (d.transpose().dot(H).dot(d)))
x = x + lambda_ * d
print 'k = %s;g = %s;norm = %s;lambda = %s' %(str(k), str(g), str(norm), str(lambda_))
k += 1
return x

if __name__ == '__main__':
H = np.array([[2.0, 0.0], [0.0, 4.0]])
c = np.array([[0.0], [0.0]])
b = 0.0
x0 = np.array([[1.0], [1.0]])
e = 0.1

result = algo(H, c, b, x0, e)
print result

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐