时间:2021-05-22
本文实例为大家分享了python实现最速下降法的具体代码,供大家参考,具体内容如下
代码:
from sympy import *import numpy as npdef backtracking_line_search(f,df,x,x_k,p_k,alpha0): rho=0.5 c=10**-4 alpha=alpha0 replacements1=zip(x,x_k) replacements2=zip(x,x_k+alpha*p_k) f_k=f.subs(replacements1) df_p=np.dot([df_.subs(replacements1) for df_ in df],p_k) while f.subs(replacements2)>f_k+c*alpha*df_p: alpha=rho*alpha replacements2 = zip(x, x_k +alpha * p_k) return alphadef stepest_line_search(f,x,x0,alpha0): df = [diff(f, x_) for x_ in x] x_k=x0 alpha=alpha0 replacements=zip(x,x_k) len_df = sqrt(np.sum([df_.subs(replacements) ** 2 for df_ in df])) while len_df>1e-6: p_k=-1*np.array([df_.subs(replacements) for df_ in df]) alpha = backtracking_line_search(f, df, x, x_k, p_k, alpha) x_k=x_k+alpha*p_k replacements = zip(x, x_k) len_df=np.sum([df_.subs(replacements)**2 for df_ in df]) return x_kif __name__=="__main__": init_printing(use_unicode=True) x1 = symbols("x1") x2 = symbols("x2") x = np.array([x1, x2]) f = 100 * (x2 - x1 ** 2)**2 + (1 - x1) ** 2 ans=stepest_line_search(f, x, np.array([1.2, 1]), 1) print "the minimal value in point:",ans分析:
这个采用的是backtracking line search来寻找alpha。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
对于一个多元函数,用最速下降法(又称梯度下降法)求其极小值的迭代格式为其中为负梯度方向,即最速下降方向,αkαk为搜索步长。一般情况下,最优步长αkαk的确定要
在一般问题的优化中,最速下降法和共轭梯度法都是非常有用的经典方法,但最速下降法往往以”之”字形下降,速度较慢,不能很快的达到最优值,共轭梯度法则优于最速下降法,
假设我们已经知道梯度法——最速下降法的原理。现给出一个算例:如果人工直接求解:现给出Python求解过程:importnumpyasnpfromsympyimp
共轭梯度法是介于最速下降法与牛顿法之间的一个方法,它仅需利用一阶导数信息,但克服了最速下降法收敛慢的缺点,又避免了牛顿法需要存储和计算Hesse矩阵并求逆的缺点
本文实例为大家分享了python实现梯度下降法的具体代码,供大家参考,具体内容如下使用工具:Python(x,y)2.6.6运行环境:Windows10问题:求