当前位置: 首页 > news >正文

智能优化算法之灰狼优化算法(GWO)的实现(Python附源码)

文章目录

  • 一、灰狼优化算法的实现思路
    • 1、社会等级结构分级
    • 2、包围猎物
    • 3、攻击猎物
    • 4、搜索猎物
  • 二、算法步骤
  • 三、实例

一、灰狼优化算法的实现思路

灰狼优化算法(Grey Wolf Optimizer,简称GWO)是由Seyedali Mirjalili等人于2014年提出的一种群智能优化算法,这一算法主要由自然界中的灰狼群体的捕食行为启发而来,灰狼是一种群居动物,一般群体中由5到12个个体构成,与一般动物群体不同的是,这一群体中存在十分严格的社会主导阶层,且与金字塔结构十分相似,主要由四个层级构成。
首先最高的层级可以被称为α,它们主要对种群中的各种规则进行制定,如狩猎地点、休息地点等,整个种群都会听从它们的决定。然后第二个层级被称为β,这一层级的灰狼个体主要帮助α制定相关决策,同时将各种决策上出现的问题反馈给α狼,它在整个种群中的地位仅次于α狼,因此低等级的灰狼个体也必须听命于β狼。紧接着的一个阶级为δ,这一个层级扮演着执行者的角色并将α狼与β狼制定的规则与命令付诸行动,它们可以是哨兵、侦查者、猎人,甚至是种群中受伤狼群的看护者。最后一个层级为ω,这个层级的灰狼个体为最弱势的个体,它们一般为种群中年迈或残疾的个体,因此它们只能去服从前面每个层级的灰狼个体。
结合上述思想,可以将灰狼优化算法的原理归为四个基本行为,它们分别为社会等级结构分级、搜索猎物、包围猎物以及攻击猎物,下面将分别从这四个基本行为进行介绍。

1、社会等级结构分级

该算法为了符合灰狼群体的社会等级结构,将候选解决方案的优劣性作为评判的标准,另外由于解决方案的独特性,因此将前三个等级α、β以及δ的数量设定为一个,即将候选解决方案中表现最优的方案设为α,第二个与第三个最优解决方案分别设定为β与δ,其余的解决方案则均为ω。按照等级较低的灰狼个体跟随等级较高的灰狼个体规则,ω解决方案将不断学习α、β以及δ解决方案以获得更好的表现。

2、包围猎物

针对灰狼群体包围猎物的特性,使用下列公式对其行为进行描述:
在这里插入图片描述
在这里插入图片描述

其中t为当前迭代次数,A ⃗和C ⃗为系数向量,(X_p ) ⃗为灰狼个体的位置向量,X ⃗为灰狼个体的位置信息。
A ⃗和C ⃗将分别通过下面两个公式计算得出:
在这里插入图片描述
在这里插入图片描述

其中a ⃗将随着迭代的次数由2到0线性递减,r1与r2均为0到1之间的随机向量。

3、攻击猎物

通过包围行为,所有灰狼个体将猎物控制在一个包围圈内,之后ω狼将在α、β以及δ狼的引导下进行捕猎,由于目前猎物的位置是未知的,而代表最优解决方案的灰狼α、β以及δ的位置信息是已知的,因此ω狼将通过学习灰狼α、β以及δ的位置信息来进行移动以完成对猎物的捕食。下面几个公式代表了灰狼个体的捕食行为:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

由上述公式可以了解到,猎物的位置是随机的,灰狼个体将通过学习灰狼α、β以及δ的位置信息在猎物附近进行随机移动,以此来估计猎物的具体位置。

4、搜索猎物

在灰狼种群开始了对猎物的随机包围时,对猎物的搜索过程也在随之展开,由攻击猎物的原理过程可以了解到,A ⃗这一系数向量的大小将会直接影响到灰狼个体位置的移动,在整个迭代过程中,除了A ⃗的绝对值小于1外,还存在A ⃗的绝对值大于1的情况,在这种条件下,灰狼个体将向包围圈周围扩张,以此发现更多猎物可能存在的位置。即当|A|≥1时,候选解决方案倾向于偏离当前猎物,当|A|<1时,候选解决方案逐渐收敛于猎物的位置。
除系数向量A ⃗之外,还存在一个系数向量C ⃗,C ⃗通常是0到2之间的一个随机值,这一向量的角色类似于为猎物位置信息新添一个随机权重,在自然界中,灰狼种群对猎物的捕食通常不会是顺利的,有时会出现一定的障碍对整个搜索行为进行影响,使得灰狼种群无法直接快速得接近猎物,系数向量C ⃗则可以在为整个搜索过程增加一个随机性的同时使整个灰狼种群在优化过程中表现出更随机的行为,以此来探索更多区域并避免陷入局部最优。

