灰狼(GWO)算法(附完整Matlab代码,可直接复制)

2023-11-17

尊重他人劳动成果,请勿转载!

有问题可留言或私信,看到了都会回复解答!

其他算法请参考:

1、粒子群(PSO)优化算法(附完整Matlab代码,可直接复制)https://blog.csdn.net/xinzhi1992/article/details/125730562?spm=1001.2014.3001.5502

2、灰狼(GWO)优化算法(附完整Matlab代码,可直接复制)https://blog.csdn.net/xinzhi1992/article/details/125826933?spm=1001.2014.3001.5502

3、正余弦(SCA)优化算法(附完整Matlab代码,可直接复制)https://blog.csdn.net/xinzhi1992/article/details/115359297?csdn_share_tail=%7B%22type%22%3A%22blog%22%2C%22rType%22%3A%22article%22%2C%22rId%22%3A%22115359297%22%2C%22source%22%3A%22xinzhi1992%22%7D

4、萤火虫(FA)优化算法(附完整Matlab代码,可直接复制)https://blog.csdn.net/xinzhi1992/article/details/126761617?csdn_share_tail=%7B%22type%22%3A%22blog%22%2C%22rType%22%3A%22article%22%2C%22rId%22%3A%22126761617%22%2C%22source%22%3A%22xinzhi1992%22%7D5、果蝇(FOA)优化算法(附完整Matlab代码,可直接复制)https://blog.csdn.net/xinzhi1992/article/details/127649424

灰狼算法模拟了自然界灰狼的领导层级和狩猎制度:其具有金字塔般的等级制度。

第一层:\alpha层狼群。负责带领整个狼群狩猎猎物,即优化算法中的最优解。

第二层:\beta层狼群。负责协助\alpha狼群,即优化算法中的次优解。

第三层:\delta层狼群。听从\alpha\beta的命令和决策,负责侦查、放哨等。适应度差的 \alpha\beta会降为\delta

第四层:\omega层狼群。追随上面三层狼群行动。

 灰狼的狩猎过程包含如下:①跟踪、接近猎物②包围、追捕猎物③攻击猎物

一、包围猎物

在狩猎过程中,灰狼围捕猎物的行为为:

\overrightarrow{D}=\left | \overrightarrow{C}*\overrightarrow{X_{p}} (t)-\overrightarrow{X(t)}\right | ......(1)

\overrightarrow{X}(t+1)=\overrightarrow{X_{p}}(t)-\overrightarrow{A}\overrightarrow{D}......(2)

(1)式为灰狼和猎物之间的距离,\overrightarrow{X_{p}}\overrightarrow{X}分别是猎物的位置和灰狼的位置,t为迭代次数。\overrightarrow{A}\overrightarrow{C}为确定的系数,其计算公式分别为:

\overrightarrow{A}=2a*r_{1}-a......(3)

\overrightarrow{C}=2r_{2}......(4)

a是收敛因子,随着迭代次数,从2线性减小到0,r1和r2为随机数。

二、狩猎

\omega灰狼个体跟踪\alpha层狼群、 \beta层狼群、\delta层狼群的数学模型描述如下:

\vec{D_{\alpha }}=\left | \vec{C_{1}}*\vec{X_{\alpha}} -\vec{X} \right |

\vec{D_{\beta }}=\left | \vec{C_{2}}*\vec{X_\beta} -\vec{X} \right |

\vec{D_{\sigma }}=\left | \vec{C_{3}}*\vec{X_\sigma }-\vec{X} \right |

\vec{D_{\alpha }} \vec{D_{\beta }} \vec{D_{\sigma }}分别表示\omega灰狼个体距离  \alpha层狼群、 \beta层狼群、\delta层狼群的距离。

 \vec{X_{1 }}=\left | \vec{X_{\alpha}}-A_{1}*\vec{D_{\alpha }} \right |

\vec{X_{2 }}=\left | \vec{X_{\beta }}-A_{2}*\vec{D_{\beta }} \right |

\vec{X_{3 }}=\left | \vec{X_{\sigma }}-A_{3}*\vec{D_{\sigma }} \right |

X1、X2、X3分别表示受 \alpha层狼群、 \beta层狼群、\delta层狼群影响, \omega灰狼个体需要调整的位置。

这里取平均值,即:

\vec{X}(t+1)=\frac{\vec{X_{1}}+\vec{X_{2}}+\vec{X_{3}}}{3}

GWO灰狼算法的Matlab代码如下:



