黄梅时节家家雨,青草池塘处处蛙。
有约不来过夜半,闲敲棋子落灯花。
鱼群算法?鸟群算法?蝙蝠算法?蚁群算法?病毒算法?。。。what?这些是什么沙雕算法?
别看这些算法名字挺接地气的,实际上确实很接地气。。。
以动物命名的算法可远不止这些,俗话说得好,只要脑洞大,就能玩出新花样,这句话在启发式算法界绝对名副其实!然鹅什么是启发式算法呢?
启发式算法:一个基于直观或经验构造的算法,在可接受的花费(指计算时间和空间)下给出待解决组合优化问题每一个实例的一个可行解,该可行解与最优解的偏离程度一般不能被预计。通俗点讲就是该类算法来源于生活,用这些算法求出来的解可能不是最好的,只能说是相对较好的,但是这个相对程度就不敢保证,只要能符合工程需要就行。
实际上启发式策略又分为启发式和元启发式,启发式策略是一类在求解某个具体问题时,在可以接受的时间和空间内能给出其可行解,但又不保证求得最优解(以及可行解与最优解的偏离)的策略的总称。许多启发式算法是相当特殊的,依赖于某个特定问题。元启发式通常是一个通用的启发式策略,他们通常不借助于某种问题的特有条件,从而能够运用于更广泛的方面。许多元启发式算法都从自然界的一些随机现象取得灵感,如模拟退火、遗传算法、粒子群算法、蜂群算法、狼群算法等。
天牛须搜索算法(BAS)
天牛须搜索(Beetle Antennae Search-BAS),也叫甲壳虫须搜索,是2017年提出的一种高效的智能优化算法。类似于遗传算法、粒子群算法、模拟退火等智能优化算法,天牛须搜索不需要知道函数的具体形式,不需要梯度信息,就可以实现高效寻优。相比于粒子群算法,天牛须搜索只需要一个个体,即一只天牛,运算量大大降低。
当天牛觅食时,天牛并不知道实物在哪里,而是根据食物气味的强弱来觅食。天牛有两只长触角,如果左边触角收到的气味强度比右边大,那下一步天牛就往左飞,否则就往右飞。依据这一简单原理天牛就可以有效找到食物。
蚁群算法(Ant Colony Algorithm)最初于1992年由意大利学者M.Dorigo等人提出,它是一种模拟自然界中真实蚁群觅食行为的仿生优化算法。研究发现:每只蚂蚁觅食时在走过的路线上会留下一种称为信息素的物质,蚂蚁之间靠感知这种物质的浓度进行信息传递。蚂蚁在选择路径时总是倾向于朝信息索浓度高的方向移动,而距离短的路径上走过的蚂蚁多,留下的信息素也多,后续蚂蚁选择它的概率也会越大;其他路径上的信息素会随着时间的推移不断挥发,这样就形成了一种正反馈机制,最后整个蚁群聚集到最短路径上。
人工蚁群算法模拟了这一过程,每只蚂蚁在解空间独立地搜索可行解,解越好留下的信息素越多,随着算法推进,较优解路径上的信息素增多,选择它的蚂蚁也随之增多,最终收敛到最优或近似最优的解上。
鱼群算法
人工鱼群算法为山东大学副教授李晓磊2002年从鱼找寻食物的现象中表现的种种移动寻觅特点中得到启发而阐述的仿生学优化方案。
在一片水域中,鱼往往能自行或尾随其他鱼找到营养物质多的地方,因而鱼生存数目最多的地方一般就是本水域中营养物质最多的地方,人工鱼群算法就是根据这一特点,通过构造人工鱼来模仿鱼群的觅食、聚群及追尾行为,从而实现寻优。
人工鱼拥有以下几种典型行为:
(1)觅食行为:一般情况下鱼在水中随机地*游动,当发现食物时,则会向食物逐渐增多的方向快速游去。
(2)聚群行为: 鱼在游动过程中为了保证自身的生存和躲避危害会自然地聚集成群,鱼聚群时所遵守的规则有三条:
分隔规则:尽量避免与临近伙伴过于拥挤;
对准规则:尽量与临近伙伴的平均方向一致;
内聚规则:尽量朝临近伙伴的中心移动。
(3)追尾行为:当鱼群中的一条或几条鱼发现食物时,其临近的伙伴会尾随其快速到达食物点。
(4)随机行为:单独的鱼在水中通常都是随机游动的,这是为了更大范围地寻找食物点或身边的伙伴。
鸟群算法
2016年,Meng等人收到鸟类群智能的启发,提出了一种全新的群智能优化算法——鸟群算法(Bird Swarm Algorithm, BSA),鸟群算法是在基于鸟类社会行为和社交互动的基础上,模拟其三种社会行为:觅食行为、警戒行为与飞行行为而来。相比于粒子群算法和差分进化算法等传统优化算法,鸟群算法不仅遗传了寻优速度块、变异性强等优点,更具有自身独特的优势,由于鸟群算法存在四条灵活的搜索路线,并且可以*调整,其在寻优的过程中能更好地平衡高效能与准确性。
自然界中的蜜蜂总能在任何环境下以极高的效率找到优质蜜源,且能适应环境的改变。蜜蜂群的采蜜系统由蜜源、雇佣蜂、非雇佣蜂三部分组成,其中一个蜜源的优劣有很多要素,如蜜源花蜜量的大小、离蜂巢距离的远近、提取的难易程度等;雇佣蜂和特定的蜜源联系并将蜜源信息以一定概率形式告诉同伴;非雇佣蜂的职责是寻找待开采的蜜源,分为跟随蜂和侦查蜂两类,跟随峰是在蜂巢等待而侦查蜂是探测蜂巢周围的新蜜源。蜜蜂采蜜时,蜂巢中的一部分蜜蜂作为侦查蜂,不断并随机地在蜂巢附近寻找蜜源,如果发现了花蜜量超过某个阈值的蜜源,则此侦査蜂变为雇佣蜂开始釆蜜,采蜜完成后飞回蜂巢跳摇摆舞告知跟随峰。摇摆舞是蜜蜂之间交流信息的一种基本形式,它传达了有关蜂巢周围蜜源的重要信息如蜜源方向及离巢距离等,跟随峰利用这些信息准确评价蜂巢周围的蜜源质量。当雇佣蜂跳完摇摆舞之后,就与蜂巢中的一些跟随蜂一起返回原蜜源采蜜,跟随蜂数量取决于蜜源质量。以这种方式,蜂群能快速且有效地找到花蜜量最高的蜜源。
蜂群算法(Bee Colony Algorithm)是建立在蜜蜂自组织模型和群体智能基础上提出的一种非数值优化计算方法。于1995年第一个提出了蜂群的自组织模拟模型。在模型中,尽管每个社会阶层中的蜜蜂只完成单一任务,但蜜蜂相互间通过摇摆舞、气味等多种信息方式,使得整个蜂群能协同完成诸如构建蜂巢、收获花粉等多项任务。于2005年成功地把蜂群算法应用在函数的数值优化问题上,提出了比较系统且新颖的群体智能优化算法——ABCA算法(Artificial Bee Colony Algorithm,简称ABCA),算法主要模拟了蜂群的智能采蜜行为,蜜蜂根据各自分工进行各自的采蜜活动,并且通过蜜源信息的共享和交流,从而找到问题的最优解。Basturk于2006年又进一步将人工蜂群算法理论应用到解决限制性数值优化的问题上,并取得了较好的测试效果。人工蜂群在寻优等方面具有收敛速度快、求解质量高、鲁棒性好、通用性强等优点,但也可能有早熟收敛和后期容易陷入局部极值等不足。
萤火虫算法
2005年,印度学者K.N.Krishnanand和D.Ghose在IEEE群体智能会议上提出一种新的群智能优化算法,人工萤火虫群优化(Glowworm Swarm Optimization, GSO)算法。2009年,剑桥学者Xin-She Yang根据自然界中萤火虫的发光行为提出萤火虫算法(Firefly Algorithm, FA)。这2种算法均是受萤火虫的发光特性和集聚行为的启发。
GSO算法思想源于模拟自然界中萤火虫在晚上群聚活动的自然现象而提出,在萤火虫的群聚活动中,各只萤火虫通过散发荧光素与同伴进行觅食以及求偶等信息交流。一般来说,荧光素越亮的萤火虫其号召力就越强,最终会出现很多萤火虫聚集在一些荧光素较亮的萤火虫周围。人工萤火虫算法就是根据这种现象提出的一种新型的仿生群智能优化算法。在人工萤火虫群优化算法中,每只萤火虫被视为解空间的一个解,萤火虫种群作为初始解随机的分布在搜索空间中,然后根据自然界萤火虫的移动方式进行解空间中每只萤火虫的移动。通过每一次的移动,最终使得萤火虫聚集到较好的萤火虫周围,也即是找到多个极值点,从而达到种群寻优的目的。
FA算法的原理是把空间各点看成萤火虫,利用发光强的萤火虫会吸引发光弱的萤火虫的特点。在发光弱的萤火虫向发光强的萤火虫移动的过程中,完成位置的迭代,从而找出最优位置,即完成了寻优过程。搜索过程和萤火虫的两个重要参数有关:萤火虫的发光亮度和相互吸引度,发光亮的萤火虫会吸引发光弱的萤火虫向它移动,发光越亮代表其位置越好,最亮萤火虫即代表函数的最优解。发光越亮的萤火虫对周围萤火虫的吸引度越高,若发光亮度一样,则萤火虫做随机运动,这两个重要参数都与距离成反比,距离越大吸引度越小。
细菌算法
细菌觅食算法(Bacterial Foraging Optimization,BFO)在2002年,被K.M.Passino在论文“Biomimicry of bacterial foraging for distributed optimization and control”中被提出。BFO算法是模仿Eeoli大肠杆菌在人体肠道内吞噬食物的行为而提出一种新型仿生类算法。在BFO算法中,一个细菌代表一个解,它在寻找最优解时只依靠自己。BFO由于其简单、高效的特点,在许多工程和科学领域得到了广泛的应用。然而,在处理更复杂的优化问题,特别是高维多模态问题时,与其他群体智能优化算法相比,BFO算法的收敛性较差
细菌觅食算法是基于细菌觅食行为过程而提出的一种仿生随机搜索算法。该算法模拟细菌群体的行为,包括趋化,繁殖,驱散等三个个步骤。
细菌觅食算法主要包括三层循环,外层是驱散操作,中间层是繁殖操作,内层是趋化操作.算法的核心是内层的趋化性操作,它对应着细菌在寻找食物过程中所采取的方向选择策略,对算法的收敛性有着极其重要的影响。
狼群算法
狼群算法(Wolf Colony Algorithm, WCA)是2011年由Yang等提出的一种群智能优化算法,现已实现在医学、三维传感器优化、人工神经网络、机器人路径规划、机器学习、水利水电优化等众多领域。狼群算法是一种随机概率搜索算法,使其能够以较大的概率快速找到最优解;狼群算法还具有并行性,可以在同一时间从多个点出发进行搜索,点与点之间互不影响,从而提高算法的效率。
狼群算法意在模拟狼群的捕猎行为处理函数优化问题,将狼群分为三类:头狼、探狼和猛狼。算法的基本思想是:从待寻优空间中的某一初始猎物群开始,其中具有最佳适应度值的狼作为头狼,该操作称为头狼生成准则。然后,选取除头狼外最佳的m匹狼作为探狼,进行预定方向上的寻优搜索,采用新旧猎物规则保留优质的猎物,一旦发现比当前头狼更优质的猎物,则具有该猎物的探狼成为头狼,此过程称为探狼游走行为。头狼发起嚎叫,通知周围猛狼迅速走向头狼靠拢,探寻优质猎物,如果寻优得到的优质猎物比头狼更优,则该狼代替头狼再次发起嚎叫,直到猛狼距离猎物一定距离时停止。此过程称为猛狼奔袭行为。当猛狼距离猎物达到预先设定的阈值时,转变为围攻行为,对头狼附近的优质猎物进行寻优,此过程称为群狼围攻行为。
猴群算法
猴群算法是于2008年由Zhao和Tang提出的一种新的用于求解大规模、多峰优化问题的智能优化算法。其思想在于通过模拟自然界中猴群爬山过程中爬、望和跳的几个动作,设计了三个搜索过程:爬过程主要用来搜索当前所在位置的局部最优解;望过程主要通过眺望来搜索邻近领域比当前位置更优的解,以便加速最优解的搜寻过程;跳过程的目的在于由当前搜索区域转移到其它区域,以避免搜索过程陷入局部最优。在猴群算法中,其花费的CPU时间主要在于寻找局部最优位置的爬过程。爬过程中每次迭代的计算量主要集中在目标函数伪梯度的计算,其只涉及到当前位置的两个临近位置的目标函数值而与决策向量的维数无关。这一特征显著地提高了算法的性能,尤其针对高维优化问题时效果更为明显。另外,跳过程迫使猴群由当前区域转移到新的区域,从而避免算法陷于局部最优。作为一种智能算法,MA能够有效地求解高维的、非线性不可微的函数优化问题。此外,MA需要调整的参数也少,这使得MA易于实现。尽管猴群算法在求解高维数优化问题时有了较大的突破,但其也存在一些不足。首先,对于不同的优化问题,在利用MA求解时需要设置不同的参数,并且这些参数对猴群算法来说很重要,一旦设置的不准确,即便是优化问题的近似最优解也很难找到。另外,猴群算法求解优化问题时耗费的CPU时间也较长,在优化效率方面仍具有很大的提高空间。
经过长期的对猴群活动习性的观察发现,猴群在爬山的过程中,总是可以分解为攀爬、观跳、空翻行为。首先,猴子会在较小范围内爬行,不断向更高处前进。猴群的攀爬行为就相当于狼群算法中搜寻猎物的过程,寻找局部地区内的一个最优值。找到更优的值,就替换掉原来的值。猴子爬到所在地的最高处时,就观察附近有没有更高的位置,如果有,就跳跃至更高处,然后继续攀爬行为至顶端,这就是狼群的观跳行为。为了发现全局最高的地方,猴子会空翻至更远的区域,然后继续爬行,就是猴群的空翻行为。重复几次这样的行为,直至到达全局最高点处。
猴群算法与蜂群算法、狼群算法等群体智能算法有所区别,蜂群算法中有引领蜂、侦查蜂及跟随蜂,狼群算法则有搜寻狼、头领狼和围攻狼,角色之间相互转换。而在这里,猴群没有角色的变更,只有阶段性的行为变化。其中攀爬行为穿插在整个的前进过程中,例如在观跳行为的前后和空翻行为前后,是个耗时最长的行为。
布谷鸟算法(Cuckoo Search)
布谷鸟最特殊的习性是寄巢产卵。大自然中有一些布谷鸟会将自己的卵产在寄主鸟巢中,同时布谷鸟也会移除鸟巢中其他卵使得鸟巢中的卵数量保持相近。因为布谷鸟的卵与寄主的卵相比孵化周期更短,孵出的布谷鸟幼雏势必本能地把寄主的卵推出卵巢,以此增加自己的存活率,提高竞争性。
在某些情况下,当布谷鸟寄生其卵时,寄主鸟类会攻击布谷鸟,也有可能发现鸟巢中陌生的卵。这时,寄主鸟类会丢弃布谷鸟所产的卵或直接重新筑巢。与寄主鸟类不停地争斗中,布谷鸟的卵及孵化的幼雏皆沿着仿照寄主鸟类的方式生长。
布谷鸟搜索(cuckoo search, CS)算法属于典型的具有迭代搜寻特征的群智能优化算法。作为新型的启发式搜索算法,是以布谷鸟的寄巢产卵特点及少部分生物的莱维飞行(Levy flights)模式为参照,由Yang等于2009年提出的。其主要思想是通过随机行走方式产生候选鸟巢以及采用贪婪策略更新鸟巢位置,最终使鸟巢位置达到或者接近全局最优解。
蝙蝠算法
蝙蝠算法(Bat Algorithm,BA) 是Yang教授于2010年基于群体智能提出的启发式搜索算法,是一种搜索全局最优解的有效方法。该算法是一种基于迭代的优化技术,初始化为一组随机解,然后通过迭代搜寻最优解,且在最优解周围通过随机飞行产生局部新解,加强了局部搜索。与其他算法相比,BA在准确性和有效性方面远优于其他算法,且没有许多参数要进行调整。
蝙蝠使用回声定位技术检测猎物、避开障碍物以及在黑暗的环境中找到栖息地。其可以发出非常响亮的脉冲并听取从周围物体反弹回来的回声,根据回声到双耳的不同时间与强度判断物体所在的方向和位置;还可以根据目标猎物或者障碍物的特征发出不同性质的脉冲。
BA算法是模拟自然界中蝙蝠利用一种声呐来探测猎物、避免障碍物的随机搜索算法即模拟蝙蝠利用超声波对障碍物或猎物进行最基本的探测、定位能力并将其和优化目标功能相联系。BA算法的仿生原理将种群数量为的蝙蝠个体映射为D维问题空间中的NP个可行解,将优化过程和搜索模拟成种群蝙蝠个体移动过程和搜寻猎物利用求解问题的适应度函数值来衡量蝙蝠所处位置的优劣,将个体的优胜劣汰过程类比为优化和搜索过程中用好的可行解替代较差可行解的迭代过程。在蝙蝠搜索算法中,为了模拟蝙蝠探测猎物、避免障碍物,需假设如下三个近似的或理想化的规则:
1)所有蝙蝠利用回声定位的方法感知距离,并且它们采用一种巧妙的方式来区别猎物和背景障碍物之间的不同。
2)蝙蝠在位置\(x_i\)以速度\(v_i\)随机飞行,以固定的频率\(f_{min}\)、可变的波长\(\lambda\)和音量\(A_0\)来搜索猎物。蝙蝠根据自身与目标的邻近程度来自动调整发射的脉冲波长(或频率)和调整脉冲发射率\(r\)属于\([0,1]\)。
3)虽然音量的变化方式有多种但在蝙蝠算法中, 假定音量A是从一个最大值A0(整数)变化到固定最小值Amin
在SFLA算法中,种群被分为若干个子群(memeplex),每一个子群包括一定数量的青蛙。不同的memeplex具有不同的文化,分别进行局部搜索。在每个子群中,每只青蛙都有自己的想法,并且受到其他青蛙想法的影响,通过memetic进化来发展。这样经过一定的memetic进化以及跳跃过程,这些想法思路就在各个memeplex中传播开来,然后,根据需要局部搜索和跳跃,直到收敛或满足标准为止。
算法同样如此,以上这些以动物命名的算法同样都是学者们通过仔细观察动物们的行为得到的灵感,从而设计出了各类精彩的算法。这就告诉我们,平时要仔细观察,善于思考,说不定哪天我们就可以提出一个什么泥鳅算法啊,小猫小狗算法啊之类的,再不济,我们可以在人家鱼群算法的基础上发展成鲫鱼算法,鲤鱼算法,海豚算法之类的,哈哈,这当然是开玩笑的。做学术研究不能为了发论文而设计算法,而是要提出问题,针对问题来设计合理有效的算法。
更多精彩内容请关注订阅号“优化与算法”及添加QQ群1032493483获取更多资料。