网络编程
位置:首页>> 网络编程>> Python编程>> python实现最速下降法

python实现最速下降法

作者:zcc_TPJH  发布时间:2023-08-10 18:19:51 

标签:python,最速下降法

本文实例为大家分享了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实现最速下降法

来源:https://blog.csdn.net/weixin_39881922/article/details/80540799

0
投稿

猜你喜欢

手机版 网络编程 asp之家 www.aspxhome.com