%pop——种群数量
%dim——问题维度
%ub——变量上界,[1,dim]矩阵
%lb——变量下界,[1,dim]矩阵
%fobj——适应度函数(指针)
%MaxIter——最大迭代次数
%Best_Pos——x的最佳值
%Best_Score——最优适应度值
clc;
clear all;
close all;
pop=50;
dim=2;
ub=[10,10];
lb=[-10,-10];
MaxIter=100;
fobj=@(x)fitness(x);%设置适应度函数
[Best_Pos,Best_Score,IterCurve]=GWO(pop,dim,ub,lb,fobj,MaxIter);
%…………………………………………绘图…………………………………………
figure(1);
plot(IterCurve,'r-','linewidth',2);
grid on;
title('灰狼迭代曲线');
xlabel('迭代次数');
ylabel('适应度值');
%…………………………………… 结果显示……………………………………
disp(['求解得到的x1,x2是:',num2str(Best_Pos(1)),' ',num2str(Best_Pos(2))]);
disp(['最优解对应的函数:',num2str(Best_Score)]);


%种群初始化函数
function x=initialization(pop,ub,lb,dim)
for i=1:pop
    for j=1:dim
        x(i,j)=(ub(j)-lb(j))*rand()+lb(j);
    end
end
end
%狼群越界调整函数
function x=BoundrayCheck(x,ub,lb,dim)
for i=1:size(x,1)
    for j=1:dim
        if x(i,j)>ub(j)
            x(i,j)=ub(j);
        end
        if x(i,j)<lb(j)
            x(i,j)=lb(j);
        end
    end
end
end

%适应度函数,可根据自身需要调整
function [Fitness]=fitness(x)
    Fitness=sum(x.^2);
end


%…………………………………………灰狼算法主体………………………………………
function [Best_Pos,Best_Score,IterCurve]=GWO(pop,dim,ub,lb,fobj,MaxIter)
Alpha_Pos=zeros(1,dim);%初始化Alpha狼群
Alpha_Score=inf;
Beta_Pos=zeros(1,dim);%初始化Beta狼群
Beta_Score=inf;
Delta_Pos=zeros(1,dim);%初始化化Delta狼群
Delta_Score=inf;

x=initialization(pop,ub,lb,dim);%初始化种群
Fitness=zeros(1,pop);%初始化适应度函数
for i=1:pop
    Fitness(i)=fobj(x(i,:));
end
[SortFitness,IndexSort]=sort(Fitness);
Alpha_Pos=x(IndexSort(1),:);
Alpha_Score=SortFitness(1);
Beta_Pos=x(IndexSort(2),:);
Beta_Score=SortFitness(2);
Delta_Pos=x(IndexSort(3),:);
Delta_Score=SortFitness(3);
Group_Best_Pos=Alpha_Pos;
Group_Best_Score=Alpha_Score;
for t=1:MaxIter
    a=2-t*((2)/MaxIter);%线性调整a的值
    for i=1:pop
        for j=1:dim
            %根据Alpha狼群更新位置X1
            r1=rand;
            r2=rand;
            A1=2*a*r1-a;%计算A1
            C1=2*r2;%计算C1
            D_Alpha=abs(C1*Alpha_Pos(j)-x(i,j));%计算种群中其它狼只与Alpha狼群的距离
            X1=Alpha_Pos(j)-A1*D_Alpha;%更新X1
            
            %根据Beta狼群更新位置X2
            r1=rand;
            r2=rand;
            A2=2*a*r1-a;%计算A2
            C2=2*r2;%计算C2
            D_Beta=abs(C2*Beta_Pos(j)-x(i,j));%计算种群中其它狼只与Beta狼群的距离
            X2=Beta_Pos(j)-A2*D_Beta;%更新X2
            
             %根据Delta狼群更新位置X3
            r1=rand;
            r2=rand;
            A3=2*a*r1-a;
            C3=2*r2;
            D_Delta=abs(C3*Delta_Pos(j)-x(i,j));%计算种群中其它狼只与BDelta狼群的距离
            X3=Delta_Pos(j)-A3*D_Delta;%更新X3
            
            x(i,j)=(X1+X2+X3)/3;%更新后的狼只位置
        end
    end
  x=BoundrayCheck(x,ub,lb,dim);%狼只越界调整
  for i=1:pop
      Fitness(i)=fobj(x(i,:));
      if Fitness(i)<Alpha_Score%替换Aplha狼
          Alpha_Score=Fitness(i);
          Alpha_Pos=x(i,:);
      end
      if Fitness(i)>Alpha_Score&&Fitness(i)<Beta_Score%替换Beta狼
          Beta_Score=Fitness(i);
          Beta_Pos=x(i,:);
      end
      if Fitness(i)>Alpha_Score&&Fitness(i)>Beta_Score&&Fitness(i)<Delta_Score%替换Delta狼
          Delta_Score=Fitness(i);
          Delta_Pos=x(i,:);
      end
  end
  Group_Best_Pos=Alpha_Pos;
  Group_Best_Score=Alpha_Score;
  IterCurve(t)=Group_Best_Score;
