一种基于飞蛾扑火算法计算函数最值的方法与流程

文档序号:14479021阅读:2585来源:国知局

本发明涉及函数优化求解技术领域,尤其涉及一种基于飞蛾扑火算法计算函数最值的方法。



背景技术:

目前,随着工艺越来越复杂,计算量越来越大,涉及的复杂度越来越高。如果采用传统的辅助工具进行计算,不仅会极大的浪费时间,增加工作的复杂性,也会耗费大量的精力、物力、财力。而随着大数据技术的发展,基于数据挖掘等算法在工程优化中得到了十分广泛的应用。

工程优化是工程数学问题,优化过程就是对特定问题找到最优解决方案的过程。优化方法大致可以分为确定性优化和随机优化两大类。确定性优化研究虽相对成熟,但是对工程应用具有较为苛刻的条件,所以,随机优化方法得到了迅速发展。

群智能算法是目前研究比较广泛的随机优化方法,包括比较经典的蚁群算法,遗传算法,粒子群算法等,每一个群智能优化算法都有它独特的优势。

自然界中生活的昆虫、动物等生物,他们通过协同合作完成庞大的任务。人们从中受到启发,根据群体中的昆虫,动物的社会行为,模仿生物系统中群体生活习性,发明了群体智能优化算法。

群智能优化算法是模拟生物群体生活中,个体与个体之间的相互交流与协作,用简单、有限的个体行为与智能,通过相互合作,形成群体强大的能力。群智能算法简单、鲁棒性强、可扩展性高、具有广泛的适用性等优点。算法在缺乏全局信息的情况下,可快速的解决各种复杂问题,成为解决复杂问题和优化问题的常用方法,受到了各个领域、国内外学者的广泛关注和运用。如专利《一种新型群智能优化算法-鸽群算法》,《基于遗传算法的自动搬运小车调度控制方法》等,其中,《一种新型群智能优化算法-鸽群算法》存在收敛速度慢,收敛精度低,容易陷入局部最优的问题,《基于遗传算法的自动搬运小车调度控制方法》存在较高的算法复杂度,收敛速度缓慢的缺陷。

飞蛾扑火算法(mfo)是受飞蛾的启发产生的算法,作为群智能算法的一种,在解决函数最值问题以及一些工业问题中具有较好的应用效果。但是,飞蛾扑火算法与大多数群智能优化算法一样存在问题的相同,容易陷入局部极值点、进化后期收敛速度慢、精度较差等。



技术实现要素:

本发明的目的在于提供一种基于飞蛾扑火算法计算函数最值的方法,从而解决现有技术中存在的前述问题。

为了实现上述目的,本发明采用的技术方案如下:

一种基于飞蛾扑火算法计算函数最值的方法,包括如下步骤:

s1,利用飞蛾扑火算法产生n个随机解;

s2,采用反向学习方法获取n个随机解的n个反向解:

s3,n个随机解和n个反向解形成2n个候选集,在2n个候选集中优选n个作为初始化的飞蛾;

s4,利用初始化的飞蛾种群,对函数进行迭代处理,若迭代次数小于t,计算获得随机选取的火焰flameno并执行s5,否则执行s7,t是最大迭代次数;

s5,比较当前迭代处理的飞蛾个数i火焰个数flameno之间的关系,如果i≤flameno,采用螺旋飞翔的方式获得局部最优解;如果i>flameno,利用随机选取的第flameno个火焰,采用螺旋逼近的方法进行全局勘探,重复该操作,至i=n;

s6,重复s4-s5,至迭代次数等于t;

s7返回适应值。

优选地,所述反向学习的数学模型为:

x*=ub+lb-x,

式中,x是随机解,x*是x的反向解,ub,lb分别是x对应的最大值和最小值。

优选地,s3中,所述在2n个候选集中优选n个作为初始化的飞蛾种群,采用如下方法进行实施:将2n个候选集分别代入函数中,求解对应的适应值,选取n个最小的适应值对应的n个候选集,作为初始化的飞蛾种群。

优选地,s4中,所述计算获得随机选取的火焰flameno,按照如下公式进行计算:

其中,l为当前迭代次数,n为火焰数量的最大值,t为最大迭代次数。

优选地,s5中,所述如果i≤flameno,采用螺旋飞翔的方式获得局部最优解,具体为,采用如下公式进行计算:

