The examples in this article share the specific code of python to achieve the fastest descent method for your reference. The specific content is as follows
Code:
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)**2for 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)**2for 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
analysis:
This uses backtracking line search to find alpha.
The above is the whole content of this article, I hope it will be helpful to everyone's study.
Recommended Posts