二、算法步骤

使用灰狼优化算法对优化问题进行求解时的具体步骤可以归纳如下:

  1. 以种群个体的位置信息作为待优化问题的解,根据待优化问题的解的范围,随机初始化种群所有个体的位置信息;
  2. 初始化参数a ⃗,A ⃗和C ⃗;
  3. 根据待优化问题,计算每个种群个体的适应度值,并对其进行排序,适应度值越高,则个体的位置信息越接近最优解,将适应度值排在前三个个体分别设定为灰狼α、β以及δ,并保存当前最优的位置信息;
  4. 依次对种群中每个个体的位置信息进行更新;
  5. 针对每个个体更新后的位置信息,重新进行适应度值的计算,根据新的适应度值的大小更新灰狼α、β与δ的位置信息以及历史最优的位置信息,更新参数a ⃗,A ⃗和C ⃗;
  6. 根据迭代的次数重复步骤3到步骤5,当达到最大迭代次数时停止迭代过程,输出历史最优的位置信息,该位置信息即为算法优化后获得的最优解。

三、实例

待求解问题:
Rosenbrock’s,取值范围为[-10,10],取值范围内的理想最优解为0,将其搜索的空间维度设为20。
在这里插入图片描述

实现源码:

#库的导入
import numpy as np
import matplotlib.pyplot as plt
import heapq#待求解问题,求解问题为求最小值
def function(x):y1 = 0for i in range(len(x)-1):y2 = 100*((x[i+1] - x[i]**2)**2)+(x[i]-1)**2y1 = y1 + y2y = abs(0 - y1)return ym = 30   #种群数量
imax = 100   #迭代次数
dimen = 20   #解的搜索维度
rangelow = -10   #解的最小取值
rangehigh = 10   #解的最大取值
amax = 2   #系数向量初始值#pop用于存储种群个体的位置信息,pop_fitness用于存储个体对应的适应度值
pop = np.zeros((m,dimen))
pop_fitness = np.zeros(m)
#对种群个体进行初始化并计算对应适应度值
for j in range(m):pop[j] = np.random.uniform(low=rangelow, high=rangehigh,size=(1, dimen))pop_fitness[j] = function(pop[j])#allbestpop,allbestfit分别存储种群在历史迭代过程中最优个体解及对应适应度
allbestpop,allbestfit = pop[pop_fitness.argmin()].copy(),pop_fitness.min()#通过排序找出种群中适应度值最优的前三个个体,并获得它们的位置信息
pop_fitness1 = pop_fitness.flatten()
pop_fitness1 = pop_fitness1.tolist()
three = list(map(pop_fitness1.index, heapq.nsmallest(3, pop_fitness1)))
Xalpha = pop[three[0]]
Xbeta = pop[three[1]]
Xdelta = pop[three[2]]#his_bestfit存储每次迭代时种群历史适应度值最优的个体适应度
his_bestfit=np.zeros(imax)#开始训练
for i in range(imax):print("The iteration is:", i + 1)#对系数向量的计算参数a进行计算iratio = i / imaxa = amax * (1 - iratio)#对每个个体进行位置更新for j in range(m):#分别计算在适应度值最优的前三个个体的影响下,个体的位置移动量X1、X2、X3C1 = 2 * np.random.rand()Dalpha = np.abs(C1 * Xalpha - pop[j])A1 = 2 * a * np.random.rand() - aX1 = Xalpha - A1 * DalphaC2 = 2 * np.random.rand()Dbeta = np.abs(C2 * Xbeta - pop[j])A2 = 2 * a * np.random.rand() - aX2 = Xbeta - A2 * DbetaC3 = 2 * np.random.rand()Ddelta = np.abs(C3 * Xdelta - pop[j])A3 = 2 * a * np.random.rand() - aX3 = Xdelta - A3 * Ddelta#计算个体移动后的位置及适应度值pop[j] = (X1 + X2 + X3) / 3pop_fitness[j] = function(pop[j])#对种群历史最优位置信息与适应度值进行更新if pop_fitness.min() < allbestfit:allbestfit = pop_fitness.min()allbestpop = pop[pop_fitness.argmin()].copy()#通过排序找出种群中适应度值最优的前三个个体,并获得它们的位置信息pop_fitness1 = pop_fitness.flatten()pop_fitness1 = pop_fitness1.tolist()three = list(map(pop_fitness1.index, heapq.nsmallest(3, pop_fitness1)))Xalpha = pop[three[0]]Xbeta = pop[three[1]]Xdelta = pop[three[2]]#存储当前迭代下的种群历史最优适应度值并输出his_bestfit[i] = allbestfitprint("The best fitness is:", allbestfit)
print("After iteration, the best pop is:",allbestpop)
print("After iteration, the best fitness is:","%e"%allbestfit)#输出训练后种群个体适应度值的均值与标准差
mean = np.sum(pop_fitness)/m
std = np.std(pop_fitness)
print("After iteration, the mean fitness of the swarm is:","%e"%mean)
print("After iteration, the std fitness of the swarm is:","%e"%std)
#将结果进行绘图
fig=plt.figure(figsize=(12, 10), dpi=300)
plt.title('The change of best fitness',fontdict={'weight':'normal','size': 30})
x=range(1,101,1)
plt.plot(x,his_bestfit,color="red",label="GWO",linewidth=3.0, linestyle="-")
plt.tick_params(labelsize=25)
plt.xlim(0,101)
plt.yscale("log")
plt.xlabel("Epoch",fontdict={'weight':'normal','size': 30})
plt.ylabel("Fitness value",fontdict={'weight':'normal','size': 30})
plt.xticks(range(0,101,10))
plt.legend(loc="upper right",prop={'size':20})
plt.savefig("GWO.png")
plt.show()

