一种函数极点搜索的优化方法与流程

文档序号:11654241阅读:483来源:国知局
一种函数极点搜索的优化方法与流程

本发明属于优化算法领域,特别涉及一种函数极点搜索的优化方法,适用于一维函数中的极值点搜索。



背景技术:

一维搜索是指寻找单变量函数的极小点,也称线性搜索,一维搜索是许多优化算法的重要组成部分。常用的一维搜索方法主要包括进退法、黄金分割法、抛物线插值法和布伦特(brent)方法。

进退法用于寻找一个包含极小点的搜索区间,其基本思想是:从某点出发,按一定的步长,寻找函数值呈现“高-低-高”的三个点;若一个方向不成功,就退回,沿相反方向试探。

黄金分割法的基本思想是:在搜索区间内适当插入两点,将搜索区间分为三段,然后再通过比较插入的两点函数值大小,并确定删去最左段还是最右段,或者同时删去左右两端保留中间段;如此继续下去可将搜索区间无限缩小,从而得到极小点。

抛物线插值法是多项式逼近法的一种,其基本思想是根据目标函数极小点领域内的三点构造抛物线函数,用抛物线函数的极小点近似目标函数的极小点,然后更新目标函数极小点领域内的三个点;如此反复,最后得到满足精度要求的极小点。

布伦特(brent)方法是一种广泛应用的一维搜索方法,且综合了黄金分割法和抛物线插值法,其基本思想为:首先利用黄金分割法确定一个包含极小点的不确定区间,然后通过抛物线插值法获得一个极小点,若此极小点落在此不确定区间,则利用该极小点进行二次插值;否则放弃该极小点,改用黄金分割法进行搜索。

然而,上述黄金分割法、抛物线插值法和布伦特(brent)方法只适用于搜索区间内只含唯一极小点的情况,均为一维局部搜索方法;当给定搜索区间内包含多个极小点时,上述一维搜索方法通常只是找到搜索区间内的局部极小点,而非全局极小点。



技术实现要素:

针对上述现有技术存在的不足,本发明的目的在于提出一种函数极点搜索的优化方法,该种函数极点搜索的优化方法目的在于解决现有一维搜索方法容易陷入局部极小点的问题,从而实现一维函数极点的全局搜索。

为达到上述目的,本发明采用如下技术方案予以实现。

一种函数极点搜索的优化方法,包括以下步骤:

步骤1,确定一维优化问题minxf(x),x∈d,f(x)为目标函数,d为搜索区间,d∈[q,g];min表示求最小值操作,x为目标函数的自变量,g>q,q、g分别为实数;

初始化:令xi为第i个搜索起点,i的初始值为1,且第1个搜索起点为搜索区间的左端点q;

分别令xn表示成功搜索到的第n个局部极小点,令xn′表示成功搜索到的第n'个局部极大点,n、n'的初始值都为1;

步骤2:若目标函数f(x)在第i个搜索起点xi处的右增量小于0,使用一维局部下山搜索算法搜索目标函数在搜索区间d内的第n个局部极小点xn;若目标函数f(x)在第i个搜索起点xi处的右增量大于0,使用一维局部上山搜索算法搜索目标函数在搜索区间d内的第n'个局部极大点xn′

若在搜索区间d内成功搜索到目标函数f(x)的第n个局部极小点xn或在搜索区间d内成功搜索到目标函数f(x)的第n'个局部极大点xn′,转至步骤3;否则表明搜索越界,并在搜索区间d内成功搜索到目标函数f(x)的p个局部极小点,以及在搜索区间d内成功搜索到目标函数f(x)的q'个局部极大点,转步骤4;

步骤3:令i加1,并将在搜索区间d内成功搜索到目标函数f(x)的第n个局部极小点xn或者在搜索区间d内成功搜索到目标函数f(x)的第n'个局部极大点xn′作为第i个搜索起点xi,然后令n'加1或者令n加1,转至步骤2;

