找回密码
 立即注册
查看: 405|回复: 9

第三十六弹——野马优化器

[复制链接]
发表于 2022-4-15 19:22 | 显示全部楼层 |阅读模式
引言

首先特别感谢大家对我文章质量的反馈。确实,近年来新算法推出的速度越来越快,而随之产生的就是算法质量良莠不齐现象。我推出此专栏的目的本来是想以“把复杂东西简单化”这个思路来给大家安利一些较新颖的算法,偶尔推荐了一些质量下乘的算法,属实是我的失误,鼠妇算法就是一个例子。未来我会吸取教训,推出更多有意义的文章。再次感谢!
本期我们介绍野马优化器(Wild Horse Optimizer,WHO)。该算法由Iraj Naruei等人于2021年提出,主要模拟了野马种群的干饭、交配、领导者的交流和选择这三种行为。因其在CEC2017、CEC2019等测试函数上具有较好的实验结果,而在未来具有广泛的应用前景。
野马优化器

在自然界中,野马通常为群居,包括一匹种马、几匹母马和小马驹。马群一般有"位于领土中"和"位于非领土中"两类状态,原文模拟的就是第二种状态。
一般情况下,种马会出现在靠近母马的地方以进行交流,交配随时可能发生。小马驹通常在出生后的第一周开始吃草,随着年龄的增长,吃草和休息时间减少。小马驹在青春期前离开它们的父母群体,公马加入单一群体,成熟到足以交配。这种分离是为了防止父亲与自己的亲人交配,想的还真周到。
种群中最重要的就是领导者,其决定种群在自由放养的非领地中的移动速度和方向,一般由种群中最具优势的母马担任。
种群初始化
此阶段在算法开始时随机选择组的领导者,在后续阶段,根据组成员中的ftness(最佳ftness函数)选择领导者。



图1 种群初始化

图2更详细地展示了如何从原始种群中选择种马和小马驹组成不同的群体:



图2 由原始种群形成新种群的过程

放牧行为(我觉得叫干饭行为更体贴)
研究表明,野马的大部分时间都花费在干饭上。为了模拟这个过程,作者认为领导者是放牧区的中心,群中成员在以其为圆心进行中心搜索(干饭):


式中Stallion为领导者的位置,R 为[-2,2]内的随机数,主要控制个体与领导者间的角度;自适应机制Z 的计算方式为:


其中P 是由0和1组成的向量,R1、R3均为[0,1]范围内均匀分布的随机向量,R2为[0,1]内一随机值。满足条件(P==0)的随机向量R1返回的IDX索引。Θ这个符号即点乘。TDR为由1线性递减至0的系数:


交配行为
前文也提到过,成熟的野马不会和兄弟姐妹交配,因为它知道这是个很严重的伦理问题。
原文假设一只小马驹离开i 组并加入一个临时组,一只小马驹离开j 组并加入一个临时组。假设这两只小马驹是雄性和雌性,由于这两只小马驹没有家庭关系,因此它们可以在青春期后交配。之后它们的孩子必须离开临时组并加入另一个组,如k。观察图3我们可以更清晰的理解这个过程:



图3 野马的离群、交配、重组行为

该过程的数学模型为:


这里Xp_G_K表表示种群k 中个体p离群后再次进入种群k的个体位置,所以很明显,后面括号里的两个位置即为其父母的位置。可以看出,此阶段主要针对种群内适应度值最差的个体进行操作,目的即为提升种群多样性。
领导者的交流和选择
在自然界中,领导者主要带领种群前往合适的栖息地。原文设定若另一个种群对栖息地占主导地位,那么该种群必须离开此地。公式(5)即计算每个种群中领导者相对于栖息地的下一位置:


式中WH为栖息地的位置(也就是当前最优个体位置),R、Z 的定义与前文相同。图4展示了领导者相对于栖息地的位置更新过程:



图4 领导者相对于栖息地的位置更新

我们在种群初始化阶段提到过,如果其中一名组员的适应度值优于领导者,这则两者身份互换:


这里cost为适应度函数。至此,算法迭代伪代码为:


性能测试

本期我们将WHO算法与往期的学生心理优化算法(SPBO)、乌鸦搜索算法(CSA)在部分CEC2017测试函数上进行对比测试,取种群规模为30,维度为30,最大迭代次数为10000,计算结果如下:



图5 三个函数在function3上的对比测试



图6 三个函数在function5上的对比测试



图7 三个函数在function21上的对比测试



图8 三个函数在function25上的对比测试

可以看出三种算法的性能差异较为明显:SPBO>WHO>CSA。无论收敛速度还是收敛精度都符合这个趋势。
总结

总体来说,野马优化器考虑的较为全面,涉及了精英引导、分群探索、群间交流等方面。不过从测试图像中来看其跳出局部最优值的能力仍有待提高。我们回想一下郊狼优化算法,两者在交配部分也有几分相似:
当然,这并不是完全抄袭。对于交配操作的种种细节,每个算法的处理方式仍有一定区别,毕竟取其精华去其糟粕,才能推陈出新~

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
发表于 2022-4-15 19:23 | 显示全部楼层
帮忙验证一下如下测试函数谢谢啦30维,范围在[-10,10],f(x)=sum(sin(x^2+x[i+1]^2)cos(xx[i+1])
发表于 2022-4-15 19:24 | 显示全部楼层
求最大值最小值?
发表于 2022-4-15 19:27 | 显示全部楼层
最小值
发表于 2022-4-15 19:32 | 显示全部楼层
种群规模30,最大迭代次数500,求得-22.76
发表于 2022-4-15 19:34 | 显示全部楼层
谢谢
发表于 2022-4-15 19:39 | 显示全部楼层
你好,可以分享一下代码嘛~~~
发表于 2022-4-15 19:48 | 显示全部楼层
私聊
发表于 2022-4-15 19:49 | 显示全部楼层
你好请问有相应的python的代码吗
发表于 2022-4-15 19:52 | 显示全部楼层
py的目前没有
懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Unity开发者联盟 ( 粤ICP备20003399号 )

GMT+8, 2024-9-22 14:18 , Processed in 0.104389 second(s), 26 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表