第二节 一维搜索
通过上期学习,大家已经了解了非线性规划的基本内容,那么如何求解一个非线性规划问题呢?本期小编就带大家来学习用于求解单变量无约束极值问题的方法——一维搜索,该方法也是后面求解更复杂问题的基础。
一、引入
1.定义
得到当前迭代点 后,按某种规则确定一个方向 ,再从 出发,沿方向 在直线(或射线)上求目标函数的极小点,从而得到 的后继点 。重复上述做法,直至求得问题的解。此处求目标函数在直线上的极小点,称为一维搜索(线性搜索)。
一维搜索是针对单变量函数进行的,也是多变量函数最优化的基础。
2.分类
一维搜索主要分为两类,这两类方法求得的极小点均为近似值,具体如下:
(1)试探法:按某种方式寻找一系列的试探点,根据试探点来确定极小点。(斐波那契、0.618)
(2)函数逼近法(插值法):用某种较简单的曲线逼近原来的函数曲线,通过求逼近函数的极小点来估计目标函数的极小点。(牛顿法、割线法)
一维搜索的方法很多,这里仅介绍试探法中的斐波那契(Fibonacci)法和0.618法,这两种方法仅需计算函数值,不必计算函数的导数。
二、斐波那契法(分数法)
1.概述
是区间] 上的单变量下单峰函数,它在该区间上有唯一极小点t*。函数在t*左边严格下降,在右边严格上升。若在此区间内任取两点 ,且 ,并计算函数值 和 ,则可能存在以下两种情况:
(1)如果 ,那么极小值则存在于 区间内。
(2)如果 ,那么极小值存在于 内。
这说明,只要在搜索区间 内取两个不同点并算出它们的函数值加以比较,即可把包含极小点的区间由 缩小为 或 。这时,如要继续缩小搜索区间 或 ,就只需在新的区间内再取一点算出其函数值并加以比较即可。显而易见,如果区间越小,则越能接近函数的极小点,但同时,要求计算的次数会越多。那么计算n次能把区间缩小到什么程度呢?怎么使搜索最快呢?或者说,计算n次能把至多多大的原区间缩小为长度为1个单位的区间呢?
我们用 来表示计算n次,就能使最大为 的区间缩短为1个单位长度,明显,如果我们只摆了一个点进去,没有比较,也就无法判断。因此
当n=2时,我们摆了两个点进去,这时候搜索的范围就缩小了一半。比如说搜索区间为[0,2],我们选择一个点为1-ε ,ε另一个点为1+ε 这里的ε 为一个很小的正数。再仿照前面的方法比较他们的函数值。也就是,如果1-ε 的函数值小一点,极小值就存在于[0,1+ε ].之间,如果1+ ε 的函数值小一点,则极小值就存在于[1-ε ,1]之间。因为这个ε 认为是任意小的正数。所以这个原来为2的区间,就被缩短成了搜索区间长度趋近为1,因此可得F2=2 。
用上述类似分析方法可得:
下图示出了这三种情况,图中红色小圆圈中的数字表示选取这个试点的先后顺序,数字表示该点在区间里的位置。
这个序列服从一个一般递推公式:
由上面的讨论可知,计算n次函数值所能得到的最大缩短率(缩短后的区间长度与原区间长度之比)为1/Fn 。要想把区间a0,b0 的长度缩δ短为原来区间长度的δ (δ<1 )倍或更小,即缩短后的区间长度
只要n足够大,能使下式成立即可:
上式中δ 为区间缩短的相对精度。
有时给出区间缩短的绝对精度:
显然相对精度与绝对精度的关系:
2.步骤
现将斐波那契法缩短区间的步骤总结如下:
(1)根据缩短率δ (已知),算出Fn (Fn≥1δ ),根据斐波那契数表确定最小的n 。
(2)选取前两个试点的位置,如下图。
t1=a0+Fn-2Fnb0-a0=b0+Fn-1Fna0-b0
t1'=a0+Fn-1Fnb0-a0
(3)计算函数值,并比较大小:
若f(t1) <f(t1') ,则取a1 =a0 ,b1=t1' ,t2'=t1 ,并令
若f(t1)≥f(t1') ,则取a1 =t1 ,b1=b0 ,t2=t1' ,并令
(4)计算f(t2) 或f(t2') ,像(3)进行一步一步的迭代,计算试点的公式一般为:
其中k=1,2, …, n-1
(5)当 k=n-1 时,
t
此时,无法通过两点的函数值大小来确定最终区间。取
tn-1' =an-2 +(12+ε )(bn-2 -an-2)= 12an-2+bn-2 +ε (bn-2 - an-2 )
其中,ε 为任意小的数;选取ftn-1和 f(tn-1') ,较小者作为近似极小值,对应的点为近似极小点;最终区间为[an-2 ,tn-1' ]或者[tn-1,bn-2 ]。
3.例题求解
接下来我们使用斐波那契法来求解下面这个例题吧。
例题5:试用斐波那契法求函数 的近似极小点和近似极小值,要求缩短后的区间不大于区间[-1,3]的0.08倍。
解:函数 在此区间上为严格凸函数。为了进行比较,给出其精确解为: , 。
(1)已知 ,
查表可得n=6。 根据公式可求:
由于 所以取 。
(2)已知 可得:
由于ft2 >ft2'=1.751 ,所以取
(3)已知 可得:
由于ft3' >ft3 = 1.751 ,所以取
(4)已知 可得:
由于ft4 >ft4' = 1.751 ,所以取
现令 ,则
所以取 由于 ,因此,以t5 为近似极小值点,近似极小值为1.751。
缩短后的区间长度为0.545-0.231=0.314,0.314/4=0.0785<0.08
三、0.618法(黄金分割法)
1.概述
接下来,我们继续介绍另一种经典的一维搜索方法——0.618法。由上节的论述可知,当用斐波那契法以n个试点来缩短某一区间时,区间长度的第一次缩短率为Fn-1Fn ,其后各次分别为
现将以上数列分为奇数项 和偶数项 ,可以证明,这两个数列收敛于同一个极限0.618033988741。
以不变的区间缩短率0.618代替斐波那契法每次不同的缩短率,就得到了0.618法。可以把这个方法看成是斐波那契法的近似,它比较容易实现,效果也很好,因而更易于为人们所接受。
用 0.618法计算 n个试点的μ函数值,把原区间a0,b0 连续缩短n-1 次,由于每次的缩短率均相同,为μ ,故最后的区间长度为
0.618法是一种等速对称消去区间的方法,每次的试点均取在区间相对长度的 0.618和0.382处。
2.例题求解
例题:用0.618法求函数 在区间[0,3]上的极大点,要求缩短后和区间长度不大于原区间长度的10%。
解:已知 a1=0,b0=3 ,计算第一次缩短时两个点的位置:
计算函数值ft1 和ft1' :
因为 ,且题目要求计算区间内的极大点,因此取:
通过第一次计算得到了a1 、b1 与t2 的值,因此还需计算t2' :
在上述的计算中已知 ,因此还需计算ft2' :
因为 ,因此取:
通过第二次计算得到了a2 、b2 与t3' 的值,因此还需计算t3 :
在上述的计算中已知 ,因此还需计算ft3 :
ft3=t32=1.5842=0.792
因为f ,因此取:
通过第三次计算得到了a3 、b3 与t4 的值,因此还需计算t4' :
在上述的计算中已知ft4=ft3'=0.927 ,因此还需计算ft4' :
ft4'=-t4'+3=-2.022+3=0.978
因为ft4<ft4' ,因此取:
a4=t4=1.854,b4=b3=2.292,t5=t4'=2.022
通过第四次计算得到了a4 、b4 与t5 的值,因此还需计算t5' :
t5'=a4+0.618b4-a4=1.854+0.618*2.292-1.854=2.125
在上述的计算中已知ft5=ft4'=0.978 ,因此还需计算ft5' :
ft5'=-t5'+3=-2.125+3=0.875
因为ft5>ft5' ,因此取:
a5=a4=1.854,b5=t5'=2.125
此时我们将缩短区间长度与原区间长度进行对比可得:
2.125-1.8543-0=0.2713=0.090<0.100
即缩短后区间长度小于原区间长度的10%,因此可以终止计算,从而得到近似极大点为t5=2.022 ,近似极大值为ft5=0.978 。