直到在搜索区间d内成功搜索到目标函数f(x)的p个局部极小点,以及在搜索区间d内成功搜索到目标函数f(x)的q'个局部极大点;p为搜索区间d内成功搜索到目标函数f(x)的局部极小点总个数,q'为在搜索区间d内成功搜索到目标函数f(x)的局部极大点总个数,p、q'为分别为自然数;

步骤4:将搜索区间d内成功搜索到目标函数f(x)的p个局部极小点按各自对应目标函数值从小到大进行排序,并将对应目标函数值最小的局部极小点,作为搜索区间d内目标函数f(x)的全局极小点。

本发明相对于现有方法的主要优点在于:

第一,本发明的创新点在利用上山下山法越过局部极大点,到达下一个局部极小点,从而找出搜索区间内的全部极小点,进而找到全局极小点,实现一维全局搜索的目的。

第二,本发明采用黄金进退插值法为一维局部搜索方法,具有精度高,收敛速度快的优点。

第三,本发明采用以黄金系数为收缩系数,以为扩展系数的进退法搜寻包含一个极小点的区间,搜寻速度更快,效率更高。

附图说明

下面结合附图和具体实施方式对本发明作进一步详细说明。

图1为本发明的一种函数极点搜索的优化方法流程图;

图2为第一目标函数f1(x)的函数图像示意图;其中,带“*”的点为本发明方法找到的所有极大点与极小点,b点是本发明方法找到的全局极小点,a点为黄金分割法找到的局部极小点,c点为brent法找到的局部极小点;

图3为第二目标函数f2(x)的函数图像示意图;其中,带“*”的点为本发明方法找到的所有极大点与极小点,a点与b点是本发明方法找到的全局极小点,c点为黄金分割法与brent法找到的局部极小点;

图4为第三目标函数f3(x)的函数图像示意图;其中,带“*”的点为本发明方法找到的所有极大点与极小点,a点是本发明方法找到的全局极小点,b点为黄金分割法与brent法找到的局部极小点。

具体实施方式

下面结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚,完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的其他实施例,都属于本发明的保护范围。

使用本发明的一种函数极点搜索的优化方法解决一维函数中极值点求取的优化问题;参照图1,为本发明的一种函数极点搜索的优化方法流程图;所述函数极点搜索的优化方法,包括以下步骤:

步骤1,确定一维优化问题minxf(x),x∈d,d为目标函数,d为搜索区间,d∈[q,g];min表示求最小值操作,x为目标函数的自变量,g>q,q、g分别为实数。

初始化:令xi为第i个搜索起点,i的初始值为1,且第1个搜索起点为搜索区间的左端点q。

分别令xn表示成功搜索到的第n个局部极小点,令xn′表示成功搜索到的第n'个局部极大点,n、n'的初始值都为1。

步骤2:若目标函数f(x)在第i个搜索起点xi处的右增量小于0,即f(xi+δ)-f(xi)<0,使用一维局部下山搜索算法搜索目标函数在搜索区间d内的第n个局部极小点xn;若目标函数f(x)在第i个搜索起点xi处的右增量大于0,即f(xi+δ)-f(xi)>0,使用一维局部上山搜索算法搜索目标函数在搜索区间d内的第n'个局部极大点xn′;δ为第一扰动参数,且搜索区间d为连续区间时,搜索区间d为离散区间时,δ=1。

若在搜索区间d内成功搜索到目标函数f(x)的第n个局部极小点xn或在搜索区间d内成功搜索到目标函数f(x)的第n'个局部极大点xn′,转至步骤3;否则表明搜索越界,并在搜索区间d内成功搜索到目标函数f(x)的p个局部极小点,以及在搜索区间d内成功搜索到目标函数f(x)的q'个局部极大点,转步骤4。

具体地,一维局部上山搜索算法用于搜索目标函数的局部极大点,一维局部下山搜索算法用于搜索目标函数的局部极小点;一维局部上山搜索算法与一维局部下山搜索算法均采用黄金进退插值法寻找目标函数的局部极点;使用一维局部上山搜索算法搜索目标函数f(x)的局部极大点等效于使用一维局部下山搜索算法搜索目标函数的相反函数-f(x)的局部极小值。