图中横轴为迭代次数,纵轴为最优适应度值。
在这里插入图片描述
参考源码

相关文章:

智能优化算法之灰狼优化算法(GWO)的实现(Python附源码)

文章目录一、灰狼优化算法的实现思路1、社会等级结构分级2、包围猎物3、攻击猎物4、搜索猎物二、算法步骤三、实例一、灰狼优化算法的实现思路 灰狼优化算法&#xff08;Grey Wolf Optimizer&#xff0c;简称GWO&#xff09;是由Seyedali Mirjalili等人于2014年提出的一种群智…...

leetCode热题10-15 解题代码,思路

前言 计划做一系列算法题的文章&#xff0c;因为自己这块确实比较薄弱&#xff0c;但又很重要&#xff01;写这篇文章前&#xff0c;我已经刷了一本剑指offer&#xff0c;leetcode top150道&#xff0c;牛客某题库106道 这个样子吧&#xff0c;感觉题量算是入门了吧&#xff1…...

同步辐射GISAXS和GIWAXS的原理及应用领域

同步辐射GISAXS和GIWAXS是两种常用的同步辐射X射线衍射技术&#xff0c;它们在材料科学、化学、生物学、物理学等领域中广泛应用。本文将从原理、实验方法和应用三个方面&#xff0c;对同步辐射GISAXS和GIWAXS进行描述和比较。 一、原理 GISAXS和GIWAXS都是利用X射线与样品相互…...

OpManager 进行网络性能管理

计算机网络构成了任何组织的 IT 基础架构的支柱。由于企业严重依赖基于互联网的应用程序&#xff0c;由于网络相关问题&#xff0c;最终用户不受影响非常重要。因此&#xff0c;借助网络管理解决方案监控和提高网络性能对于保持企业始终正常运行至关重要。这将确保维护服务级别…...

面试被问到向上转型和向下转型时,怎么回答?

目录 前置小知识 1、向上转型 补充&#xff1a;向上转型的三种情况 2、向下转型 使用关键字&#xff1a;instanceof 3、转型带来了什么好处 前置小知识 java中的继承&#xff0c;我们简单回顾一下 通过java中的继承机制&#xff0c;可以实现一个类继承另一个类&#xff…...