end
  Best_Pos=Group_Best_Pos;
  Best_Score=Group_Best_Score;
end

相关阅读:

1、粒子群(PSO)优化算法(附完整Matlab代码,可直接复制)

2、灰狼(GWO)优化算法(附完整Matlab代码,可直接复制)

3、正余弦(SCA)优化算法(附完整Matlab代码,可直接复制)

4、萤火虫(FA)优化算法(附完整Matlab代码,可直接复制)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

灰狼(GWO)算法(附完整Matlab代码,可直接复制) 的相关文章

  • 覆盖 MATLAB 默认静态 javaclasspath 的最佳方法

    MATLAB 配置为在搜索用户可修改的动态路径之前搜索其静态 java 类路径 不幸的是 静态路径包含相当多非常旧的公共库 因此如果您尝试使用新版本 您可能最终会加载错误的实现并出现错误 例如 静态路径包含 google collectio
  • Matlab 中是否有相当于 R 的 dput() 的函数?

    Matlab 中是否有相当于 R 的 dput 的函数 dput 将 R 对象的 ASCII 文本表示形式写入文件或连接 UPDATE 1 添加了递归和对单元格的支持 UPDATE 2 添加了对结构的支持 UPDATE 3 增加了对逻辑 整
  • 有没有办法在 MATLAB 中查看 pcode 文件 (.p) 的源代码?

    有没有办法在 MATLAB 中打开 pcode 文件 p 如果 开放 是指edit 那么当然不是 pcode 中的 p 代表 受保护 其主要设计目标是在保护其源代码的同时部署功能组件 如果 开放 是指run 那么当然是的 引用手册 http
  • 图像堆栈的最大强度投影

    我正在尝试重新创建该功能 max array 3 来自 MatLab 它可以获取 N 个图像的 300x300px 图像堆栈 我在这里说 图像 因为我正在处理图像 实际上这只是一个大的双数组 300x300xN 并创建一个 300x300
  • 按元素出现的频率对数组元素进行排序

    是否可以在 matlab octave 中使用sort函数根据元素的相对频率对数组进行排序 例如数组 m 4 4 4 10 10 10 4 4 5 应该产生这个数组 5 10 10 10 4 4 4 4 4 5是出现频率较低的元素 位于顶部
  • MATLAB 滚动图

    我有一个脑电图数据库 我想绘制它 数据库是一个19 1000 134的矩阵 其中 19 是通道数 在第一种方法中 我只使用一个渠道 1000 个样本大小 采样率为 500 Hz 时为 1000 个点 即 2 秒数据 134 epochs的数
  • 使用mat2cell将MxN的矩阵划分为1xN大小的M矩阵

    我有一个大小为 MxN 的矩阵 比方说 1867x3 1867 行和 3 列 我想将其分成 1867 个大小为 1x3 的单元格 我使用了mat2cell X 1 1866 这里X是矩阵 1867x3 结果给出了两个单元格 一个单元格的大小
  • MATLAB - 如何将子图一起缩放?

    我在一张图中有多个子图 每个图的 X 轴是相同的变量 时间 每个图上的 Y 轴都不同 无论是它所代表的内容还是数据的大小 我想要一种同时放大所有图的时间尺度的方法 理想情况下 可以在其中一张图上使用矩形缩放工具 并让其他图相应地更改其 X
  • 为什么旋转 3D 点云后顶点法线会翻转?

    我有两个人脸 3D 点云样本 蓝色点云表示目标面 红色点云表示模板 下图显示目标面和模板面在不同方向上对齐 目标面大致沿 x 轴 模板面大致沿 y 轴 Figure 1 The region around the nose is displ
  • Matlab 字段名索引[重复]

    这个问题在这里已经有答案了 所以我有一个包含多个表的元胞数组 我试图访问表的第一个列名称 c table1 table2 table3 以下两行都给了我错误 fieldnames c 1 1 fieldnames c 1 1 Error i
  • 什么是 ANN 中的纪元以及它如何转换为 MATLAB 中的代码?

    我试图理解 并可视化 训练人工神经网络的时代到底是什么 我们有一个包含约 7000 个产品的训练集 其中有 10 个特征 输入 这些产品必须根据这 10 个输入分为 7 个类别 我们的 ANN 有 10 个输入 这些输入进入由 10 个神经
  • MATLAB 特征函数

    我很好奇哪里可以找到完整的描述FEATURE功能 它接受哪些论点 没有找到文档 我只听说过memstats and getpid 还要别的吗 gt gt which feature built in undocumented 注意 更完整的
  • 有没有办法在matlab中进行隐式微分

    我经常使用 matlab 来帮助我解决数学问题 现在我正在寻找一种在 matlab 中进行隐式微分的方法 例如 我想区分y 3 sin x cos y exp x 0关于dy dx 我知道如何使用数学方法通常做到这一点 但我一直在努力寻找使
  • 如何告诉 mex 链接到 /usr/lib 中的 libstdc++.so.6 而不是 MATLAB 目录中的 libstdc++.so.6?

    现在 MATLAB 2012a 中的 mex 仅正式支持 gcc 4 4 6 但我想使用 gcc 4 7 风险自负 现在如果我直接用 mex 编译一些东西 它会抱怨 usr lib gcc i686 linux gnu 4 7 cc1plu
  • 黑白随机着色的六角格子

    我正在尝试绘制一个 10 000 x 10 000 随机半黑半白的六边形格子 我不知道如何将该格子的六边形随机填充为黑色和白色 这是我真正想要从这段代码中得到的示例 但我无法做到 https i stack imgur com RkdCw
  • 在 Matlab 中高效获取像素坐标

    我想在 Matlab 中创建一个函数 给定一个图像 该函数将允许人们通过单击图像中的像素来选择该像素并返回该像素的坐标 理想情况下 人们能够连续单击图像中的多个像素 并且该函数会将所有相应的坐标存储在一个矩阵中 有没有办法在Matlab中做
  • matlab中的正则逻辑回归代码

    我正在尝试正则化 LR 在 matlab 中使用以下公式很简单 成本函数 J theta 1 m sum y i log h x i 1 y i log 1 h x i lambda 2 m sum theta j 梯度 J theta t
  • 如何找到平面和 3d 矩阵之间的交平面

    如果我有一堆图像并且尺寸如下 size M 256 256 124 我有 3 个点 它们的坐标是 coor a 100 100 124 coor b 256 156 0 coor c 156 256 0 如何创建 M 与这 3 个点定义的平
  • MATLAB - 冲浪图数据结构

    我用两种不同的方法进行了计算 对于这些计算 我改变了 2 个参数 x 和 y 最后 我计算了每种变体的两种方法之间的 误差 现在我想根据结果创建 3D 曲面图 x gt on x axis y gt on y axis Error gt o
  • 访问图像的 Windows“标签”元数据字段

    我正在尝试进行一些图像处理 所以现在我正在尝试读取图像 exif 数据 有 2 个内置函数可用于读取图像的 exif 数据 问题是我想读取图像标签 exifread and imfinfo这两个函数都不显示图像标签 Is there any

