小编给大家分享一下python如何实现最速下降法,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!
具体内容如下
from sympy import *
import numpy as np
def 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 alpha
def 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_k
if __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。
以上是“python如何实现最速下降法”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注亿速云行业资讯频道!
亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。