灰狼优化算法GWO的理论知识以及python代码实现

  • GWO 算法的等级结构
  • GWO 算法的数学模型
  • 灰狼算法的python实现
    • 寻优结果
  • 下载链接

GWO 算法的等级结构

灰狼优化算法是模拟食物链顶端的捕食者狼群的捕食行为产生的算法。灰狼大都喜欢群居, 且具有非常严格的社会等级制度,如图 1 金字塔结 构的等级制度所示。

GWO 算法的数学模型

​ 在 GWO 算法数学建模中,每只灰狼代表种群 中 1 个候选解,将最优解视为 ααα,第二、第三个最佳 候选解视分别为 βββ 和 δδδ,其余的候选解视为 ωωω。在 GWO 算法中,搜索( 优化) 由 ααα、βββ 和 δδδ 引导,ωωω 狼跟随这三只狼。

​ 假设灰狼的种群数量为 NNN,搜索空间为 DimDimDim 维 空间,第 iii 只灰狼在第 DimDimDim 维空间中的位置向量可 以表 示 XiDim{X_i}^{Dim}Xi​Dim 灰 狼围捕猎物的数学模型描述如 式( 4) 、式( 5) 所示:
D=∣CXp(t)−C(t)∣(4)X(t+1)=Xp(t)−AD(5)D=|CX_p(t)-C(t)|\qquad\qquad(4)\\ X(t+1)=X_p(t)-AD\qquad\qquad(5) D=∣CXp​(t)−C(t)∣(4)X(t+1)=Xp​(t)−AD(5)

式(5) 中: ttt 表示当前迭代次数; AAA 和 CCC 为系数向量; XpX_pXp​ 为猎物的位置向量; DDD 为灰狼个体与猎物之间的位置 关系向量; XXX 为灰狼的位置向量。A、CA、CA、C 计算公式为
A=2ar1−a(6)C=2r2(7)A=2ar_1-a\qquad\qquad(6)\\ C=2r_2\qquad\qquad(7) A=2ar1​−a(6)C=2r2​(7)
式中: r1r_1r1​ 和 r2r_2r2​ 的模是[0,1][0,1][0,1]的随机数; aaa 为收敛因 子,其数值随着迭代次数的增加从 2 线性减小到 0, 计算公式为
a=2−2ttmax(8)a=2-\frac{2t}{t_{max}}\qquad\qquad(8) a=2−tmax​2t​(8)
式( 8) 中: ttt 为当前迭代次数; tmaxt_{max}tmax​为最大迭代次数。 灰狼追踪猎物位置的数学模型描述如式( 9) ~ 式( 11) 所示:
Dα=∣C1Xα−X∣Dβ=∣C2Xβ−X∣(9)Dδ=∣C3Xδ−X∣D_{\alpha}=|C_1X_\alpha-X|\qquad\qquad\\ D_{\beta}=|C_2X_\beta-X|\qquad\qquad(9)\\ D_{\delta}=|C_3X_\delta-X|\qquad\qquad Dα​=∣C1​Xα​−X∣Dβ​=∣C2​Xβ​−X∣(9)Dδ​=∣C3​Xδ​−X∣
式中: C1、C2、C3C_1、C_2、C_3C1​、C2​、C3​ 为随机向量; Dα、DβD_α、D_βDα​、Dβ​ 和 DδD_δDδ​ 分别为 ααα 狼、βββ 狼和 δδδ 狼与狼群其他成员之间的距离; XαX_αXα​、XβX_βXβ​、XδX_δXδ​ 分别为 ααα 狼、βββ 狼和 δδδ 狼的位置; XXX 为当前狼的位置。 狼群中 ωωω 狼的位置由 ααα 狼、βββ 狼和 δδδ 狼共同决定。

灰狼算法的python实现

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)

寻优结果

下载链接

完整带图形输出的下载链接(点击可下载)