mi=s(mi,fj),

s(mi,fj)=di·ebt·cos(2πt)+fj,

di=|fj-mi|,

其中,mi表示第i只飞蛾的位置,fj表示第j个火焰的位置,s为螺旋函数;di表示第i个飞蛾与第j个火焰之间的距离,b为常数,t∈[-1,1]之间的一个随机数。

优选地,在所述飞蛾扑火算法中,引入自适应权重,则根据如下的自适应权重数学模型:

得到如下的改进的螺旋函数:

s(mi,fj)=w·di·ebt·cos(2πt)+fj,

其中,wmax为常数,一般设置为0.9,wmin设置为0.4,iter为当前迭代次数,w是自适应权值。

优选地,s5中,所述如果i>flameno,利用随机选取的第flameno火焰,采用螺旋逼近的方法进行全局勘探,具体为,采用如下公式进行计算:

mi=s(mi,fj),

s(mi,fj)=di·ebt·cos(2πt)+fflameno,

di=|fj-mi|,

其中,mi表示第i只飞蛾的位置,fflameno表示随机选取的第flameno个火焰号,s为螺旋函数;di表示第i个飞蛾与第j个火焰之间的距离,b为常数,t∈[-1,1]之间的一个随机数。

优选地,在所述飞蛾扑火算法中,引入自适应权重,则根据如下的自适应权重数学模型:

得到如下的改进的螺旋函数:

s(mi,fj)=w·di·ebt·cos(2πt)+fflameno,

其中,wmax为常数,一般设置为0.9,wmin设置为0.4,iter为当前迭代次数,w是自适应权值。

本发明的有益效果是:本发明实施例提供的基于飞蛾扑火算法计算函数最值的方法,通过使用反向学习法对现有技术的飞蛾扑火算法进行改进,增加了候选集的个数,保留了精英,从而使得计算结果更加接近于精确解,而且,采用本发明实施例提供的方法,收敛精度和收敛速度在某些函数的运用上也明显高于现有技术中的飞蛾扑火算法。

附图说明

图1是本发明实施例提供的基于飞蛾扑火算法计算函数最值的方法流程示意图;

图2是没有采用反向学习方法初始化种群得到的函数适应值的示意图;

图3是采用反向学习方法初始化种群得到的函数适应值的示意图;

图4是没有采用自适应权重得到的函数适应值的示意图;

图5是采用自适应权重得到的函数适应值的示意图;

图6是本发明中函数f1的收敛曲线;

图7是本发明中函数f2的收敛曲线;

图8是本发明中函数f3的收敛曲线;

图9是本发明中函数f5的收敛曲线。

具体实施方式

为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施方式仅仅用以解释本发明,并不用于限定本发明。

如图1所示,本发明实施例提供了一种基于飞蛾扑火算法计算函数最值的方法,包括如下步骤:

s1,利用飞蛾扑火算法产生n个随机解;

s2,采用反向学习方法获取n个随机解的n个反向解;

s3,n个随机解和n个反向解形成2n个候选集,在2n个候选集中优选n个作为初始化的飞蛾;

s4,利用初始化的飞蛾种群,对函数进行迭代处理,若迭代次数小于t,计算获得随机选取的火焰flameno并执行s5,否则执行s7,t是最大迭代次数;

s5,比较当前迭代处理的飞蛾个数i与火焰个数flameno之间的关系,如果i≤flameno,采用螺旋飞翔的方式获得局部最优解;如果i>flameno,利用随机选取的第flameno火焰,采用螺旋逼近的方法进行全局勘探,重复该操作,至i=n;

s6,重复s4-s5,至迭代次数等于t;

s7返回适应值。

飞蛾扑火算法可随机产生初始化种群,但是随机产生的初始化种群的数量比较少。因此,会漏掉比较好的候选解,为了解决该问题,选取更好的初始化飞蛾种群,本发明实施例提供的上述方法中,采用了反向学习的方法初始化飞蛾种群,通过反向学习的方法得到初始化飞蛾种群,与原来的种群一起形成的飞蛾种群的数量就增加了1倍,如果,随机产生的初始化种群数量为n个,则利用反向学习方法初始化飞蛾种群后,得到的种群数量就为2n个,然后从2n个种群中可以优选n个作为最终的初始化飞蛾种群。