加密月解密:概述,基础篇

加密月解密&#xff1a;概述&#xff0c;基础篇 2022找工作是学历、能力和运气的超强结合体&#xff0c;遇到寒冬&#xff0c;大厂不招人&#xff0c;可能很多算法学生都得去找开发&#xff0c;测开 测开的话&#xff0c;你就得学数据库&#xff0c;sql&#xff0c;oracle&…...

DC-DC升压模块隔离高压稳压电源直流变换器12v24v48v转600V1000V1100V1500V2000V3000V

特点● 效率高达 80%● 2*2英寸标准封装● 单双电压输出● 价格低● 大于600V高压,稳压输出● 工作温度: -40℃~85℃● 阻燃封装&#xff0c;满足UL94-V0 要求● 温度特性好● 可直接焊在PCB 上应用HRB W1~25W 系列模块电源是一种DC-DC升压变换器。该模块电源的输入电压分为&am…...

pandas数据分析(三)

书接pandas数据分析&#xff08;二&#xff09; 文章目录DataFrame数据处理与分析处理超市交易数据中的异常值处理超市交易数据中的缺失值处理超市交易数据中的重复值使用数据差分查看员工业绩波动情况使用透视表与交叉表查看业绩汇总数据使用重采样技术按时间段查看员工业绩Da…...

cpu performance profiling

精彩文章分享1. android performanceAndroid 性能分析工具介绍 (qq.com)手机Android存储性能优化架构分析 (qq.com)抖音 Android 性能优化系列&#xff1a;启动优化之理论和工具篇 (qq.com)那些年&#xff0c;我们一起经历过的 Android 系统性能优化 (qq.com)Android卡顿&#…...

vue2启动项目npm run dev报错 Error: Cannot find module ‘babel-preset-es2015‘ 修改以及问题原因

报错内容如下图&#xff1a; 说找不到模块 babel-preset-es2015。 在报错之前&#xff0c;我正在修改代码&#xff0c;使用 ElementUI 的按需引入方式&#xff0c;修改了 babel.config.js 。 注意&#xff1a;vue/cli 脚手架4版本已经使用了 babel7 &#xff0c;所以项目中…...

*9 set up 注意点

1、set up 执行的时机&#xff1a;beforeCreate 之前执行一次&#xff0c;this 是 undefined 2、set up 的参数&#xff1a; props&#xff1a;值为对象&#xff0c;组件外传递属性&#xff0c;内部声明并且接收属性 context&#xff1a;上下文对象&#xff0c;其内部包含三个…...

linux目录——文件管理

个人简介&#xff1a;云计算网络运维专业人员&#xff0c;了解运维知识&#xff0c;掌握TCP/IP协议&#xff0c;每天分享网络运维知识与技能。座右铭&#xff1a;海不辞水&#xff0c;故能成其大&#xff1b;山不辞石&#xff0c;故能成其高。个人主页&#xff1a;小李会科技的…...

使用new bing简易教程

申请new bing 首先先申请new bing然后等待通过&#xff0c;如下图 申请完&#xff0c;用edge浏览器&#xff0c;若有科学方法&#xff0c;就能在右上角的聊天进行向AI提问 使用插件来进行直接访问New Bing 在edge浏览器中安装一个插件&#xff0c;地址为&#xff1a;Mod…...

idea插件分享 显著提高开发效率

idea插件 Prettier 作用&#xff1a;支持代码格式化&#xff08;java、js等&#xff09; 另外支持js内方法跳转和js中ajax请求跳转到java代码里面 下载&#xff1a;Prettier SQL Params Setter 作用&#xff1a;将日志中mapper输出preparing和paramters处理成完整可直接执行…...

文心一言发布我怎么看?

文心一言发布会 有想看发布会视频的朋友,关注爱书不爱输的程序猿,私信找我拿 我只简短的回答两个问题: 1.文心一言能否为百度止颓&#xff1f; 首先,百度的颓势是由于多种因素导致的&#xff0c;包括市场竞争压力、业务发展战略的失误、管理体制的问题等。要想止颓&#xff0c;…...

100. 增减序列