灰狼优化算法GWO的理论知识以及python代码实现相关推荐

  1. 北极熊优化算法PBO的理论知识以及python代码实现

    北极熊优化算法PBO的理论知识以及python代码实现 北极熊优化算法 1.条件假设 2.浮冰漂移 (全局搜索)策略 3.海豹捕捉 (局部搜索)策略 算法步骤 Python代码实现 参数设定 寻优函数 ...

  2. 灰狼优化算法GWO求解置换流水车间调度问题FSP

    灰狼优化算法GWO求解置换流水车间调度问题 置换流水车间调度问题(PFSP)是一类最基本.最经典的流水车间调度问题,本文主要讨论使用灰狼优化算法(GWO)求解单目标PFSP. 置换流水车间调度问题模型 ...

  3. 灰狼优化算法GWO优化SVM支持向量机惩罚参数c和核函数参数g,有例子

    灰狼优化算法GWO优化SVM支持向量机惩罚参数c和核函数参数g,有例子,易上手,简单粗暴,替换数据即可,分类问题. 仅适应于windows系统,质量保证,完美运行. 本人在读博士研究生,已发表多篇sc ...

  4. 【Matlab】智能优化算法_灰狼优化算法GWO

    [Matlab]智能优化算法_灰狼优化算法GWO 1.背景介绍 2.基本思想 2.1 等级制度 2.2 狩猎方式 3.公式推导 3.1 社会等级制度 3.2 包围猎物 3.3 包围猎物 3.4 攻击猎 ...

  5. MATLAB灰狼优化算法求解超市物流配送中心选址问题代码实例

    MATLAB灰狼算法求解超市物流配送选址问题实例 作者:麦哥 MATLAB灰狼优化算法求解超市物流配送中心选址问题代码实例 灰狼算法编程问题实例: 在范围为(0,0)到(100,100)的矩形区域内, ...

  6. LightGBM——提升机器算法(图解+理论+安装方法+python代码)

    原文地址:https://blog.csdn.net/huacha__/article/details/81057150 前言 LightGBM是个快速的,分布式的,高性能的基于决策树算法的梯度提升框 ...

  7. python 分类 投票_LightGBM——提升机器算法(图解+理论+安装方法+python代码)

    前言 LightGBM是个快速的,分布式的,高性能的基于决策树算法的梯度提升框架.可用于排序,分类,回归以及很多其他的机器学习任务中. 在竞赛题中,我们知道XGBoost算法非常热门,它是一种优秀的拉 ...

  8. 基于蜻蜓优化算法的配电网重构求解(Python代码实现)【IEEE123节点算例】

  9. 【VMD-DBO-LSTM】变分模态分解-蜣螂优化算法-长短时记忆神经网络研究(Python代码实现)

最新文章

  1. ubuntu14.04系统扩容的方法
  2. 统计之都统计分析和R语言方面的图书
  3. QQ偷偷删除图片被EMUI系统拦截?华为、腾讯双方回应...
  4. 盈利模型的内容都有哪些?
  5. Cocos2d-x 3.0 开发(七)在程序中处理cocoStudio导出动画
  6. opera Reservation More Fields(接送机)
  7. sqlserver200864位下载_microsoft sql server 2008官方下载|Microsoft SQL Server 200832/64位 完整版_ - 极光下载站...
  8. 手机刷入其它系统跳过谷歌开机引导,谷歌安全验证
  9. Docker文档资料
  10. 《Spring Boot极简教程》附录2 编程的本质
  11. Eureka自我保护模式——难点重点
  12. 企业微信第三方应用开发--回调配置
  13. JavaScript实现猜数字游戏(猜一位和四位数字)
  14. 360权重是什么,360权重怎么查询
  15. 【原创】群晖 Synology DS920+ 开箱及安装过程
  16. md5加密以及可逆的加密解密算法
  17. Java毕业设计_基于BootStrap的晴雅花艺交流论坛的开发
  18. java list clear 垃圾回收_Java垃圾回收
  19. 如何计算图像中弱小目标面积 matlab,凝视观测图像空间弱小目标检测方法
  20. 王者荣誉语音服务器,王者荣耀12.10体验服调整 游戏实时语音优化

热门文章

  1. 一个k8s pod报错端口被占用的问题
  2. 如何正确泡茶来获取低咖啡因?
  3. 江城子/密州出猎——苏轼
  4. ❤️垃圾大学,想自学 Java 可以吗?难吗?毕业后能找到一份 6k左右的工作吗?
  5. 【PS】添加选取自动校正颜色
  6. 老鼠逃出迷宫(递归)
  7. 大学计算机机要学什么知识,高考填志愿:如果想学习人工智能,大学应该学什么专业?...
  8. 袋鼠云研发手记 | 数栈DTinsight:详解FlinkX中的断点续传和实时采集
  9. ui自动化里面通过.text获取文本值进行断言【杭州多测师】【杭州多测师_王sir】...
  10. Paas概念和docker的关系