灰狼优化算法的理解和应用

  • 一、背景介绍
  • 二、算法原理
  • 三、构建算法数学模型
  • 四、Python实现GWO
  • 五、算法分析

一、背景介绍

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

二、算法原理

狼群中有α、β、γ三只狼做头狼,其中α是狼王,β、γ分别排第二、第三,β、γ都要听α的,γ要听β的。这三匹狼指导者其他的狼寻找猎物。狼群寻找猎物的过程就是我们寻找最优解的过程。
GWO具体优化过程包含了社会等级分层、跟踪、包围和攻击猎物和寻找猎物。
但其核心行为只有捕猎。
为了模拟灰狼的搜索行为,假设α、β、γ具有较强识别潜在猎物的能力,因此,在每次迭代过程中,保留当前种群中最好的三只狼(α、β、γ),然后根据他们的位置信息来更新其他搜索代理的位置。

三、构建算法数学模型

1)社会等级分层
GWO的优化过程主要有每代种群中的最好三匹狼(具体构建时表示为三个最好的解)来指导完成。
2)包围猎物
灰狼捜索猎物时会逐渐地接近猎物并包围它,该行为的数学模型如下:


3)狩猎行为的数学模型



4)攻击猎物
5)寻找猎物

更多关于灰狼算法原理的详细内容

四、Python实现GWO

import random
import numpydef GWO(objf, lb, ub, dim, SearchAgents_no, Max_iter):# 初始化 alpha, beta, and delta_posAlpha_pos = numpy.zeros(dim)  # 位置.形成30的列表Alpha_score = float("inf")  # 这个是表示“正负无穷”,所有数都比 +inf 小;正无穷:float("inf"); 负无穷:float("-inf")Beta_pos = numpy.zeros(dim)Beta_score = float("inf")Delta_pos = numpy.zeros(dim)Delta_score = float("inf")  # float() 函数用于将整数和字符串转换成浮点数。# list列表类型if not isinstance(lb, list):  # 作用:来判断一个对象是否是一个已知的类型。 其第一个参数(object)为对象,第二个参数(type)为类型名,若对象的类型与参数二的类型相同则返回Truelb = [lb] * dim  # 生成[100,100,.....100]30个if not isinstance(ub, list):ub = [ub] * dim# Initialize the positions of search agents初始化所有狼的位置Positions = numpy.zeros((SearchAgents_no, dim))for i in range(dim):  # 形成5*30个数[-100,100)以内Positions[:, i] = numpy.random.uniform(0, 1, SearchAgents_no) * (ub[i] - lb[i]) + lb[i]  # 形成[5个0-1的数]*100-(-100)-100Convergence_curve = numpy.zeros(Max_iter)#迭代寻优for l in range(0, Max_iter):  # 迭代1000for i in range(0, SearchAgents_no):  # 5# 返回超出搜索空间边界的搜索代理for j in range(dim):  # 30Positions[i, j] = numpy.clip(Positions[i, j], lb[j], ub[j])  # clip这个函数将将数组中的元素限制在a_min(-100), a_max(100)之间,大于a_max的就使得它等于 a_max,小于a_min,的就使得它等于a_min。# 计算每个搜索代理的目标函数fitness = objf(Positions[i, :])  # 把某行数据带入函数计算# print("经过计算得到:",fitness)# Update Alpha, Beta, and Deltaif fitness < Alpha_score:Alpha_score = fitness  # Update alphaAlpha_pos = Positions[i, :].copy()if (fitness > Alpha_score and fitness < Beta_score):Beta_score = fitness  # Update betaBeta_pos = Positions[i, :].copy()if (fitness > Alpha_score and fitness > Beta_score and fitness < Delta_score):Delta_score = fitness  # Update deltaDelta_pos = Positions[i, :].copy()# 以上的循环里,Alpha、Beta、Deltaa = 2 - l * ((2) / Max_iter);  #   a从2线性减少到0for i in range(0, SearchAgents_no):for j in range(0, dim):r1 = random.random()  # r1 is a random number in [0,1]主要生成一个0-1的随机浮点数。r2 = random.random()  # r2 is a random number in [0,1]A1 = 2 * a * r1 - a;  # Equation (3.3)C1 = 2 * r2;  # Equation (3.4)# D_alpha表示候选狼与Alpha狼的距离D_alpha = abs(C1 * Alpha_pos[j] - Positions[i, j]);  # abs() 函数返回数字的绝对值。Alpha_pos[j]表示Alpha位置,Positions[i,j])候选灰狼所在位置X1 = Alpha_pos[j] - A1 * D_alpha;  # X1表示根据alpha得出的下一代灰狼位置向量r1 = random.random()r2 = random.random()A2 = 2 * a * r1 - a;  #C2 = 2 * r2;D_beta = abs(C2 * Beta_pos[j] - Positions[i, j]);X2 = Beta_pos[j] - A2 * D_beta;r1 = random.random()r2 = random.random()A3 = 2 * a * r1 - a;C3 = 2 * r2;D_delta = abs(C3 * Delta_pos[j] - Positions[i, j]);X3 = Delta_pos[j] - A3 * D_delta;Positions[i, j] = (X1 + X2 + X3) / 3  # 候选狼的位置更新为根据Alpha、Beta、Delta得出的下一代灰狼地址。Convergence_curve[l] = Alpha_score;if (l % 1 == 0):print(['迭代次数为' + str(l) + ' 的迭代结果' + str(Alpha_score)]);  # 每一次的迭代结果#函数
def F1(x):s=numpy.sum(x**2);return s#主程序
func_details = ['F1', -100, 100, 30]
function_name = func_details[0]
Max_iter = 1000#迭代次数
lb = -100#下界
ub = 100#上届
dim = 30#狼的寻值范围
SearchAgents_no = 5#寻值的狼的数量
x = GWO(F1, lb, ub, dim, SearchAgents_no, Max_iter)

