金豺(GJO)优化算法、matlab代码实现以及与PSO、GWO、SO算法比对

news2024/11/18 19:34:04

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • 前言
  • 1 算法原理
    • 2 算法步骤
      • 2.1 初始化种群
      • 2.2 搜索猎物(全局搜索)
      • 2.3 包围和围捕猎物(局部搜索)
      • 2.4 从全局搜索转向局部搜索
    • 3 算法流程图
    • 4 matlab代码实现
    • 运行F3测试案例
    • 与GWO、PSO、SO算法进行比对——F3算法


前言

金豺(GJO)优化算法是2022年由Nitish Chopra 等人提出,GJO 的灵感来自金豺 (Canis aureus) 的协作狩猎行为。算法的三个基本步骤是猎物搜索、包围和突袭

1 算法原理

该算法主要是由雄雌豺狼带领各个豺狼对猎物进行搜索、包围和围捕。
A:雄雌豺狼对
B:个体搜索猎物
C:包围猎物
D&E:围捕猎物
在这里插入图片描述

2 算法步骤

2.1 初始化种群

对个体进行初始化,和大部分算法一样,Ymax:表示上界,Ymin:表示下界
在这里插入图片描述
通过上述公式对种群进行初始化。

2.2 搜索猎物(全局搜索)

Ym(t):所有豺狼个体中最好的个体——雄性豺狼

Yfm(t):所有豺狼个体中次好的个体——雌性豺狼

在这里插入图片描述
在这里插入图片描述
E的计算公式:
E:回避能量
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
c1=1.5,E1为从1.5~0线性递减。

rl的计算公式:
在这里插入图片描述
在这里插入图片描述
miu,v 为0-1的随机数,beta=1.5;

ps:τ对应matlab函数中的gamma函数。

豺狼个体更新位置的公式

ps:有点类似于灰狼优化算法个体更新位置的公式

算法的探索阶段(全局搜索)使用如下3个公式对豺狼个体进行位置更新。
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

2.3 包围和围捕猎物(局部搜索)

算法的开发阶段(局部搜索)使用如下3个公式对豺狼个体进行位置更新
在这里插入图片描述
在这里插入图片描述

2.4 从全局搜索转向局部搜索

主要通过躲避能量的绝对值大小进行改变

当|E|>=1,豺狼对不同部分探索猎物,

当|E|<1,豺狼开始包围和攻击猎物。

3 算法流程图

在这里插入图片描述

4 matlab代码实现

main函数:

close all;
clear all;
clc;

% N种群大小
% Dim个体维度
% T最大迭代次数
% ub上界
% lb下界
% X_prey最好的个体
% G_best存储每次迭代后的最好个体的适应度值

N=300;
Dim=30;
T=500;
ub=100;
lb=-100;
[Y_prey,G_best]=GJO(Dim,ub,lb,N,T);
figure,
plot(G_best,'Color','blue');
best=G_best';%转置用于origin填充数据使用
xlim([1,500]);

my_function函数:

function my_fitness=my_function(X)
%F3测试问题
dim=size(X,2);
o=0;
for i=1:dim
    o=o+sum(X(1:i))^2;
end
my_fitness=o;
end

GJO主体代码

function [Y_prey,G_best]=GJO(Dim,ub,lb,N,T)
    %% 初始化参数
    c1=1.5;
    beta=1.5;
    %% 初始化种群
    Pop=zeros(N,Dim);
    Pop_size=size(Pop,1);
    for i=1:Pop_size
        for j=1:Dim
            Pop(i,j)=lb+rand*(ub-lb);
        end
    end
    %% 进化
    for t=1:T
        %筛选雄雌豺狼个体
        for i=1:Pop_size
            fit_ness(i)=my_function(Pop(i,:));
        end
        [~,sort_index]=sort(fit_ness);
        Y1=Pop(sort_index(1),:);%雄性豺狼
        Y2=Pop(sort_index(2),:);%雌性豺狼
        Y1_fitness=fit_ness(sort_index(1));%雄性豺狼适应度值
        Y2_fitness=fit_ness(sort_index(2));%雌性豺狼适应度值

        for i=1:Pop_size
            for j=1:Dim
            %eq(6)~eq(8)
            E0=2*rand-1;
            E1=c1*(1-(t/T));
            E=E1*E0;
            
            %eq(9)~eq(10)
            miu=rand;
            v=rand;
            sita=((gamma(1+beta)*sin(pi*beta/2))/(gamma((1+beta)/2)*beta*2.^((beta-1)/2))).^(1/beta);
            LF=0.01*(miu*sita)/(abs(v.^(1/beta)));
            rl=0.05*LF;

            if abs(E)>=1
            Y1_new=Y1(j)-E.*abs(Y1(j)-rl.*Pop(i,j));
            Y2_new=Y2(j)-E.*abs(Y2(j)-rl.*Pop(i,j));
            Y_new(i,j)=(Y1_new+Y2_new)./2;%紧随雄雌豺狼,更新豺狼位置 eq(4)、(5)and(11)
            else
            Y1_new=Y1(j)-E.*abs(rl*Y1(j)-Pop(i,j));
            Y2_new=Y2(j)-E.*abs(rl*Y2(j)-Pop(i,j));
            Y_new(i,j)=(Y1_new+Y2_new)./2;%紧随雄雌豺狼,更新豺狼位置 eq(12)、(13)and(11)
            end
            end
        end
            %% 计算所有新更新个体的适应度值
    for i=1:Pop_size
        Flag4Up=Y_new(i,:)>ub;
        Flag4Lp=Y_new(i,:)<lb;
        Y_new(i,:)=(Y_new(i,:).*(~(Flag4Up+Flag4Lp)))+Flag4Up.*ub+Flag4Lp.*lb;%修正
        y=my_function(Y_new(i,:));
        if y<my_function(Pop(i,:))
            fit_ness(i)=y;
            Pop(i,:)=Y_new(i,:);%替换个体
        end
    end
    %% 更新雄雌豺狼
    [~,sort_index]=sort(fit_ness);
    Y1=Pop(sort_index(1),:);%雄性豺狼
    Y2=Pop(sort_index(2),:);%雌性豺狼
    Y_prey=Y1;%最好的个体
    G_best(t)=my_function(Y1);%每次迭代后计算雄性豺狼个体的适应度值
    end