采用黄金进退插值法为一维局部搜索方法,具有精度高,收敛速度快的优点,并且该黄金进退插值法结合进退法与抛物线插值法;当目标函数f(x)在第i个搜索起点xi处的右增量小于0,即f(xi+δ)-f(xi)<0,则使用一维局部下山搜索算法搜索目标函数在搜索区间d内的第n个局部极小点xn

所述使用一维局部下山搜索算法搜索目标函数f(x)在搜索区间d内的第n个局部极小点xn,其过程包括以下子步骤:

2a:令zk表示经过第k次搜索得到的局部极小点,k的初始值为0,且z0=xi,xi为第i个搜索起点;给定精度参数d,∈表示属于;本实施例中精度参数d取10-5

2b:以经过第k次搜索得到的局部极小点zk为起点,使用黄金进退法搜索使目标函数f(x)的函数值呈现高-低-高的3个极点,若成功搜索到,则转至子步骤2c;否则表明目标函数f(x)不存在极点。

2b.1初始化:记经过第j次搜索得到的三个极点,分别为经过第k次搜索得到的局部极小点zk、经过第j次搜索得到的第二极点x1j和经过第j次搜索得到的第三极点x2j,hj表示第j次搜索步长,j的初始值为0,x10=x0+h0,x20=x0+2h0。

若目标函数f(x)在经过第k次搜索得到的局部极小点zk处的右增量小于0,即令h0=h,h为初始搜索步长;若目标函数f(x)在zk处的右增量大于0,即令h0=-h;其中,如果搜索区间d为连续区间,初始搜索步长本实施例中h取值为0.01;如果搜索区间d为离散区间,初始搜索步长h取值为1;为第二扰动参数,如果搜索区间d为连续区间,取值为h/10;如果搜索区间d为离散区间,取值为1。

2b.2若经过第j次搜索得到的第三极点x2j处于搜索区间之外,则表明目标函数f(x)不存在极点;否则转至2b.3。

2b.3若f(zk)≥f(x1j)且f(x1j)<f(x2j),则表明成功搜索到目标函数f(x)的函数值呈现高-低-高的3个极点zk、x1j、x2j,转至2c;否则,令j加1,且若f(x0)≥f(x1j-1)时进行步长扩展,令第j次搜索步长x1j=x2j-1,x2j=x1j+hj;若f(zk)<f(x1j-1)时进行步长收缩,令第j次搜索步长hj=a0×hj-1,x1j=x0+hj,x2j=x1j-1,转至2b.2。

其中,a0为设定的黄金进退插值法的收缩系数,a1为设定的黄金进退插值法的扩展系数,a0∈(0,1),a1∈(0,5);如果搜索区间d为连续区间,本实施例中的收缩系数取扩展系数取如果搜索区间d为离散区间,本实施例中的收缩系数取0.5,扩展系数取2。

2c:将成功搜索到使目标函数f(x)的函数值呈现高-低-高的3个极点zk、x1j、x2j拟合一个抛物线函数,并求出该抛物线函数的极小点;若搜索区间d为连续区间,则令经过第k次搜索得到的局部极小点zk为该抛物线函数的极小点;若搜索区间d为离散区间,则令经过第k次搜索得到的局部极小点zk为所述抛物线函数的极小点取整后的点;若|zk-zk-1|<d,表明经过第k次搜索得到的局部极小点zk满精度要求,则将经过第k次搜索得到的局部极小点zk作为搜索目标函数f(x)在搜索区间d内的第n个局部极小点xn;否则令k加1,转至2b。

所述使用一维局部上山搜索算法搜索目标函数在搜索区间d内的第n'个局部极大点xn′,其过程包括以下子步骤:

2d:初始化:分别令g(x)=-f(x),f(x)为目标函数;令wk表示经过第k次搜索得到的局部极大点,k的初始值为0,且w0=xi;给定精度参数d,∈表示属于;本实施例中精度参数d取值10-5