给定一个长度为 n 的数列 a1,a2,…,an&#xff0c;每次可以选择一个区间 [l,r]&#xff0c;使下标在这个区间内的数都加一或者都减一。 求至少需要多少次操作才能使数列中的所有数都一样&#xff0c;并求出在保证最少次数的前提下&#xff0c;最终得到的数列可能有多少种。 输入…...

操作系统之进程的初步认识(1)

进程1. 进程的相关概念1.1 进程的定义1.2 进程的概念(1)1.3 进程的概念(2)2. 进程和程序的区别3. 进程管理:3.1 进程的结构体有哪些属性(1) Pid(操作系统里指进程识别号)(2) 内存指针(3) 文件描述符表4. 进程调度:(1) 并行(2) 并发5. 进程调度需要的属性(1) 进程状态(2) 进程优…...

【Java】你真的懂封装吗?一文读懂封装-----建议收藏

博主简介&#xff1a;努力学习的预备程序媛一枚~博主主页&#xff1a; 是瑶瑶子啦所属专栏: Java岛冒险记【从小白到大佬之路】 前言 write in the front: 如何理解封装&#xff1f; 试想&#xff1a;我们使用微波炉的时候&#xff0c;只用设置好时间&#xff0c;按下“开始”…...

使用MobaXterm ssh远程登录Ubuntu 20.04

使用MobaXterm 远程登录Ubuntu 20.04 首先需要到官网下载一个MobaXterm 准备一台Ubuntu20.04的虚拟机。使用ifconfig查看IP 我这里的虚拟机是新安装的&#xff0c;所以会提示命令不存在&#xff0c;只要按照提示输入&#xff1a; sudo apt install net-tools接着等待安装完成…...

蓝桥杯历年真题训练

2012年第四届全国电子专业人才设计与技能大赛“自动售水机”设计任务书1. 系统框图接下来我们将任务分块&#xff1a; 1. 按键控制单元 设定按键 S7 为出水控制按键&#xff0c;当 S7 按下后&#xff0c;售水机持续出水&#xff08;继电器接通&#xff0c;指示 灯 L10 点亮&…...

Spring事务报错: org.springframework.transaction.UnexpectedRollbackException

异常信息&#xff1a;支持当前事务&#xff0c;如果不存在则抛出异常。事务被回滚&#xff0c;因为它被标记为仅回滚 org.springframework.transaction.UnexpectedRollbackException: Transaction rolled back because it has been marked as rollback-onlyat org.springframe…...

Spring:IOC和AOP

Spring&#xff1a;IOC和AOP一. IOC(1) 引入(2) 定义(3) 作用(4) 实现(5) DI依赖注入二. AOP(1) 概念(2) Spring中的AOP(3) 入门案例0. 准备&#xff1a;1. 定义通知类和通知方法&#xff1b;2. 在通知类中描述和定义切入点 pointcut3. 用注释绑定切入点和通知方法4. 通知类&am…...

【笔记】效率之门——Python中的函数式编程技巧

文章目录Python函数式编程1. 数据2. 推导式3. 函数式编程3.1. Lambda函数3.2. python内置函数3.3. 高阶函数4. 函数式编程的应用Python函数式编程 我的AI Studio项目&#xff1a;【笔记】LearnDL第三课&#xff1a;Python高级编程——抽象与封装 - 飞桨AI Studio (baidu.com) p…...

Java【多线程基础2】 Thread类 及其常用方法

文章目录前言一、Thread类1, 构造方法2, 常用成员属性3, 常用成员方法3.1, start 启动线程3.2, interrupt 中断线程 (重点)3.2.1, 手动设置标记位3.2.2, 使用内置标记位3.3.3, interrupt 方法 的作用3.3 sleep 休眠线程3.4, jion 等待线程3.5 获取当前线程的引用总结前言 各位读…...

JVM调优实战及常量池详解

目录 阿里巴巴Arthas详解 Arthas使用场景 Arthas使用 GC日志详解 如何分析GC日志 CMS G1...

ChatGPT研究分析:GPT-4做了什么

前脚刚研究了一轮GPT3.5&#xff0c;OpenAI很快就升级了GPT-4&#xff0c;整体表现有进一步提升。追赶一下潮流&#xff0c;研究研究GPT-4干了啥。本文内容全部源于对OpenAI公开的技术报告的解读&#xff0c;通篇以PR效果为主&#xff0c;实际内容不多。主要强调的工作&#xf…...

