发布时间:2025-12-10 22:56:18 浏览次数:1
具体内容如下
fromsympyimport*importnumpyasnpdefbacktracking_line_search(f,df,x,x_k,p_k,alpha0):rho=0.5c=10**-4alpha=alpha0replacements1=zip(x,x_k)replacements2=zip(x,x_k+alpha*p_k)f_k=f.subs(replacements1)df_p=np.dot([df_.subs(replacements1)fordf_indf],p_k)whilef.subs(replacements2)>f_k+c*alpha*df_p:alpha=rho*alphareplacements2=zip(x,x_k+alpha*p_k)returnalphadefstepest_line_search(f,x,x0,alpha0):df=[diff(f,x_)forx_inx]x_k=x0alpha=alpha0replacements=zip(x,x_k)len_df=sqrt(np.sum([df_.subs(replacements)**2fordf_indf]))whilelen_df>1e-6:p_k=-1*np.array([df_.subs(replacements)fordf_indf])alpha=backtracking_line_search(f,df,x,x_k,p_k,alpha)x_k=x_k+alpha*p_kreplacements=zip(x,x_k)len_df=np.sum([df_.subs(replacements)**2fordf_indf])returnx_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)**2ans=stepest_line_search(f,x,np.array([1.2,1]),1)print"theminimalvalueinpoint:",ans分析:
这个采用的是backtracking line search来寻找alpha。