2e:以经过第k次搜索得到的局部极大点wk为起点,使用黄金进退法搜索使g(x)的函数值呈现高-低-高的3个极点wk、x1j、x2j,若成功搜索到,则转至子步骤2f;否则表明函数g(x)不存在极点。

2e.1初始化:记经过第j次搜索得到的三个极点,分别为经过第k次搜索得到的局部极大点wk、经过第j次搜索得到的第二极点x1j和经过第j次搜索得到的第三极点x2j,hj表示第j次搜索步长,j的初始值为0;x10=x0+h0,x20=x0+2h0。

若函数g(x)在经过第k次搜索得到的局部极大点wk处的右增量小于0,即令h0=h,h为初始搜索步长;若函数g(x)在经过第k次搜索得到的局部极大点wk处的右增量大于0,即令h0=-h;其中,如果搜索区间d为连续区间,本实施例中初始搜索步长h取值为0.01;如果搜索区间d为离散区间,初始搜索步长h取值为1;为第二扰动参数,如果搜索区间d为连续区间,取值为h/10;如果搜索区间d为离散区间,取值为1。

2e.2若经过第j次搜索得到的第三极点x2j处于搜索区间之外,则表明函数g(x)不存在极点;否则转至2e.3。

2e.3若g(wk)≥g(x1j)且g(x1j)<g(x2j),则表明成功搜索到使函数g(x)的函数值呈现高-低-高的3个极点wk、x1j、x2j,转至2f;否则,令j加1,且若g(x0)≥g(x1j-1)时进行步长扩展,令第j次搜索步长x1j=x2j-1,x2j=x1j+hj;

若g(x0)<g(x1j-1)时进行步长收缩,令hj=a0×hj-1,x1j=x0+hj,x2j=x1j-1,转至2e.2。

其中,a0为设定的黄金进退插值法的收缩系数,a1为设定的黄金进退插值法的扩展系数,a0∈(0,1),a1∈(0,5);如果搜索区间d为连续区间为连续区间,本实施例中的收缩系数取扩展系数取如果搜索区间d为连续区间为离散区间,本实施例中的收缩系数取0.5,扩展系数取2。

2f:将成功搜索到使函数g(x)的函数值呈现高-低-高的3个极点wk、x1j、x2j拟合一个抛物线函数,并求出该抛物线函数的极小点;若搜索区间d为连续区间,则令经过第k次搜索得到的局部极大点wk为该抛物线函数的极小点;若搜索区间d为离散区间,则令经过第k次搜索得到的局部极大点wk为将所述抛物线函数的极小点取整后的点。

若|wk-wk-1|<d,表明经过第k次搜索得到的局部极大点wk满足精度要求,则令经过第k次搜索得到的局部极大点wk为目标函数在搜索区间d内的第n'个局部极大点xn′;否则令k加1,转至2e。

步骤3:令i加1,并将在搜索区间d内成功搜索到目标函数f(x)的第n个局部极小点xn或者在搜索区间d内成功搜索到目标函数f(x)的第n'个局部极大点xn′作为第i个搜索起点xi,然后令n'加1或者令n加1,转至步骤2。

直到在搜索区间d内成功搜索到目标函数f(x)的p个局部极小点,以及在搜索区间d内成功搜索到目标函数f(x)的q'个局部极大点;p为搜索区间d内成功搜索到目标函数f(x)的局部极小点总个数,q'为在搜索区间d内成功搜索到目标函数f(x)的局部极大点总个数,p、q'为分别为自然数。

步骤4:将搜索区间d内成功搜索到目标函数f(x)的p个局部极小点按各自对应目标函数值从小到大进行排序,并将对应目标函数值最小的局部极小点,作为搜索区间d内目标函数f(x)的全局极小点。

