用数值法对于维目标函数求解的过程是:①确定初始搜索区间[a,b],使该区间内仅包含有目标函数的一个极小点x*;②在初始区间内,才用分割比较将包含有目标函数极小点的区间逐渐缩短,直到该区间缩短到足够小的程度后,求出极小点x*(并不需要求出最优步长)。因此,首先来讨论初始区间的确定。
§3—1 初始搜索区间的确定
对于所有一维优化方法,首先遇到的一个共同问题是如何确定一个初始搜索区间[a,b],使该区间内必包含有一个、且唯一的函数极小点x*。这个搜索区间就是所要确定的初始搜索区间。然后再通过一维优化方法,即区间分割法(例如格点法、黄金分割法、二次插值法),将包含有极小点在内的区间逐渐分割缩小,直至将区间缩至足够小,即可求得最优点的近似解x*。 本节我们将介绍用进退法确定初始搜索区间。
由一元函数的性质可知,在极小点x*左侧函数值呈单调下降,而在极小点的右侧,则函数值呈单调上升。利用这一性质,在确定一元函数的初始搜索区间时,首先任取一个初始点x,并选取一个适当的初始进退距h,然后进行试探运算,并根据试探运算的00结果,选择作前进或后退运算。
一、试探运算,以确定作向前运算还是作后退运算。
先置h←h,x←x,计算初始点x和前进点x的目标函数值y、y,即: 2011021y←f(x);x←x+h,y←f(x)
211122
根据图3.3(a)所示的情况,比较y、y的大小,以确定作向前运算还是作后退运算。 21
做后退运算
做前进运算
①当y<y时,如图3.3(a)中实线的情况,则极小点x*必在x的右侧,应再作前121进搜索运算。 ②当y≥y时,如图3.3(a)中虚线的情况,则极小点x*必在x的左侧,应作后退221搜索运算。 二、前进搜索运算(y<y时) 12将进退距h加倍,即:h←2h,在x的左侧取第三个点x,即x←x+h,并计2313算x的函数值:y=f(x) 333.
比较函数值y和y的大小,分为如下两种情况: 32第一种情况,若y<y,如图3.3(b)中的虚线所示,则相邻的三个点x、x、x31322处的目标函数值y、y、y呈大、小、大的变化。根据函数的连续性可知,在区间内[x,1213x]必定包含有目标函数f(x)的极小点x*,即令:a←x,b←x,这就搜索得到了初313始搜索区间[a,b]。
第二种情况,若y≥y,如图3.3 (b)中的实线所示,则极小点x*有可能位于x的右侧,232需继续作前进运算。为了使下一次作前进运算时能采用与本次前进运算相同的迭代格式,重复前进搜索运算,对各点作如下置换:
x←x,y←y;x←x,y←y 31322212并再次将进退距加倍,h←2h,计算新的点x及其对应的函数值y: 33x←x+h,y←f(x)。 3233重复上述比较y、y的过程,直到最后出现y<y,即相邻三个点x、x、x3312223的函数值y、y、y呈两端大,中间小的情况时,取左、右两端点为初始点搜索区间。 321
做后退运算 做前进运
算
三、后退搜索运算(y≥y时) 12如图3.3(a)中虚线所示,若y≥y时,取向x点的左侧搜索,即作后退运算。 112取进退距h置为负的初始进退距,即:h← —h,置换点号,使他们自右向左反向0排列,如图3.3(c)所示,以便采用前进搜索运算的迭代格式进行计算,作置换: x←x,y←y;(变量x、y仅作为置换数据的暂用单元) 313313x←x,y←y;x←x,y←y; 32121223经过上述置换后,x、x 从右向左排列,采用前进运算的迭代格式进行后退运算。21.
将进退距加倍,即h←2h,计算出第三个后退点x及其函数值y: 33x←x+h,y←f(x)
3332
比较函数值y、y的大小。 32①若y<y时,如图3.3(c)中虚线Ⅱ所示,则初始区间已确定;
a←x,b←x; 1332②若y≥y时,如图3.3(c)中实线Ⅰ所示,则应继续作后退运算,对各点作如下置32换:
x←x,y←y;x←x,y←y 31321222并将进退距加倍,即h←2h,计算新的点x及其函数值y:x←x+h,y←f(x) 332333重复比较函数值y、y的大小,直到最后出现y<y,即出现相邻三个点x、x、233221x的函数值呈两端大、中间小的情况为止,取其a←x,b←x;可到初始搜索区间133[a,b]。
当已经确定了初始搜索区间[a,b]之后,接着的问题就是要在这个已确定的区间中,如何迅速找到目标函数的最优点x*。通常采用区间分割法,将包含有目标函数极小点的区间逐步分割缩小,直到区间缩小到足够小为止。取缩小到足够小的区间中点作为目标函数极小点的近似解。缩小后的区间大小可由计算者根据实际问题的需要,预先规定一个足够小的正数,称为收敛精度或迭代精度,但经过k次区间搜缩后,如果满足:
(k)(k)(k)(k)
│≤ε—a│b
)/2+b。常用的区间分割法有:格点法、黄金分割法、二则终止计算,取x*=(a次插值
法等。
§3—3 黄金分割法
黄金分割法也称为0.618法。这种方法是通过对搜索区间内插入黄金分割点,并计算分割点的函数值和比较它们的大小,将包含有最优点的区间逐次缩短,当区间缩短到小于预先给定的足够小的数值时,即可获得目标函数的极小点的近似解。 一、区间缩短的基本方法
如图3.8所示,设有一元函数f(x),在给定的初始搜索区间内[a,b]仅存在一个
极小点x*,试在该区间内寻求目标函数的极小点,即最优点x*。
为了缩短区间,在初始区间[a,b]内按一定的规则对称地插入两分割点x、x, 21
,
b]分为三段。分别计算两插入分割点的函数值;ax=xb,使区间[a且x<x,2211) (x(x);y←fy←f2211 、y的大小,有下列两种情况;比较y21],xx的左侧,即必定在区间[a1、若y<y,如图3.8(a)所示,极小点x*一定在2221,获作为缩短后的新搜索区间,即令:b←xa[,x]内。因此,舍去右段xb,将区间222 。得新的区间[a,b]]b的右侧,即必定在区间[x,、若y≥y,如图3.8(b)所示,极小点x*一定在x21121
,获b]作为缩短后的新搜
索区间,即令:a←x内。因此,舍去左段ax,将区间[x,111 ,b]。得新的区间[a。在每次区间缩短过程中,把缩短后的新区间长这样就完成了一次区间缩短(收缩) 度与原区间长度之比称为该次区间缩短率,用λ来表示,即:baxx12=λ=
abab在缩短后的新区间
内,我们还需要去续按照一定的规则,对称地插入新的分割点,在缩短后的的一次比较后,区间即可缩短一次。来继续缩短新区间。经过函数值y、y21,故下一次缩短时,只需要按一定的规则,对称地补或x新区间内,因有一个保留点x21的比较,如此反复计算,区间插一个分割点,并计算该点的函数值,重复函数值y、y21 即可逐次地加以缩短,直到满足迭代计算终止准则后,方可停止分割收缩计算。问题的关键是在每一次迭代中,补插的分割点应按什么规律确定,才能使迭代计算 在次数相同的条件下,区间缩短得最快呢? 二、黄金分割法的取点原则为了加快区间缩短的速率,黄金分割法的分割点选取的原则是:每次区间缩短都具有相等的区间缩短率,即在每一次区间缩短时,新区间的长度与原区间的长度之比值为 。先推到如下:λ=0.618新区间的若经过第一次区间缩短后,3.8(a)所示,设初始搜索区间的长度为L,如图1。由·ab=
λL=λax,设第一次区间缩短率为λ,则∵λ=ax/ab,∴ax长度为12112112;·L=ax(1—λ)x,于两分割点x、x在区间[ab]内是对称插入的,即:ax=b=ab—1112221内,需补插]点,因而,在新区间[a,x]在第二次区间缩短时,新区间[a,x内保留有x212、yx)。通过比较y←f对称的新分割一个与xx点,并计算其函数值y,记作y(3331331,设第二次区间缩],的数值大小,由于y<y,于是第二次区间缩短时新区间为[ax131L)-λ(ax1-λ11111===λ 短率为λ,在每次区间缩短时, 2axλLλ1211根据黄金分割法取点原则:都具有相等的区间缩短率,因此: 即:2
1-5-λ1=0.618λ=λ=,计算出: λ=λ=λ,即:
分割法的分割取点原则为:
1
21
。黄金 2λ于是,
x=a+(1-λ)L=a+0.382(b-a) x=a+λL=a+0.618(b-a)
2
三、迭代终止条件
<ε —ab可终止迭代计算,其中迭代精度ε是设计者根据计算精度要求而预先给定的足够
当区间缩短到满足迭代终止条件时,即:
(k)(k)
小的正数值。迭代终止条件也可写成:
11()()1(2)(2)1(1)(1)2(k)(k)k
(b-,b=λ-ab—a—a)=λ=λa) (b-a),b(b—a-=λa)(bln[ε/(b
-a)]?kk(k)(k),其中λ取为0.618
ln0.618(k)(k)]小于迭代精度ε或区间缩短区最终间长度[b次—a数k满足:当ln[ε/(b-a)]?k时,即可终止迭代计算,取最终区间的中
a)=λ≤ε或即b(b—a-点以及相应的函数值作为
(k)(k)
ln0.618目标函数的最优解输出:
]/2,F*+b=F(x*)
x*=[a四、计算步骤及程序流程图
1、在初始搜索区间[a,b]内,按黄金分割法的取点原则,插入分割点:
x=a+(1-λ)L=a+0.382(b-a) x=a+λL=a+0.618(b-a) 并计算区间内插入
1
2
分割点x、x处的函数值y、y,即:y←f(x),y←f(x)
21211212
2、比较插入分割点处函数值y、y的大小: 21若y<y,如图3.8(a)所示,则舍去b点,
取新区间为[a,x],并将作如下置换: 212b←x,x←x,y←y 12122在新区间[a,b]内补插x点,并计算其函数值y,即: 11x←a+(1-λ)L=a+0.382(b-a) y←f(x), 11转第
1
三步;
若y≥y,如图3.8(b)所示,则舍去a点,取新区间为[x,b],并将作如下置换: 121a←x,x←x,y←y 21211在新区间[a,b]内补插x点,并计算其函数值y,即: 22x=a+0.618(b-a),y←f(x)
222(k)
若满足迭代终止准则b3、由迭代计算终止准则判断是否需要继续进行迭代计算,(k))时,转
第4步;否则转第2—a≤ε步,继续缩短区间; 4、输出最优解:
(k)(k)
]/2,F*+b=F(x*)
*x=[a并停机。 程序流程图如下: