灰狼算法Grey Wolf Optimizer跑23个经典测试函数|含源码

智能优化算法(Grey Wolf Optimizer)


文章目录

  • 智能优化算法(Grey Wolf Optimizer)
  • 前言
  • 一、灵感
  • 二、GWO数学模型
    • 1、包围猎物
    • 2、狩猎
    • 3、攻击猎物
    • 4、开发
    • 5、代码实现
  • 总结


前言

灰狼算法简介:
灰狼优化算法(Grey Wolf Optimization,GWO)是一种基于自然界灰狼行为的启发式优化算法。该算法模仿了灰狼群体中不同等级的灰狼间的优势竞争和合作行为,通过不断搜索最优解来解决复杂的优化问题。

  1. 优点:较强的收敛性能,结构简单、需要调节的参数少,容易实现,存在能够自适应调整的收敛因子以及信息反馈机制,能够在局部寻优与全局搜索之间实现平衡,因此在对问题的求解精度和收敛速度方面都有良好的性能。

  2. 缺点:存在着易早熟收敛,面对复杂问题时收敛精度不高,收敛速度不够快


灰狼算法实现

一、灵感

灰狼属于犬科动物,被认为是顶级的捕食者,它们处于生物圈食物链的顶端。灰狼大多喜欢群居,每个群体中平均有5~12只狼。特别令人感兴趣的一方面是,它们具有非常严格的社会等级制度,如图所示。
在这里插入图片描述

G W O GWO GWO算法具有结构简单、需要调节的参数少、容易实现等特点,其中存在能够自适应调整的收敛因子以及信息反馈机制,能够在局部寻优与全局搜索之间实现平衡,因此在对问题的求解精度和收敛速度方面都有良好的性能。
在这里插入图片描述
金字塔第一层为种群中的领导者,称为 α 。在狼群中 α 是具有管理能力的个体,主要负责关于狩猎、睡觉的时间和地方、食物分配等群体中各项决策的事务。金字塔第二层是 α 的智囊团队,称为 β 。 β 主要负责协助α 进行决策。当整个狼群的 α 出现空缺时,β 将接替 α 的位置。 β 在狼群中的支配权仅次于 α它将 α 的命令下达给其他成员,并将其他成员的执行情况反馈给 α 起着桥梁的作用。金字塔第三层是 δ,δ 听从 α 和 β 的决策命令,主要负责侦查、放哨、看护等事务。适应度不好的 α 和 β 也会降为 δ 。金字塔最底层是 ω ,主要负责种群内部关系的平衡。


此外,集体狩猎是灰狼的另一个迷人的社会行为。灰狼的社会等级在群体狩猎过程中发挥着重要的作用,捕食的过程在 α 的带领下完成。灰狼的狩猎包括以下 3 个主要部分:
1 )跟踪、追逐和接近猎物;
2 )追捕、包围和骚扰猎物,直到它停止移动;
3 )攻击猎物。

二、GWO数学模型

为了对 GWO 中灰狼的社会等级进行数学建模,将前 3匹最好的狼(最优解)分别定义为 α ,β 和 δ ,它们指导其他狼向着目标搜索。其余的狼(候选解)被定义为 ω ,它们围绕 α ,β或 δ 来更新位置。

1、包围猎物

D ⃗ = ∣ C ⃗ ∗ X ⃗ P ( t ) − X ⃗ ( t ) ∣ 式( 1 ) v e c X ( t + 1 ) = X ⃗ p ( t ) − A ⃗ ∗ D ⃗ 式( 2 ) \vec{\cal D}=\mid\vec{C}\ *\vec{X}_{P}\left(\,t\,\right)-\vec{X}(\,t\,)\mid 式(1)\\vec{X}(\,t+1\,)=\vec{X}_{{p}}(\,t\,)-\vec{\cal{A}}\,*\,\vec{D}式(2) D =∣C  X P(t)X (t)式(1vecX(t+1)=X p(t)A D 式(2

在这里插入图片描述
A ⃗ = 2 a → ∗ r → 1 − a → C ⃗ = 2 ⋅ r ⃗ 2 \vec{A}=2\stackrel{\rightarrow}{a}*\stackrel{\rightarrow}{r}_{1}-\stackrel{\rightarrow}{a}\\\vec{C}=2 ·\vec{r}_2 A =2ar1aC =2r 2


在这里插入图片描述

2、狩猎

灰狼能够识别猎物的位置并包围它们。当灰狼识别出猎物的位置后,β 和 δ 在 α 的带领下指导狼群包围猎物。在优化问题的决策空间中,我们对最佳解决方案(猎物的位置)并不了解。
在这里插入图片描述
灰狼个体跟踪猎物位置的数学模型描述如下
在这里插入图片描述

3、攻击猎物

在这里插入图片描述

4、开发

灰狼根据 α ,β 和 δ 的位置来搜索猎物。灰狼在寻找猎物
时彼此分开,然后聚集在一起攻击猎物。基于数学建模的散
度,可以用 A ⃗ \vec{A} A 大于 1 或小于 -1 的随机值来迫使灰狼与猎物分离,这强调了勘探(探索)并允许 GWO 算法全局搜索最优解,如图3 ( b )所示, ∥ v e c A ∣ \|vec{A}| vecA>1强迫灰狼与猎物(局部最优)分离,希望找到更合适的猎物(全局最优)。
在这里插入图片描述

5、代码实现

% 灰狼优化算法
function [Alpha_score,Alpha_pos,Convergence_curve]=GWO(SearchAgents_no,Max_iter,lb,ub,dim,fobj)% initialize alpha, beta, and delta_posAlpha_pos=zeros(1,dim);Alpha_score=inf; %change this to -inf for maximization problemsBeta_pos=zeros(1,dim);Beta_score=inf; %change this to -inf for maximization problemsDelta_pos=zeros(1,dim);Delta_score=inf; %change this to -inf for maximization problems%Initialize the positions of search agentsPositions=initialization(SearchAgents_no,dim,ub,lb);Convergence_curve=zeros(1,Max_iter);l=0;% Loop counter% Main loop
while l<Max_iterfor i=1:size(Positions,1)  % 返回超出搜索空间边界的搜索值Flag4ub=Positions(i,:) > ub;Flag4lb=Positions(i,:) < lb;Positions(i,:)=(Positions(i,:).*(~(Flag4ub+Flag4lb)))+ub.*Flag4ub+lb.*Flag4lb;               % 计算每个搜索的目标函数值fitness=fobj(Positions(i,:));% 更新位置、Update alphaif fitness<Alpha_score Alpha_score=fitness; Alpha_pos=Positions(i,:);endif fitness > Alpha_score && fitness<Beta_score Beta_score=fitness; % Update betaBeta_pos=Positions(i,:);endif fitness>Alpha_score && fitness>Beta_score && fitness<Delta_score Delta_score=fitness; % Update deltaDelta_pos=Positions(i,:);endend%     a∈[0,2]a=2-l*((2)/Max_iter); % a decreases linearly fron 2 to 0% 更新位置for i=1:size(Positions,1)for j=1:size(Positions,2)     % r1 is a random number in [0,1]         r1=rand(); % r2 is a random number in [0,1]r2=rand();A1=2*a*r1-a; % Equation (3.3)C1=2*r2; % Equation (3.4)D_alpha=abs(C1*Alpha_pos(j)-Positions(i,j)); % Equation (3.5)-part 1X1=Alpha_pos(j)-A1*D_alpha; % Equation (3.6)-part 1r1=rand();r2=rand();A2=2*a*r1-a; % Equation (3.3)C2=2*r2; % Equation (3.4)D_beta=abs(C2*Beta_pos(j)-Positions(i,j)); % Equation (3.5)-part 2X2=Beta_pos(j)-A2*D_beta; % Equation (3.6)-part 2       r1=rand();r2=rand(); A3=2*a*r1-a; % Equation (3.3)C3=2*r2; % Equation (3.4)D_delta=abs(C3*Delta_pos(j)-Positions(i,j)); % Equation (3.5)-part 3X3=Delta_pos(j)-A3*D_delta; % Equation (3.5)-part 3             Positions(i,j)=(X1+X2+X3)/3;% Equation (3.7)endendl=l+1;    Convergence_curve(l)=Alpha_score;
end%%函数声明,输入参数包括搜索代理数量(SearchAgents_no)、问题维度(dim)、上界(ub)和下界(lb)。输出为搜索代理的位置矩阵
function Positions=initialization(SearchAgents_no,dim,ub,lb)
% 获取上界矩阵的列数,即边界数量,判断变量边界的情况Boundary_no= size(ub,2); % numnber of boundaries% If the boundaries of all variables are equal and user enter a signle% number for both ub and lbif Boundary_no==1Positions=rand(SearchAgents_no,dim).*(ub-lb)+lb;end% If each variable has a different lb and ubif Boundary_no>1for i=1:dimub_i=ub(i);lb_i=lb(i);Positions(:,i)=rand(SearchAgents_no,1).*(ub_i-lb_i)+lb_i;endend

总结

完整代码请私信领取:

[1].Mirjalili, S., Mirjalili, S. M., & Lewis, A. (2014). Grey wolf optimizer. Advances in engineering software, 69, 46-61.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/135004.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

使用电力系统稳定器 (PSS) 和静态 VAR 补偿器 (SVC) 提高瞬态稳定性(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

MATLAB遗传算法求解生鲜货损制冷时间窗碳排放多成本车辆路径规划问题

MATLAB遗传算法求解生鲜货损制冷时间窗碳排放多成本车辆路径规划问题实例 1、问题描述 已知配送中心和需求门店的地理位置,并且已经获得各个门店的需求量。关于送货时间的要求,门店都有规定的时间窗,对于超过规定时间窗外的配送时间会产生相应的惩罚成本。为保持生鲜农产品的…

Git: 工作区、暂存区、本地仓库、远程仓库

参考链接&#xff1a; Git: 工作区、暂存区、本地仓库、远程仓库 https://blog.csdn.net/weixin_36750623/article/details/96189838

通过stream流实现分页、模糊搜索、按列过滤功能

通过stream实现分页、模糊搜索、按列过滤功能 背景逻辑展示示例代码 背景 在有一些数据通过数据库查询出来后&#xff0c;需要经过一定的逻辑处理才进行前端展示&#xff0c;这时候需要在程序中进行相应的分页、模糊搜索、按列过滤了。这些功能通过普通的逻辑处理可能较为繁琐…

Hadoop-Hbase

1. Hbase安装 1.1 安装zookeeper、 hbase 解压至/opt/soft&#xff0c;并分别改名 配置环境变量并source生效 #ZK export ZOOKEEPER_HOME/opt/soft/zk345 export PATH$ZOOKEEPER_HOME/bin:$PATH #HBASE_HOME export HBASE_HOME/opt/soft/hbase235 export PATH$HBASE_HOME/b…

windows平台 git bash使用

打开所在需要git管理的目录,鼠标右键open Git BASH here 这样就直接进来,不需要windows dos窗口下麻烦的切路径&#xff0c;windows和linux 路径方向不一致 (\ /) 然后git init 建立本地仓库,接下来就是git相关的操作了. 图形化界面查看 打开所在需要git管理的目录,鼠标右键…

SpringMVC系列(四)之SpringMVC实现文件上传和下载

目录 前言 一. SpringMVC文件上传 1. 配置多功能视图解析器 2. 前端代码中&#xff0c;将表单标记为多功能表单 3. 后端利用MultipartFile 接口&#xff0c;接收前端传递到后台的文件 4. 文件上传示例 1. 相关依赖&#xff1a; 2. 逆向生成对应的类 3. 后端代码&#xf…

vMAP——论文解析

vMAP: Vectorised Object Mapping for Neural Field SLAM vMAP 是一个物体级稠密图 neural SLAM&#xff0c;每一个物体都用一个 mlp 来表征&#xff0c;而不需要 3D 先验。当 RGB-D 相机在没有任何先验信息的情况下时&#xff0c;vMAP 会即时检测物体 instance&#xff0c;并将…

Solidity 小白教程:19. 接收 ETH receive 和 fallback

Solidity 小白教程&#xff1a;19. 接收 ETH receive 和 fallback Solidity支持两种特殊的回调函数&#xff0c;receive()和fallback()&#xff0c;他们主要在两种情况下被使用&#xff1a; 接收 ETH处理合约中不存在的函数调用&#xff08;代理合约 proxy contract&#xff…

Thymeleaf语法详解

目录 一、Thymeleaf介绍 &#xff08;1&#xff09;依赖 &#xff08;2&#xff09;视图 &#xff08;3&#xff09;控制层 二、变量输出 三、操作字符串 四、操作时间 五、条件判断 六、遍历集合 &#xff08;1&#xff09;迭代遍历 &#xff08;2&#xff09;将遍…

webpack 基础配置

常见配置 文件打包的出口和入口webpack如何开启一台服务webpack 如何打包图片&#xff0c;静态资源等。webpack 配置 loader配置 plugin配置sourceMap配置 babel 语法降级等 接下来 &#xff0c; 我们先从webpack的基本配置 开始吧&#xff01; 在准备 配置之前 , 搭建一个 …

程序地址空间

✅<1>主页&#xff1a;&#xff1a;我的代码爱吃辣 &#x1f4c3;<2>知识讲解&#xff1a;Linux——程序地址空间 ☂️<3>开发环境&#xff1a;Centos7 &#x1f4ac;<4>前言&#xff1a;我们一直随口就能说出来的栈区&#xff0c;堆区&#xff0c;常量…

VS code 下 makefile 【缺少分隔符 停下来】 报错解决方法

首先来看报错的makefile源码 再来看报错的信息&#xff1a; 第5行缺少分隔符&#xff0c;其实不止是第5行&#xff0c;只要是前面需要加tab留白的行都会报这个错误&#xff0c;比如说第7行第11行 编译的时候&#xff0c;前面的留白必须是按tab键生成的 但是&#xff01;&…

C++11线程库简介

前言 在c11之前涉及多线程的问题都是和平台相关的&#xff0c;比如windows和linux都有一套自己的接口&#xff0c;这使得代码的可移植性变差。C11中最重要的特性就是对线程进行了支持&#xff0c;使得C在编程时不再依赖第三方库&#xff0c;而且原子操作中还引入了原子类的概念…

LeetCode:3. 无重复字符的最长子串

给定一个字符串 s &#xff0c;请你找出其中不含有重复字符的 最长子串 的长度。 3. 无重复字符的最长子串 - 力扣&#xff08;LeetCode&#xff09; // 3.无重复字符的最长子串 // 给定一个字符串 s &#xff0c;请你找出其中不含有重复字符的 最长子串 的长度。 class Solu…

DETR:End-to-End Object Detection with Transformers

代码&#xff1a;https://github.com/HuKai97/detr-annotations 论文&#xff1a;https://arxiv.org/pdf/2005.12872.pdf 参考视频&#xff1a;DETR 论文精读【论文精读】_哔哩哔哩_bilibili 团队&#xff1a;Meta AI 摘要 DETR 做目标检测任务既不需要proposal&#xff0…

elasticsearch4-文档操作

个人名片&#xff1a; 博主&#xff1a;酒徒ᝰ. 个人简介&#xff1a;沉醉在酒中&#xff0c;借着一股酒劲&#xff0c;去拼搏一个未来。 本篇励志&#xff1a;三人行&#xff0c;必有我师焉。 本项目基于B站黑马程序员Java《SpringCloud微服务技术栈》&#xff0c;SpringCloud…

html的日期选择插件

1.效果 2.文档 https://layui.gitee.io/v2/docs/ 3.引入 官网地址&#xff1a; https://layui.gitee.io/v2/ 引入&#xff08;在官网下载&#xff0c;&#xff09;jquery-1.7.2.min.js,layui/layui.js **<link href"js/layui/css/layui.css" rel"stylesh…

哈夫曼编码原理及实现

文章目录 一.哈夫曼编码原理哈夫曼二叉树构建 二.具体代码实现 一.哈夫曼编码原理 哈夫曼编码&#xff08;Huffman Coding&#xff09;是一种用于数据压缩的编码方法&#xff0c;它通过给出不同的数据符号分配不同长度的编码&#xff0c;使得出现频率高的符号具有较短的编码&a…

OpenCV(四十一):图像分割-分水岭法

1.分水岭方法介绍 OpenCV 提供了分水岭算法&#xff08;Watershed Algorithm&#xff09;的实现&#xff0c; 使用分水岭算法对图像进行分割&#xff0c;将图像的不同区域分割成互不干扰的区域。分水岭算法模拟了水在图像中的扩散和聚集过程&#xff0c;将标记的边界被看作是阻…