在讲解最速下降法的博客中,讲到了使用直线搜索的方法来求解 xk+1 (也就是求解步长因子 tk ),但是并没有讲解什么叫做直线搜索,现在对直线搜索进行补充说明。
定义1:对于问题
定义2:(单谷函数)设 ϕ:L⊆R1→R1 , t∗ 是 ϕ(t) 在 L 上的全局极小点。如果对于 L 上的任意两点 t1 , t2 ,且 t1<t2 ,都有
定义3:(搜索区间)设 ϕ:L⊆R1→R1 , t∗ 是 ϕ(t) 在 L 上的全局极小点。若果能够找到 t1,t2∈L ,使得 t∗∈[t1,t2] ,那么闭区间 [t1,t2] 就称为 ϕ(t) 极小点的一个搜索区间,记为 {t1,t2} 。
定理1:设 {a,b} 是单谷函数 ϕ(t) 极小点的一个搜索区间,在 (a,b) 上任取两点 t1 和 t2 ,且 t1<t2 。若 ϕ(t1)≤ϕ(t2) ,则 {a,t2} 是 ϕ(t) 极小点的一个搜索区间;若 ϕ(t1≥ϕ(t2)) ,则 {t1,b} 是 ϕ(t) 极小点的一个搜索区间。
有以上定义和定理可知,一元二次函数为单谷函数,以上定理的理解记忆可以以一元二次函数为基础记忆。
有以上只是,我们可以确定单谷函数的搜索区间,算法描述如下。
已知:目标函数 ϕ(t)
(1)选定初始点 t0 和步长 h
(2)计算 ϕ0=ϕ(t0),t2=t0+h,ϕ2=ϕ(t2)
(3)若 ϕ2≥ϕ0 ,则置 t1=t2,ϕ1=ϕ2,h=−h, 转(5);否则转(4)
(4)置 t1=t0,ϕ1=ϕ0,t0=t2,ϕ0=ϕ2,h=2h
(5)计算 t2=t0+h,ϕ2=ϕ(t2) ,若 ϕ2>ϕ0 ,则转(6);否则转(4)
(6)置 a=min{t1,t2},b=max{t1,t2} , [a,b] 即为搜索区间,计算结束。
以上找搜索区间流程图如下(在流程图中用函数 y 代替函数 ϕ )。
黄金分割法属于区间收缩算法,适用于任何单谷函数(函数可以不连续)求极小点问题。
在搜索区间 [a,b] 内,适当的插入两点 t1 和 t2 ,通过定理1可以缩小区间长度,如此迭代,可以将搜索区间无限缩小。黄金分割法名称的由来是由 t1 和 t2 的位置所确定的,在黄金分割法中 t2=a+0.618×(b−a),t1=a+b−t2=b−0.618×(b−a) ,其中0.618是黄金比例,故此叫做黄金分割法或0.618法。
至于为什么是0.618是有严格的数学证明的,是因为此时区间缩小的更快,证明将不在补充,有兴趣的同学可以查看wikipedia。
黄金分割法算法描述如下。
已知: ϕ(t) ,终止限 ϵ ,黄金比例 β=0.618
(1)确定 ϕ(t) 的搜索区间 {a,b}
(2)计算 t2=a+β(b−a) , ϕ2=ϕ(t2)
(3)计算 t1=a+b−t2 , ϕ1=ϕ(t1)
(4)若 |t1−t2|<ϵ ,则打印 t∗=t1+t22 ,停机,否则转(5)
(5)若 ϕ1≤ϕ2 ,则置 b=t2,t2=t1,ϕ2=ϕ1 ,然后转(3);否则,置 a=t1,t1=t2,ϕ1=ϕ2 ,并计算 t2=a+β(b−a),ϕ2=ϕ(t2) ,然后转(4)
流程图如下。
抛物线插值法属于函数逼近法,是用于求连续的单谷函数求极小点问题。
设 ϕ:R1→R1 在搜索区间 {t1,t2,t3} 上连续。即 ϕ1=ϕ(t1),ϕ2=ϕ(t2),ϕ3=ϕ(t3) 。如果 t1<t2<t3 与 ϕ1≥ϕ2≤ϕ3 (两个等个不同时成立)同时成立,那么可以过 (t1,ϕ1),(t2,ϕ2),(t3,ϕ3) 三点作抛物线插值,设得到的抛物线为 Q(t)=pt2+qt+r 。其实抛物线方程为多少我们并不关心,我们更关心此抛物线的极小点,假设此极小点为 t4 ,我们可以根据 t4 的信息,将搜索区间缩小,然后在缩小后的区间上再做抛物线插值,如此迭代,便可以找到极小点 t∗ 。
通过以上 (t1,ϕ1),(t2,ϕ2),(t3,ϕ3) 三个点我们可以求得
黄金分割法、抛物线插值法等许多一维函数极小值问题的迭代方法都需要假设函数具有单谷性。这并不符合实际问题的需要,一种可用的解决方法为,在初始的搜索区间很大的时候,可以将搜索区间分割为许多小区间,在这些小区间上用这些方法寻求极小点,最后在所有区间的极小点中找最优解即可。