所以,与现有技术中的飞蛾扑火算法相比,本发明中,通过采用反向学习方法对随机种群进行处理,得到双倍的初始化种群数量后,再从中优选出相同数量的候选集作为最终的种群,提高了初始化飞蛾种群的多样性,同时保存了种群的精英。

本发明实施例中,通过采用函数对上述方法的效果进行分析,图2为没有采用反向学习方法得到的额函数适应值分布图,图3为采用反向学习方法得到的函数适应值分布图。

从图2和图3中可以看出,采用反向学习方法得到的函数适应值波动范围在[0,8e-33]内,函数适应值更加接近全局最优解0,没采用反向学习方法得到的函数适应值的波动范围在[0,6.5e4]内,与采用反向学习方法相比,没采用反向学习方法时,函数适应值离最优解更远。

可见,采用反向学习方法可以使得函数适应值更加接近全局最优解。

其中,所述反向学习的数学模型可以为:

x*=ub+lb-x,

式中,x是随机解,x*是x的反向解,ub,lb分别是x对应的最大值和最小值。

本发明的一个优选实施例中,s3中,所述在2n个候选集中优选n个作为初始化的飞蛾种群,可以采用如下方法进行实施:将2n个候选集分别代入函数中,求解对应的适应值,选取n个最小的适应值对应的n个候选集,作为初始化的飞蛾种群。

本发明实施例中,s4中,所述计算获得随机选取的火焰flameno,按照如下公式进行计算:

其中,l为当前迭代次数,n为火焰数量的最大值,t为最大迭代次数。

在飞蛾扑火算法中,如果飞蛾只朝着火焰移动,会导致mfo算法很快陷入局部最优,为了避免这种情况,可以为每个飞蛾选取一个参考火焰来更新它们的位置。每一次迭代更新火焰后,火焰根据它们的适应度值来排序,后飞蛾朝着相应更新火焰的位置更新它们自己的位置,第一只飞蛾总是相对于最优火焰的位置更新自己的位置,而最后的那只飞蛾相对于最差火焰的位置更新自己的位置,这样就可以使火焰的数量在迭代过程中自适应值减小。可以按照如下公式,计算随机选取的参考火焰flameno的位置:

其中,l为当前迭代次数,n为火焰数量的最大值,t为最大迭代次数。

在迭代开始的时候,飞蛾进行全局勘探,而后选择局部寻优,而在迭代的最后,飞蛾仅使用最好的火焰更新它们的位置,求出全局最优,从而避免mfo算法很快陷入局部最优。

本发明实施例中,s5中,所述如果i≤flameno,采用螺旋飞翔的方式获得局部最优解,具体为,采用如下公式进行计算:

mi=s(mi,fj),

s(mi,fj)=di·ebt·cos(2πt)+fj,

di=|fj-mi|,

其中,mi表示第i只飞蛾的位置,fj表示第j个火焰的位置,s为螺旋函数;di表示第i个飞蛾与第j个火焰之间的距离,b为常数,t∈[-1,1]之间的一个随机数。

mfo算法会随机产生解空间,解空间对应于飞蛾种群,因此飞蛾种群是候选解,用矩阵m表示候选解的集合,矩阵如下所示:

其中,n代表飞蛾的数量,d是变量的维度。

火焰矩阵用采用f表示,且维度和m相等,矩阵表示如下:

其中,n代表飞蛾的数量,d是变量的维度。

of是飞蛾的适应值,飞蛾扑火过程中会更新位置,从而获取适应值,适应值矩阵如下所示:

mfo算法是近似于优化问题中全局最佳的三元组:

mfo=(i,p,t)

其中,i是一个求飞蛾适应值的函数,p是飞蛾在搜索空间里的搜索函数,t是函数的返回值,条件满足,t函数返回真;不满足,t函数返回假,数学模型展示分别如下所示:

i:φ→{m,om}

p:m→m

t:m→{true,false}

飞蛾扑火,采用螺旋函数,使用螺旋飞行更新每一只飞蛾相对于火焰的位置,螺旋函数的数学模型如下所示:

mi=s(mi,fj)

其中,mi表示第i只飞蛾的位置,fj表示第j个火焰的位置,s为螺旋函数,其中,螺旋函数如下所示:

s(mi,fj)=di·ebt·cos(2πt)+fj

其中,di表示第i个飞蛾与第j个火焰之间的距离,b为常数,t∈[-1,1]之间的一个随机数,其中,di的数学表达示如下所示:

di=|fj-mi|

其中,mi表示第i个飞蛾的位置,fj表示第j个火焰的位置,di表示第i个飞蛾与第j个火焰之间的距离。di的求解公式模拟了飞蛾的飞行的路径,通过与火焰的距离计算确定下一个位置。在这个等式中,其中t表示飞蛾下一个位置接近火焰的程度(t=-1表示最接近火焰,而t=1说明距离火焰最远)。

在所述飞蛾扑火算法中,引入自适应权重,则根据如下的自适应权重数学模型:

得到如下的改进的螺旋函数:

s(mi,fj)=w·di·ebt·cos(2πt)+fj,

其中,wmax为常数,一般设置为0.9,wmin设置为0.4,iter为当前迭代次数,w是自适应权值。

粒子群算法中,为了平衡全局勘探和局部寻优能力,引入了惯性权重,实验表明,采用惯性权重的粒子群优化算法具有很好的效果。

本发明实施例中,在飞蛾扑火算法中,引入了自适应权重,当飞蛾距离火焰距离远的时候,飞蛾飞行的速度快,加快全局勘探能力,当飞蛾距离火焰距离近的时候,飞蛾飞行的速度慢,从而使得局部寻优更准确。

自适应权重的提出,是为了使得飞蛾更容易寻找到局部最优解,通过图4可以看出,没有采用自适应权重的飞蛾扑火算法,适应值更加分散,说明如果没有采用自适应权重,函数局部寻优能力较差。通过图5可以看出,采用自适应权重的飞蛾扑火算法,适应值更加集中,说明采用自适应权重,飞蛾局部寻优能力得到了增强。

s5中,所述如果i>flameno,利用随机选取的第flameno火焰,采用螺旋逼近的方法进行全局勘探,具体为,采用如下公式进行计算:

mi=s(mi,fj),

s(mi,fj)=di·ebt·cos(2πt)+fflameno,

di=|fj-mi|,

其中,mi表示第i只飞蛾的位置,fflameno表示随机选取的第flameno个火焰的位置,s为螺旋函数;di表示第i个飞蛾与第j个火焰之间的距离,b为常数,t∈[-1,1]之间的一个随机数。

在所述飞蛾扑火算法中,引入自适应权重,则根据如下的自适应权重数学模型:

得到如下的改进的螺旋函数:

s(mi,fj)=w·di·ebt·cos(2πt)+fflameno,

其中,wmax为常数,一般设置为0.9,wmin设置为0.4,iter为当前迭代次数,w是自适应权值。

为了测试本发明实施例提供的方法的有效性,选取了16个测试函数,测试函数包括单峰函数,多峰函数以及固定维度函数,测试函数如表1-3所示:

表1单峰函数

表2多峰函数

表3固定维度函数

采用本发明实施例提供的方法对所有的函数均迭代1000次,种群规模设置为30,采用window764bit系统,采用matlab2015b进行实验仿真,结果如表4所示:

表4实验结果

从表4中可以看出,本发明实施例提供的方法(改进的飞蛾扑火算法,owmfo)与飞蛾扑火算法(mfo)相比较,函数f1~f3,f5,f7,f9,f10,f13,f15的优化效果得到了明显的改善,而f6,f8,f11,f16几个函数的效果基本持平。从标准偏差可以看出,除f7以外,其余几个函数的稳定性均得到了提高。

所以,与现有技术中的飞蛾扑火算法比较,采用本发明实施例提供的方法,在函数最值的求解中具有更好的优化效果。

图6-图9分别展示了函数f1、f2、f3、f5分别采用owmfo算法与mfo算法的优化效果图,从图中可以看出,owmfo算法所得的适应值都要小于mfo算法,由此,也可知owmfo算法在函数的最值求解中具有更好的优化效果。

通过采用本发明公开的上述技术方案,得到了如下有益的效果:本发明实施例提供的基于飞蛾扑火算法计算函数最值的方法,通过使用反向学习法对现有技术的飞蛾扑火算法进行改进,增加了候选集的个数,保留了精英,从而使得计算结果更加接近于精确解,而且,采用本发明实施例提供的方法,收敛精度和收敛速度在某些函数的运用上也明显高于现有技术中的飞蛾扑火算法。

以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视本发明的保护范围。

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