总结以上步骤:采用一维局部上山搜索算法和一维局部下山搜索算法可越过局部极大点,即交替使用一维局部上山搜索算法和一维局部下山搜索算法可越过局部极大点,到达下一个局部极小点,从而找出搜索区间d内目标函数f(x)的全部局部极小点;然后对该全部局部极小点按对应目标函数值从小到大排序,并将对应目标函数值最小的局部极小点作为搜索区间d内目标函数f(x)的全局极小点,实现一维全局搜索的目的。

下面通过实验对本发明效果作验证说明。

(一)实验内容

本实验将分别使用黄金分割法、brent法和本发明方法解决以下三个一维优化问题,该三个一维优化问题分别为第一目标函数f1(x)、第二目标函数f2(x)和第三目标函数f3(x);三个实验中,第一扰动参数δ取值为10-1,精度参数d取值为10-5,黄金进退插值法的初始搜索步长h取值为10-2,黄金进退插值法中的第二扰动参数取值为10-3

实验1:第一目标函数f1(x)=x2-10cos(πx)+10,d1=(-3,3)。

实验2:第二目标函数f2(x)=xsin(2x)-2cos(2x),d2=(-8,8)。

实验3:第三目标函数d3=(-2.5,2.5)。

其中,本实验极小点与其对应函数值的数据保留到小数点后4位;误差计算方法为:实验结果所得极小点对应函数值-真实全局极小点对应函数值。

(二)实验结果:

参照表1、表2和表3,其中表1为实验1结果,表2为实验2结果,表3为实验3结果。

表1

表2

表3

(三)结果分析:

参照图2,为第一目标函数f1(x)的函数图像示意图;其中,带“*”的点为本发明方法找到的所有极大点与极小点,b点是本发明方法找到的全局极小点,a点为黄金分割法找到的局部极小点,c点为brent法找到的局部极小点。

在实验一中,第一目标函数f1(x)在搜索区间d1内共有3个极小点,其中x=0为第一目标函数f1(x)在搜索区间d1内的全局极小点,所对应函数值为0;本发明方法成功的找到了第一目标函数f1(x)在搜索区间d1内的全局极小点,所得结果为1.0276e-12;黄金分割法则陷入了左边的局部极小点,所得结果为-1.9602;brent法陷入了右边的局部极小点,所得结果为1.9602。因此,黄金分割法与brent法所得到极小点对应函数值与真实值之间存在很大的误差。

参照图3,为第二目标函数f2(x)的函数图像示意图;其中,带“*”的点为本发明方法找到的所有极大点与极小点,a点与b点是本发明方法找到的全局极小点,c点为黄金分割法与brent法找到的局部极小点。

在实验二中,第二目标函数f2(x)在搜索区间d2内共有5个极小点,其中x=-5.7043与x=5.7043是第二目标函数f2(x)在搜索区间d2内的两个全局极小点,所对应函数值都为-6.0274;而使用本发明方法成功的找到了两个全局极小点,即所得结果为-5.7043与5.7043,而黄金分割法与brent法均陷入了局部极小值点c。

参照图4,为第三目标函数f3(x)的函数图像示意图;其中,带“*”的点为本发明方法找到的所有极大点与极小点,a点是本发明方法找到的全局极小点,b点为黄金分割法与brent法找到的局部极小点。

在实验三中,第三目标函数f3(x)在搜索区间d3内共有5个极小点,其中x=-2.0381为第三目标函数f3(x)在搜索区间d3内的全局极小点,所对应函数值为-2.0184;使用本发明方法成功的找到了全局极小点,即所得结果为-2.0381;而黄金分割法与brent法陷入了同一个局部极小点,所得结果为-0.6554。

在上面三个实验中,虽然本发明方法在运行时间上稍慢于黄金分割法与brent法,但因所耗费时间数量级只有10-4,并不会过多的影响算法性能;实验结果说明本发明的方法能够解决现有一维搜索方法容易陷入局部极小点的问题,实现一维全局搜索。

综上所述,仿真实验验证了本发明的正确性,有效性和可靠性。

显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精神和范围;这样,倘若本发明的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1