随机推荐

  • DBSCAN的理解和matlab实现

    DBSCAN是基于密度的聚类算法 以下总结一下编写matlab时遇到的一些问题 1 算法的基本流程 步骤1 首先初始化变量 主要包括原始数据变量 此处为一个二维矩阵 包括x y坐标 共1500个采样点 由randmperm生成的随机标签向量
  • JS判断汉字

    方法一 最笨的 最容易理解的 且可以随意设置要排除的字符
  • IDEA下SpringBoot指定环境、配置文件启动

    1 idea下的SpringBoot启动 指定配置文件 Springboot项目有如下配置文件 主配置文件application yml 测试环境 application test yml 生产环境 application pro yml
  • C++查找算法总结(可执行代码)

    1 顺序查找 核心 从数据的第一个元素开始 依次比较 直到找到目标数据或查找失败 1 从表中的第一个元素开始 依次与关键字比较 2 若某个元素匹配关键字 则 查找成功 3 若查找到最后一个元素还未匹配关键字 则 查找失败 时间复杂度 顺序查
  • HTTP与HTTPS的区别,HTTPS的工作原理及优缺点

    为什么要有HTTPS 超文本传输协议HTTP协议被用于在web服务器和网站服务器之间传递消息 HTTP协议以明文方式发送内容 不提供任何方式的数据加密 如果攻击者截取了web浏览器和网站服务器之间的传输报文 就可以直接读懂其中的信息 因此
  • 逍遥模拟器android4.0版本,【逍遥安卓模拟器最新版】逍遥安卓模拟器官方下载 v7.2.1.0 电脑版-开心电玩...

    软件介绍 逍遥安卓模拟器最新版是一款性能卓佳的安卓模拟器 拥有市场上流行的安卓游戏 程序 应用 用户可以通过逍遥安卓模拟器运行这些 能够一键多开游戏 从而让用户能够更加便捷的运行多个手游 相对于市面其余的安卓模拟器性能更加优化 运行安卓程序
  • 41.QT-多线程与界面之间交互总结

    1 线程与界面组件需要注意的地方 在QThread线程中不能直接创建QWidget之类的界面组件 因为在QT中 所有界面组件相关的操作都必须在主线程中 也就是GUI thread 所以 QThread线程不能直接操作界面组件 2 QThre
  • 接口-Web Service接口

    1 Web Service的使用背景 当前除了HTTP接口很流行以外 另一个常见使用的接口是Web Service接口 在介绍Web Service接口前先来介绍下SOA SOA Service Oriented Ambiguity 即面向
  • element-ui使用总结

    1 input输入框 自定义图标 前部效果图
  • vue+ElementUI el-select实现下拉列表分页的功能(下拉分页组件)

    1 最终效果 2 需求 因下拉框中的数据过多 所以需要使用分页的方式来实现 3 代码示例
  • Object 的静态方法

    仅供个人学习记录使用 表格内容来自MDN 编号 函数名 功能 1 Object assign 通过复制一个或多个对象来创建一个新的对象 2 Object create 使用指定的原型对象和属性创建一个新对象 3 Object defineP
  • 序列化2之[网鼎杯 2020 青龙组]AreUSerialz1

    class FileHandler protected op protected filename protected content function construct op 1 filename tmp tmpfile content
  • 『 云原生·Docker』初识Docker镜像与Docker镜像操作(一)

    系列文章目录 本系列主要分为以下六大部分 正在更新中 尽请期待 云原生 生之门 云原生 前置知识 云原生 Docker 云原生 Kubernetes 云原生 KubeSphere 云原生 DevOps 点击关注本专栏 提示 已经更新的或正在
  • moviepy第2天

    MoviePy 完整文档 是一个用于视频编辑的Python库 剪切 串联 标题插入 视频合成 又名非线性编辑 视频处理和创建自定义效果 有关一些使用示例 请参阅库 MoviePy可以读取和写入所有最常见的音频和视频格式 包括GIF 并在Wi
  • C语言实现判断一个整数能否被3 5 7中哪些数字整除

    include
  • Excel中的散点图这么强大,学习了!

    全世界只有3 14 的人关注了 数据与算法之美 平时见得最多的也许是柱形图了 但我个人最喜欢的却是散点图 在讲散点图之前 我先阐述一个不太严谨的个人观点 我认为 所有的数据图表都可以分为两类 一类是偏重于展示 一类是偏重于研究 如何理解 偏
  • !!!RFID原理及应用期末复习总结!!!少走弯路,直接满绩!

    选用教材 RFID原理及应用 清华大学出版社 第一章 概述 学习目标 什么是RFID RFID的发展史 RFID的构成及各模块功能 RFID的几种分类 RFID的应用领域 射频识别 RFID RFID技术 又称射频识别 是一种通信技术 可通
  • 《深入理解Java虚拟机》学习笔记

    JDK 用于支持Java程序开发的最小环境 包括Java程序设计语言 Java虚拟机 JavaAPI三部分 JRE 支持Java程序运行的标准环境 包括Java SE API子集和Java虚拟机 第一章 Java虚拟机发展史 1 Sun C
  • 3.取石头 (15分)

    题目内容 有一堆石子 A B两人轮流从中取出石子 每次取出的石子数目只能为1 3 7或8 最后一枚石子谁取到就是输方 A B两人都足够聪明 不会做出错误的判断 现给出一定数目的石子 A先取石子 计算A最终是输是赢 赢用1表示 输用0表示 输
  • 灰狼(GWO)算法(附完整Matlab代码,可直接复制)

    尊重他人劳动成果 请勿转载 有问题可留言或私信 看到了都会回复解答 其他算法请参考 1 粒子群 PSO 优化算法 附完整Matlab代码 可直接复制 https blog csdn net xinzhi1992 article detail