最速下降法python_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博客。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值