【优化算法】简述灰狼优化算法(GWO)原理[通俗易懂]

【优化算法】简述灰狼优化算法(GWO)原理[通俗易懂]系列优化算法简述:OP_1.简述遗传算法(GA)原理OP_2简述灰狼优化算法(GWO)原理前言:灰狼优化算法(GreyWolfOptimizer,GWO)由澳大利亚格里菲斯大学学者Mirjalili等人于2014年提出来的一种群智能优化算法。该算法受到了灰狼捕食猎物活动的启发而开发的一种优化搜索方法,它具有较强的收敛性能、参数少、易实现等特点。近年来受到了学者的广泛关注…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用


前言:

灰狼优化算法(Grey Wolf Optimizer,GWO)由澳大利亚格里菲斯大学学者 Mirjalili 等人于2014年提出来的一种群智能优化算法。该算法受到了灰狼捕食猎物活动的启发而开发的一种优化搜索方法,它具有较强的收敛性能、参数少、易实现等特点。近年来受到了学者的广泛关注,它己被成功地应用到了车间调度、参数优化、图像分类等领域中。


算法原理:

灰狼隶属于群居生活的犬科动物,且处于食物链的顶层。灰狼严格遵守着一个社会支配等级关系。如图:

【优化算法】简述灰狼优化算法(GWO)原理[通俗易懂]

社会等级第一层:狼群中的头狼记为 \alpha\alpha 狼主要负责对捕食、栖息、作息时间等活动作出决策。由于其它的狼需要服从\alpha 狼的命令,所以 \alpha 狼也被称为支配狼。另外, \alpha 狼不一定是狼群中最强的狼,但就管理能力方面来说, \alpha 狼一定是最好的。

社会等级第二层\beta 狼,它服从于 \alpha 狼,并协助 \alpha 狼作出决策。在 \alpha 狼去世或衰老后,\beta 狼将成为 \alpha 狼的最候选者。虽然 \beta 狼服从 \alpha 狼,但 \beta 狼可支配其它社会层级上的狼。

社会等级第三层\delta 狼,它服从 \alpha 、\beta 狼,同时支配剩余层级的狼。\delta 狼一般由幼狼、哨兵狼、狩猎狼、老年狼及护理狼组成。

社会等级第四层\omega 狼,它通常需要服从其它社会层次上的狼。虽然看上去 \omega 狼在狼群中的作用不大,但是如果没有 \omega 狼的存在,狼群会出现内部问题如自相残杀。

GWO 优化过程包含了灰狼的社会等级分层跟踪包围攻击猎物等步骤,其步骤具体情况如下所示。

1)社会等级分层(Social Hierarchy)当设计 GWO 时,首先需构建灰狼社会等级层次模型。计算种群每个个体的适应度,将狼群中适应度最好的三匹灰狼依次标记为 \alpha\beta 、\delta ,而剩下的灰狼标记为 \omega。也就是说,灰狼群体中的社会等级从高往低排列依次为; \alpha\beta 、\delta  及 \omega。GWO 的优化过程主要由每代种群中的最好三个解(即  \alpha\beta 、\delta )来指导完成。

2)包围猎物( Encircling Prey )灰狼捜索猎物时会逐渐地接近猎物并包围它,该行为的数学模型如下:

【优化算法】简述灰狼优化算法(GWO)原理[通俗易懂]

式中:t 为当前迭代次数:。表示 hadamard 乘积操作;A 和 C 是协同系数向量;Xp 表示猎物的位置向量; X(t) 表示当前灰狼的位置向量;在整个迭代过程中 a 由2 线性降到 0; r1 和 r2 是 [0,1] 中的随机向量。

3)狩猎( Hunring)

灰狼具有识别潜在猎物(最优解)位置的能力,搜索过程主要靠 \alpha\beta 、\delta 灰狼的指引来完成。但是很多问题的解空间特征是未知的,灰狼是无法确定猎物(最优解)的精确位置。为了模拟灰狼(候选解)的搜索行为,假设 \alpha\beta 、\delta 具有较强识别潜在猎物位置的能力。因此,在每次迭代过程中,保留当前种群中的最好三只灰狼( \alpha\beta 、\delta ),然后根据它们的位置信息来更新其它搜索代理(包括 \omega)的位置。该行为的数学模型可表示如下:

【优化算法】简述灰狼优化算法(GWO)原理[通俗易懂]

式中:X_{_{\alpha }}X_{_{\beta }}X_{_{\delta }} 分别表示当前种群中 \alpha\beta 、\delta 的位置向量;X表示灰狼的位置向量;D_{_{\alpha }}D_{_{\beta }}D_{_{\delta }}  分别表示当前候选灰狼与最优三条狼之间的距离;当|A|>1时,灰狼之间尽量分散在各区域并搜寻猎物。当|A|<1时,灰狼将集中捜索某个或某些区域的猎物。