我为什么要写博客,写博客的意义是什么??

曾经何时我也不知道&#xff0c;怎样才能变成我自己所羡慕的大佬&#xff01;&#xff01;在一次次的CSDN阅读的过程中&#xff0c;结实了许多志同道合的人&#xff01;&#xff01;包过凉哥&#xff0c;擦姐……大佬&#xff0c;但是&#xff0c;很遗憾&#xff0c;与这些人只…...

ssm框架之spring:浅聊AOP

AOP&#xff08;Aspect Oriented Programming&#xff09;&#xff0c;是一种设计思想。先看一下百度百科的解释&#xff1a; 在软件业&#xff0c;AOP为Aspect Oriented Programming的缩写&#xff0c;意为&#xff1a;面向切面编程&#xff0c;通过预编译方式和运行期间动态…...

k8s详解

一、k8s中的yaml文件 JSON格式&#xff1a;主要用于api接口之间信息的传递YAML格式&#xff1a;主要用于配置和管理&#xff0c;YAML是一种简洁的非标记性语言&#xff0c;内容格式人性化 YAML格式&#xff1a; 大小写敏感使用缩进代表层级关系&#xff0c;不支持TAB制表符缩…...

计算机操作系统(第四版)第一章操作系统引论 1.1操作系统的目标和作用

第一章操作系统引论 1.1操作系统的目标和作用 什么是操作系统OS&#xff1f; 配置在计算机硬件上的第一层软件是对硬件的首次扩充。 是最重要的系统软件&#xff0c;其他系统软件应用软件都依赖于操作系统的支持。 操作系统主要作用&#xff1f; 管理计算机系统所有硬件设…...

初二怎么做网站/网络广告的特点

【单选题】表达式2*3**2//8%7的计算结果是( ) 【单选题】以下选项中,不属于Python保留字的是( ) 【单选题】dict是一个字典变量,能够输出数字5的选项是( ) dict{"food":{"cake":1,"egg":5},"cake":2,"egg":3} 【判断题】用摆…...

wordpress自动生成页面插件/引流推广方法

简介在CentOS 7、CentOS 8 中都是使用systemd管理服务了。对于我们自己编译安装的nginx服务&#xff0c;默认是没有systemd的服务管理文件&#xff0c;可以手动创建一个就可以了。 创建service文件vim /usr/lib/systemd/system/nginx.service[Unit]DescriptionThe Nginx HTTP S…...

在哪里找做网站的/网站建设情况

浙江省赛补 IMagic Points 比赛时&#xff0c;我还在一直纠结&#xff0c;5 3这条线为啥不行&#xff0c;结果下来才知道题目不能有重复点没有说&#xff0c;然后fdf说应该是2 7或者 2 5那条线&#xff0c;我也只能通过画图连猜想了。。。 #include <cstdio> #include &l…...

wordpress 主题大全/百度seo优化

随着自媒体越来越火爆&#xff0c;入驻自媒体平台得以用户越来越多&#xff0c;几乎每一个人手里都有一个自媒体账号。相信不管是做短视频还是写文章&#xff0c;都是想从自媒体平台获取一份收益。 但是&#xff0c;很多小伙伴做的还不错&#xff0c;月收入几万、十几万&#…...

怎么在ppt上做网站/深圳网站优化哪家好

为什么80%的码农都做不了架构师&#xff1f;>>> 本地安装了一个WebLogic&#xff0c;只能在局域网内访问&#xff0c;怎样从外网也能访问到本地的WebLogic呢&#xff1f;本文将介绍具体的实现步骤。 1. 准备工作 1.1 安装Java 1.7及以上版本 执行命令java -version…...

湖北可以做网站方案的公司/最新新闻消息

2019独角兽企业重金招聘Python工程师标准>>> 由于网络原因&#xff0c;我们在pull Image 的时候&#xff0c;从Docker Hub上下载会很慢。。。所以&#xff0c;国内的Docker爱好者们就添加了一一些国内的镜像&#xff08;mirror&#xff09;,方便大家使用。 登录阿里…...