end

运行F3测试案例

在这里插入图片描述

与GWO、PSO、SO算法进行比对——F3算法

在这里插入图片描述
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

(22)目标检测算法之 yolov8模型导出总结

yolov8模型导出总结 不断更新中… 几种部署情况: onnxxmlengine官网说明:https://github.com/ultralytics/ultralytics/blob/main/docs/modes/export.md导出参数: onnx 参数解析format: 导出的模型形式:onnx xml engine ... imgsz: 设置模型的输入尺寸大小,默认640*640 ke…

记录一次docker镜像迁移过程

1.在母本服务器上查看要复刻的docker镜像。 sv800:build 作为docker镜像源[repository:tag],使用docker save 指令提出docker镜像包rk3588.tar docker save -o rk3588.tar sv800:build 2.在新环境下加载docker镜像包&#xff0c;预先安装docker指令工具 docker load -i rk35…

OCT图像中的多尺度无监督视网膜水肿区域分割

文章目录 Multiscale Unsupervised Retinal Edema Area Segmentation in OCT Images摘要本文方法原始的DCCS无监督图像聚类Pseudo-Mask-Guided Pixel-Wise Segmentation 实验结果 Multiscale Unsupervised Retinal Edema Area Segmentation in OCT Images 摘要 提出了一种新的…

STM32F051K8U6按键中断实例

引言 最近要开始做毕设了&#xff0c;准备用STM32做一个平衡小车&#xff0c;好久没做过STM32的裸机项目了&#xff0c;做几个项目练练手&#xff0c;复习一下。本例程使用STM32CubeMX配套hal库来实现按键中断和串口中断。芯片用的是STM32F051K8U6。 一、按键中断 &#xff0…

iproute2和流量控制(ip和tc工具)---iproute2/ip/tc/qdisc实现Linux下的QoS控制

iproute2是一个软件包&#xff0c;这个软件包包含了多种用于高级路由&#xff0c;隧道和流量控制配置工具软件。 iproute2提供了Linux内核对QoS的实现&#xff0c;你可以在以下网站中找到英文原版的信息osdl.org和lartc.org。这些工具软件中&#xff0c;最重要的当数ip和tc这二…

【Flutter从入门到入坑之五】你真的会使用 Widget 中的 State 吗?

【Flutter从入门到入坑】Flutter 知识体系 【Flutter从入门到入坑之一】Flutter 介绍及安装使用 【Flutter从入门到入坑之二】Dart语言基础概述 【Flutter从入门到入坑之三】Flutter 是如何工作的 【Flutter从入门到入坑之四】构建Flutter界面的基石——Widget State 前沿UI 编…

2023 年 3 月青少年机器人技术等级考试理论综合试卷(一级)

2023 年 3 月青少年机器人技术等级考试理论综合试卷&#xff08;一级&#xff09; 一、单选题(共 30 题&#xff0c;共 60 分) 1.关于使用动滑轮说法正确的是&#xff1f;&#xff08; B&#xff09; A. 是否省力与动滑轮的颜色有关 B.可以改变力的大小 C.不能省力 D.动滑轮的位…

AUTOSAR知识点Com(十三):ComM内容分析

目录 1、概述 1.1、总览 1.2、功能描述 1.3、依赖关系 2、功能SPEC 2.1、PNC 2.2、通道状态机 2.3、时序图解析 3、COMM工具配置 3.1、ComMGeneral 3.2、ComMConfigSet 1、概述 1.1、总览 ComM的全程是Communication Manager 管理通信&#xff0c;是BSW里面的一个组…

关于大模型对未来影响的一点看法