【优化算法】简述灰狼优化算法(GWO)原理[通俗易懂]

从图中可看出,候选解的位置最终落在被 \alpha\beta 、\delta 定义的随机圆位置内。总的来说, \alpha\beta 、\delta 需首先预测出猎物(潜
在最优解)的大致位置,然后其它候选狼在当前最优兰只狼的指引下在猎物附近随机地更新它们的位置。

4)攻击猎物(Attacking Prey)构建攻击猎物模型的过程中,根据2)中的公式,a值的减少会引起 A 的值也随之波动。换句话说,A 是一个在区间[-a,a](备注:原作者的第一篇论文里这里是[-2a,2a],后面论文里纠正为[-a,a])上的随机向量,其中a在迭代过程中呈线性下降。当 A 在[-1,1]区间上时,则捜索代理(Search Agent)的下一时刻位置可以在当前灰狼与猎物之间的任何位置上。

5)寻找猎物(Search for Prey)灰狼主要依赖 \alpha\beta 、\delta 的信息来寻找猎物。它们开始分散地去搜索猎物位置信息,然后集中起来攻击猎物。对于分散模型的建立,通过|A|>1使其捜索代理远离猎物,这种搜索方式使 GWO 能进行全局搜索。GWO 算法中的另一个搜索系数是C。从2)中的公式可知,C向量是在区间范围[0,2]上的随机值构成的向量,此系数为猎物提供了随机权重,以便増加(|C|>1)或减少(|C|<1)。这有助于 GWO 在优化过程中展示出随机搜索行为,以避免算法陷入局部最优。值得注意的是,C并不是线性下降的,C在迭代过程中是随机值,该系数有利于算法跳出局部,特别是算法在迭代的后期显得尤为重要。


参考文献:

加工时间可控的多目标车间调度问题研究

Grey Wolf Optimizer
 

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/180105.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • scratch编程一款节奏小游戏「建议收藏」

    scratch编程一款节奏小游戏「建议收藏」今天小恐龙来教大家做一款好玩的小游戏:这个游戏本恐龙没有加音乐,因为箭头落下的速度会根据我们的命中率来改变,按中的越多速度就越快,漏的越多速度就越慢,有上下限!首先画出轨道,粗细随意:轨道直接设置成移到(0,0)就可以了,没有别的程序然后是箭头:变量分值和速度是隐藏起来的,我们在玩的时候是看不到的,速度下限是5,上限是10,不然太快了反应不过来!箭头克隆体程序:最后是判定线的程序:如果是觉得没有音乐太单调的话,可以通过创建一个链表来储存音符。再新建一个变量,每按中一个箭头就将

    2022年6月16日
    54
  • Ubuntu之Dokcer和Docker Compose学习笔记

    Ubuntu之Dokcer和Docker Compose学习笔记

    2021年7月11日
    79
  • python贪吃蛇游戏代码详解外加中文_Python贪吃蛇代码

    python贪吃蛇游戏代码详解外加中文_Python贪吃蛇代码感觉游戏审核新政实施后,国内手游市场略冷清,是不是各家的新游戏都在排队等审核。媒体们除了之前竞相追捧《PokemonGo》热闹了一把,似乎也听不到什么声音了。直到最近几天,突然听见好几人都提到同一个游戏,网上还有人表示朋友圈被它刷屏了。(不过现在微信已经悍然屏蔽了它的分享)这个游戏就是现在iOS免费榜排名第一的《贪吃蛇大作战》。一个简单到不行的游戏,也不知道怎么就火了。反正一款游戏火了,各路媒体…

    2022年8月10日
    21
  • tomcat java_tomcat和maven的区别

    tomcat java_tomcat和maven的区别缓存什么是缓存[Cache]存在内存中的临时数据将用户经常查询的数据放在缓存(内存)中,用户去查询数据的时候就不用从磁盘上(关系型数据库数据文件)查询,从缓存中查询,从而提高查询效率,解决了高并发系统的性能问题。为什么使用缓存减少和数据库的数据交换次数,较少系统开销,提高系统效率什么样的数据库能使用缓存经常查询并且不经常改变的数据Mybatis缓存MyBatis 内置了一个强大的事务性查询缓存机制,它可以非常方便地配置和定制。默认情况下,只启用了本地的会话缓存,它仅

    2022年8月8日
    4
  • Redis 持久化是如何做的? RDB和AOF对比分析

    Redis 持久化是如何做的? RDB和AOF对比分析

    2022年2月19日
    31
  • JavaScript两种数组去重方法[通俗易懂]

    JavaScript两种数组去重方法[通俗易懂]JavaScript两种数组去重方法第一种(利用splice方法去重)splice()方法用于插入、删除或替换数组的元素。//申明一个数组vararr=[1,3,5,4,3,1,5,7,8,4,7];functiontemp(arr){for(i=0;i<arr.length;i++){for(j…

    2022年6月24日
    25

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号