没有合适的资源?快使用搜索试试~ 我知道了~
首页用Python实现最速下降法求极值的方法
资源详情
资源评论
资源推荐

用用Python实现最速下降法求极值的方法实现最速下降法求极值的方法
今天小编就为大家分享一篇用Python实现最速下降法求极值的方法,具有很好的参考价值,希望对大家有所帮
助。一起跟随小编过来看看吧
对于一个多元函数 ,用最速下降法(又称梯度下降法)求其极小值的迭代格式为
其中 为负梯度方向,即最速下降方向,αkαk为搜索步长。
一般情况下,最优步长αkαk的确定要用到线性搜索技术,比如精确线性搜索,但是更常用的是不精确线性搜索,主要是
Goldstein不精确线性搜索和Wolfe法线性搜索。
为了调用的方便,编写一个Python文件,里面存放线性搜索的子函数,命名为linesearch.py,这里先只编写了Goldstein线性
搜索的函数,关于Goldstein原则,可以参看最优化课本。
线性搜索的代码如下(使用版本为线性搜索的代码如下(使用版本为Python3.3):):
'''
线性搜索子函数
'''
import numpy as np
import random
def goldsteinsearch(f,df,d,x,alpham,rho,t):
flag=0
a=0
b=alpham
fk=f(x)
gk=df(x)
phi0=fk
dphi0=np.dot(gk,d)
alpha=b*random.uniform(0,1)
while(flag==0):
newfk=f(x+alpha*d)
phi=newfk
if(phi-phi0<=rho*alpha*dphi0):
if(phi-phi0>=(1-rho)*alpha*dphi0):
flag=1
else:
a=alpha
b=b
if(b<alpham):
alpha=(a+b)/2
else:
alpha=t*alpha
else:
a=a
b=alpha
alpha=(a+b)/2
return alpha
上述函数的输入参数主要包括一个多元函数f,其导数df,当前迭代点x和当前搜索方向d,返回值是根据Goldstein准则确定的
搜索步长。
我们仍以Rosenbrock函数为例,即有
于是可得函数的梯度为















安全验证
文档复制为VIP权益,开通VIP直接复制

评论0