人们总是高估了未来一到两年的变化&#xff0c;低估了未来十年的变革。 ---比尔盖茨 近来OpenAI的GPT技术可以说在全球都带来了巨大的影响&#xff0c;也让大家看到了什么叫大力出奇迹。chatGPT和GPT4的能力给了大家很大的震撼&#xff0c;其流畅自如、逻辑清晰、出众的能力&am…

【vscode远程开发】使用SSH远程连接服务器 「内网穿透」

文章目录 前言视频教程1、安装OpenSSH2、vscode配置ssh3. 局域网测试连接远程服务器4. 公网远程连接4.1 ubuntu安装cpolar内网穿透4.2 创建隧道映射4.3 测试公网远程连接 5. 配置固定TCP端口地址5.1 保留一个固定TCP端口地址5.2 配置固定TCP端口地址5.3 测试固定公网地址远程 转…

Rosetta从头蛋白抗体设计、结构优化及在药物研发中的应用

Rosetta从头蛋白抗体设计、结构优化及在药物研发中的应用 第一天 内容 主要知识点 从蛋白质折叠到蛋白质设计教学目标&#xff1a;了解本方向内容、理论基础、研究意义。 蛋白质折叠与结构预测简介 主链二面角与二级结构侧链堆积与三级结构蛋白质设计简介 蛋白质设计的分…

shell编程之条件语句__例题

文章目录 (1) 检查用户家目录中的test.sh文件是否存在&#xff0c;并且检查是否有执行权限. [rootclr /opt/mywork]# cat 1.sh #!/bin/bash #检查用户家目录中的 test.sh 文件是否存在&#xff0c;并且检查是否有执行权 cd /roottest -f test.shif [ $? -eq 0 ];thentest -x…

插件、组件、控件,你分得清吗?

最近和小伙伴交流&#xff0c;时常发生插件、组件、控件等概念混淆的情况&#xff0c;因此导致经常会错意。感觉还是很有必要带大家整理清楚的&#xff0c;今天就来跟大家来聊一聊插件、组件、控件的区别。 什么是插件 先按照官方的一些解释来看看插件的概念描述&#xff1f;…

搭建Debug(printf)Viewer调试环境

希望对KEIL开发的小白的有用&#xff0c;KEIL开发如果高效正确调用Printf 打印输出调试信息。 需要添加红色字体代码 #include <stdio.h> #define ITM_Port8(n) (*((volatile unsigned char *)(0xE00000004*n))) #define ITM_Port16(n) (*((volatile unsigned short *)(…

Android类似微信聊天页面教程(Kotlin)五——选择发送图片

前提条件 安装并配置好Android Studio Android Studio Electric Eel | 2022.1.1 Patch 2 Build #AI-221.6008.13.2211.9619390, built on February 17, 2023 Runtime version: 11.0.150-b2043.56-9505619 amd64 VM: OpenJDK 64-Bit Server VM by JetBrains s.r.o. Windows 11 …

【模拟IC学习笔记】 负反馈系统的稳定性

反馈方程 输出方程 误差方程 环路增益 定义:当输入电压接地、并将环路断开时&#xff0c;所计算的增益就是环路增益 时&#xff08;幅度1&#xff0c;相位-180&#xff09;电路稳定在电源或低状态或在电源和地之间振荡。 分析稳定性时是对环路增益进行分析&#xff0c;通过环…

Java+Selenium+Testng自动化学习(一):环境搭建

目录 一、软件准备及版本介绍&#xff1a; 二、安装步骤及环境变量配置&#xff1a; 2.1 Java安装及配置 2.2 IDE工具&#xff08;Intellij IDEA&#xff09;安装及配置 2.3 Maven安装及配置 2.4 Maven本地仓库配置 2.5 Intellij IDEA配置mvn 一、软件…

全开放式时代来临,南卡OE带给你非同寻常的舒适和听觉感受

NANK南卡一直致力于深耕音频领域&#xff0c;不断创新&#xff0c;将于五月份发布全新形态的全开放式蓝牙耳机。相较于传统耳机&#xff0c;开放式蓝牙耳机除了佩戴零感舒适&#xff0c;还能在沉浸音乐的同时与外界保持沟通。南卡OE作为新推出的开放式蓝牙耳机&#xff0c;采用…

7年从测试废物到测试主管,如何从纯功能测试内卷中破局?

我大学学的计算机专业&#xff0c;有一点编程基础。我的软件测试职业开始和大多数测试人员一样&#xff0c;一开始在一家电商公司做软件功能测试。 大部分进入测试行业的朋友&#xff0c;最开始接触都是纯功能界面测试&#xff0c;随着工作年限&#xff0c;会接触到一些常用测试…

计算机体系结构总结:内存一致性模型 Memory consistency Model

存储一致性是为了保证多线程背景下的访存顺序&#xff0c;多线程的语句是可以交错执行&#xff0c;使得顺序不同产生不同的执行结果。 下面P2的输出结果可能是什么&#xff1f; P1, P2两个线程的语句是可以交叉执行的&#xff0c;比如1a, 2a, 2b, 1b&#xff1b;一个线程内的语…