运行结果截图:

五、算法分析

灰狼优化算法的位置更新方程存在开发能力强而探索能力弱的缺点.
灰狼算法的全局搜索能力强、精度稍差。

参考链接:
https://blog.csdn.net/haha0332/article/details/88805910
https://www.it610.com/article/1288128297732976640.htm
推荐阅读:
https://www.jianshu.com/p/97206c3fc51f

优化算法笔记|灰狼算法理解及Python实现相关推荐

  1. 【优化求解】基于布谷鸟算法结合灰狼算法求解最优目标matlab代码

    1 简介 布谷鸟搜索(Cuckoo Search, CS)算法是 2009 年 Xin-She Yang 与 Susash Deb 提出的一种新型的启发算法[61].算法灵感来源于一些布谷鸟种属(Cu ...

  2. 【算法】灰狼算法GWO优化支持向量机回归SVR模型

    灰狼算法GWO介绍 GWO是一种基于灰狼行为的优化算法,由Mirjalili等人于2014年提出.该算法模拟灰狼群的捕猎行为,通过模拟狼群中的Alpha.Beta.Delta三种角色的行为来实现全局优 ...

  3. SMO算法笔记及个人理解

    SMO算法介绍 SMO算法是一种启发式算法,其基本思路是:如果所有变量的解都满足此优化问题的KKT条件,那么这个最优化问题的解就得到了.(KKT条件是该最优化问题的充分必要条件).否则,选择两个变量, ...

  4. 【路径规划】基于和声算法改进灰狼算法实现机器人栅格地图路径规划

    一.和声搜索算法介绍 和声搜索(Harmony Search, HS)算法是一种新颖的智能优化算法.类似于遗传算法对生物进化的模仿.模拟退火算法对物理退火的模拟以及粒子群优化算法对鸟群的模仿等,和声算 ...

  5. 【CS三维路径规划】基于matlab布谷鸟灰狼算法、灰狼算法求解复杂地形下三维无人机路径规划问题【含Matlab源码 2216期】

    ⛄一.无人机三维路径规划简介 1 无人机航迹规划问题的数学模型 建立三维航迹规划问题的数学模型时, 不但考虑无人机基本约束, 还考虑复杂的飞行环境, 包括山体地形和雷暴威胁区. 1.1 无人机基本约束 ...

  6. 算法笔记_070-BellmanFord算法简单介绍(Java)

    目录 1 问题描述 2 解决方案 2.1 具体编码   1 问题描述 何为BellmanFord算法? BellmanFord算法功能:给定一个加权连通图,选取一个顶点,称为起点,求取起点到其它所有顶 ...

  7. 优化算法笔记|萤火虫算法理解及实现

    萤火虫算法 一.萤火虫算法背景知识 二.萤火虫算法 三.萤火虫算法实现 四.算法分析 一.萤火虫算法背景知识 萤火虫算法(Firefly Algorithm, FA)是基于萤火虫的闪光行为,它是一种用 ...

  8. 【路径规划】基于和声算法改进灰狼算法实现机器人栅格地图路径规划matlab源码

    1 简介 1.1 和声搜索算法介绍 和声搜索(Harmony Search, HS)算法是一种新颖的智能优化算法.类似于遗传算法对生物进化的模仿.模拟退火算法对物理退火的模拟以及粒子群优化算法对鸟群的 ...

  9. 回溯 皇后 算法笔记_算法笔记_04_回溯

    设计思想: (1)适用:求解搜索问题和优化问题. (2)搜索空间:数,节点对应部分解向量,可行解在树叶上. (3)搜索过程:采用系统的方法隐含遍历搜索树. (4)搜索策略:深度优先,宽度优先,函数优先 ...

最新文章

  1. C++实现的简单vector
  2. 使用SDL打造游戏世界之入门篇 - 6
  3. 【SDL】 如何在RedHat6.5中搭建SDL开发环境
  4. 使用 dotnet core 和 Azure PaaS服务进行devOps开发(Web API 实例)
  5. WCF技术剖析之二十七: 如何将一个服务发布成WSDL[基于HTTP-GET的实现](提供模拟程序)...
  6. 深入理解 PHP7 中全新的 zval 容器和引用计数机制
  7. 左右xcode的重构选项的一些理解
  8. 如何判断链表有环并计算环的长度
  9. docker公共存储库_Docker Hub镜像公共仓库使用
  10. java 8-6 抽象的练习
  11. java中如何表示圆周率
  12. 用Python回忆QQ空间里的青春
  13. XSS学习之xss20
  14. mysql insert 写法_mysql中insert into语句的6种写法(上)
  15. 阿里云消息服务(MNS)简单介绍
  16. 基于Barra多因子模型的组合权重优化
  17. 【TA-霜狼_may-《百人计划》】图形3.4 延迟渲染管线介绍
  18. java使用itextpdf生成PDF批量打印荣誉证书(指定位置输出文字)
  19. 5G NR 基础原理与关键技术
  20. matlab画线的形状颜色

热门文章

  1. 微软亚洲研究院资深专家、IEEE Fellow帮助您深入细致地学习网络传播模型和算法啦!...
  2. 作者:季统凯(1972-),男,博士,中国科学院云计算产业技术创新与育成中心研究员...
  3. 2015中国大数据技术大会在北京隆重开幕
  4. 笨小猴(洛谷P1125题题解,Java语言描述)
  5. 【XML】XML语法格式提要
  6. 你应该知道的 iTerm2 使用方法--MAC终端工具
  7. PostgreSQL 快速给指定表每个字段创建索引 - 2
  8. vue 使用axios
  9. 亚马逊将推出卡车版Uber,或迎来一场货运的改革
  10. 【转】贝塞尔曲线介绍