四种策略改进的麻雀算法!效果起飞!你确定不来看看吗?

        声明:文章是从本人公众号中复制而来,因此,想最新最快了解各类智能优化算法及其改进的朋友,可关注我的公众号:强盛机器学习,不定期会有很多免费代码分享~  

目录

效果展示:

改进策略详解:

改进点1:立方映射初始化种群

改进点2:蝴蝶优化策略

改进点3:正余弦搜索策略

改进点4:高斯扰动策略

参考文献

部分代码

完整代码:


        今天为大家带来一期四种策略改进的麻雀搜索算法代码与原理讲解,方便大家改进自己的算法~学会这一篇可扩展到所有算法!

        废话不多说,直接看效果!

效果展示:

        为了方便大家比较,这里采用经典的23个标准测试函数,也就是CEC2005与原始麻雀算法进行对比!

        可以看到,选取的前10个函数里(没有故意遗漏!​),有8个都优于原来的麻雀算法,且收敛速度大幅提高,是一种不错的改进方法!其他的函数小伙伴们可以自行尝试,总体上效果明显优于原有的麻雀算法!

改进策略详解:

        废话不多说,直接来看一下是如何改进的!

改进点1:立方映射初始化种群

        麻雀搜索算法对种群进行初始化时,采用的是随机生成的方式,这种方式会使得麻雀种群分布不均匀,影响后期的迭代寻优。为提高算法全局搜索能力,避免迭代后期种群多样性降低,同时考虑到混沌映射具有随机性、遍历性和规律性等特点,利用混沌序列对种群进行初始化。汤安迪等证明了立方映射的均匀性及遍历性优于经典的Logistic映射,故采用立方映射完成种群的初始化。立方映射公式如下:

        式(4)中,n 为映射次数,y(n)∈(-1,0)∪(0,1), y(n)为第n次映射值。

        从图中可以看出,相比随机初始化的种群序列,通过立方映射产生 的初始种群分布更加均匀,遍历性更好。

改进点2:蝴蝶优化策略

        蝴蝶优化算法(Butterfly Optimization Algorithm, BOA)是受到蝴蝶觅食和求偶过程所启发的群智能算法。在迭代时,蝴蝶将朝着气味最浓的方向移动,该阶段被称为全局搜索阶段。其位置更新方式如下:

        式中,Xti是第t次迭代过程中第i只蝴蝶的位置,Xgbest是当前全局最优位置,fi表示第i只蝴蝶发出的气味,其取值大小取决于适应度的大小,r为0-1的随机数。

        由发现者位置公式可知,当R<ST时,虽然随着迭代次数的增大,取值分布变得较为均匀,在一定程度上提高了其收敛速度,但是发现者的每一维都在变小并逐渐收敛于0,因此其搜索能力在逐渐降低,这会导致算法在迭代后期易陷入局部极值的情况。故本研究利用BOA的全局搜索阶段位置更新策略改进发现者位置公式,改进后的公式如下:

        对改进前后的公式分别进行迭代,得到麻雀种群中个体的分布如图3和图4所示。从图中可以看出, 改进后的策略在迭代后期保证了麻雀种群个体分布 的多样性,在提高收敛速度的同时,在一定程度上扩大了搜索空间,提升了算法的全局寻优能力。

改进点3:正余弦搜索策略

        根据跟随者公式可知,跟随者在向发现者最优位置靠近时,会导致种群个体短时间聚集,虽然提高了算法的收敛速度,但是易出现算法陷入局部最优。正余弦函数不仅易于实现,而且有着良好的收敛性。利用其振荡特性进行寻优可以降低算法易陷入局部最优解 的风险。改进后跟随者的位置更新公式如下:

        式中,a为大于1的常数,本研究中的a取2; S1、S2、S3、S4 均为服从均匀分布的随机数;S2∈(0, 2π)、S3∈(0,2)、S4∈(0,1);tmax 为最大迭代次数。

改进点4:高斯扰动策略

        高斯分布在局部空间搜索性能好,对全局最优个体使用高斯扰动有利于算法跳出局部极值点,同时也 增强了算法全局搜索性能。使用高斯扰动策略生成新个体的公式如下:

        式中,Xtbest为当前全局最优位置,XtGbest为高斯变异后得到的个体位置。u和σ2为高斯分布的均值和方差,本研究中的u取0,σ2取1。

参考文献

        [1]胡青,龚世才,胡珍.基于改进麻雀搜索算法的空气质量指数预测[J].广西科学,2022,29(04):642-651.(北大核心)

部分代码

        可自由切换想要的23个函数,一键出三维函数图与迭代效果图!适合新手小白!

clear
clc
close
​
SearchAgents_no=30;   % 种群数量
Function_name='F10';  % 函数名称
Max_iteration=1000;   % 最大迭代次数
​
[lb,ub,dim,fobj]=Get_Functions_details(Function_name);
​
[SSA_Best_score,bestX,SSA_curve]=SSA(SearchAgents_no,Max_iteration,lb,ub,dim,fobj);  
[ISSA_Best_score,AbestX,ISSA_curve]=ISSA(SearchAgents_no,Max_iteration,lb,ub,dim,fobj);  
​
%% 画图
figure('Position',[500 500 660 290])
% 三维函数图
subplot(1,2,1);
func_plot(Function_name);
title('Parameter space')
xlabel('x_1');
ylabel('x_2');
zlabel([Function_name,'( x_1 , x_2 )'])
% 迭代曲线图
subplot(1,2,2);
semilogy(ISSA_curve,'r-','linewidth',1)
hold on
semilogy(SSA_curve,'b-','linewidth',1)
title('收敛曲线')
xlabel('迭代次数');
ylabel('适应度值');
axis tight
grid on
box on
legend('ISSA','SSA')
set(gcf,'color','w')
​
%% 显示结果
display(['ISSA在函数' [num2str(Function_name)],'上的最优值', num2str(ISSA_Best_score)]);
display(['SSA在函数' [num2str(Function_name)],'上的最优值', num2str(SSA_Best_score)]);

完整代码:

        如果需要免费获得图中的完整测试代码,只需点击下方小卡片,后台回复关键字:

GJMQA

        也可点击小卡片,后台回复个人需求定制此改进麻雀算法ISSA优化模型(看到秒回):

        1.回归/时序/分类预测类:SVM、LSSVM、ELM、KELM、HKELM、DELM、RELM、DHKELM、RF、LSTM、BiLSTM、GRU、BiGRU、PNN、CNN、BP、XGBoost、TCN、BiTCN、ESN等等均可~

        2.组合预测类:CNN/TCN/BiTCN/DBN/Adaboost结合SVM/RVM/ELM/LSTM/BiLSTM/GRU/BiGRU/Attention机制类等均可(可任意搭配非常新颖)~

        3.分解类:EMD、EEMD、VMD、REMD、FEEMD、CEEMDAN、ICEEMDAN、SVMD等分解模型均可~

        4.其他:机器人路径规划、无人机三维路径规划、DBSCAN聚类、VRPTW路径优化、微电网优化、无线传感器覆盖优化、故障诊断等等均可~

        5.原创改进优化算法(适合需要创新的同学):2024年的新算法CPO等或麻雀SSA、蜣螂DBO等任意优化算法均可,保证测试函数效果!

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

C语言——指针的进阶——第1篇——(第26篇)

坚持就是胜利 文章目录 一、字符指针1、面试题 二、指针数组三、数组指针1、数组指针的定义2、&数组名 VS 数组名3、数组指针的使用&#xff08;1&#xff09;二维数组传参&#xff0c;形参是 二维数组 的形式&#xff08;2&#xff09;二维数组传参&#xff0c;形参是 指针…

django的模板渲染中的【高级定制】:按数据下标id来提取数据

需求&#xff1a; 1&#xff1a;在一个页面中显示一张数据表的数据 2&#xff1a;不能使用遍历的方式 3&#xff1a;页面中的数据允许通过admin后台来进行修改 4&#xff1a;把一张数据表的某些内容渲染到[xxx.html]页面 5&#xff1a;如公司的新商品页面&#xff0c;已有固定的…

python进阶:可迭代对象和迭代器

一、Iterable&#xff08;可迭代对象&#xff09; 1、可迭代对象&#xff1a;能够进行迭代操作的对象。 可以理解为&#xff1a;能够使用for循环遍历的都是可迭代对象&#xff1b;**所有的可迭代对象&#xff0c;偶可以用内置函数iter转换为迭代器** 2、可迭代对象包括&…

Linux文本处理三剑客:awk(常用匹配模式)

在Linux操作系统中&#xff0c;grep、sed、awk被称为文本操作“三剑客”&#xff0c;上三期中&#xff0c;我们将详细介绍grep、sed、awk的基本使用方法&#xff0c;希望能够帮助到有需要的朋友。 1、前言 awk作为一门编程语言还有很多内容&#xff0c;我们继续学习awk。 网…

快速解决maven依赖冲突

我们在开发过程中经常出现maven依赖冲突&#xff0c;或者maven版本不匹配的情况&#xff0c;我们可以使用阿里云原生脚手架来做maven管理&#xff0c;添加需要的组件&#xff0c;然后点击获取代码&#xff0c;就可以获得对应的依赖文件。

【C语言】InfiniBand驱动mlx4_init和mlx4_cleanup

一、中文注释 Linux内核模块的初始化和清理过程&#xff0c;针对一个称为mlx4的网络设备驱动。以下是代码的逐行中文注释&#xff1a; static int __init mlx4_init(void) {int ret;if (mlx4_verify_params())return -EINVAL; // 检查设备参数是否有效&#xff0c;无效则返回…

.idea文件详解

.idea文件的作用&#xff1a; .idea文件夹是存储IntelliJ IDEA项目的配置信息&#xff0c;主要内容有IntelliJ IDEA项目本身的一些编译配置、文件编码信息、jar包的数据源和相关的插件配置信息。一般用git做版本控制的时候会把.idea文件夹排除&#xff0c;因为这个文件下保存的…

ABAP - SALV教程08 列设置热点及绑定点击事件

实现思路&#xff1a;将列设置成热点&#xff0c;热点列是可点击的&#xff0c;再给SALV实例对象注册点击事件即可&#xff0c;一般作用于点击单号跳转到前台等功能 "设置热点方法METHODS:set_hotspot CHANGING co_alv TYPE REF TO cl_salv_table...."事件处理方法M…

OSCP靶场--Hepet

OSCP靶场–Hepet 考点(1.邮件获取 2.msf恶意宏文档制作 3. 邮件投递恶意宏文档 4.服务配置不当提权) 1.nmap扫描 ┌──(root㉿kali)-[~/Desktop] └─# nmap -sV -sC -p- 192.168.188.140 --min-rate 2000 Starting Nmap 7.92 ( https://nmap.org ) at 2024-03-01 05:46 ES…

【网上商城系统的设计与开发】

目录 1.实训概况 1 1.1 实训题目 1 1.2实训时间 1 1.3实训目的 1 1.4 实训环境 1 1.5 实训内容 2 1.6 进度安排 3 2.需求分析 5 2.1 功能需求分析 5 2.1.1用户需求分析 5 2.2.2网站前台需求 5 2.2.3网站后台需求 6 2.2 可行性分析 7 2.2.1社会可行性 7 2.2.2技术可行性 8 3.系统…

通过多进程并发方式(fork)实现服务器(注意要回收子进程)

以下内容为视频学习记录。 1、父进程accept后返回的文件描述符为cfd以及用于创建连接的lfd; 调用fork()创建子进程后&#xff0c;子进程继承cfd,lfd&#xff0c;通过该cfd与连接过来的客户端通信,lfd对子进程来说没用&#xff0c;可以直接close(lfd); 对于父进程来说&#x…

如何利用ChatGPT搞科研?论文检索、写作、基金润色、数据分析、科研绘图(全球地图、植被图、箱型图、雷达图、玫瑰图、气泡图、森林图等)

以ChatGPT、LLaMA、Gemini、DALLE、Midjourney、Stable Diffusion、星火大模型、文心一言、千问为代表AI大语言模型带来了新一波人工智能浪潮&#xff0c;可以面向科研选题、思维导图、数据清洗、统计分析、高级编程、代码调试、算法学习、论文检索、写作、翻译、润色、文献辅助…

2023天津公租房网上登记流程图,注册到信息填写

2023年天津市公共租赁住房网上登记流程图 小编为大家整理了天津市公共租赁住房网上登记流程&#xff0c;从登记到填写信息。 想要体验的朋友请看一下。 申请天津公共租赁住房时拒绝申报家庭情况会怎样&#xff1f; 天津市住房保障家庭在享受住房保障期间&#xff0c;如在应申…

安装 node 错误的配置环境变量之后使用 npm 报错,更换淘宝镜像 (cnpm)

安装 node 错误的配置环境变量之后使用 npm 报错&#xff0c;更换淘宝镜像 (cnpm) node:internal/modules/cjs/loader:1147 throw err; ^ Error: Cannot find module ‘F:\ACodeTools\Node\node_modules\npm\bin\node_modules\npm\bin\npm-cli.js’ at Module._resolveFilename…

JVM(6)

JMM JVM定义了一种Java内存模型来屏蔽掉各种硬件和操作系统的内存访问差异,以实现让Java程序在各种平台下都能达到一致的内存访问效果.在此之前,C/C直接使用物理硬件和操作系统的内存模型,因此,会由于不同平台下的内存模型差异,有可能导致程序在一套平台上并发完全正常,而在另…

多输入多输出 | MATLAB实现GWO-Elman灰狼优化循环神经网络多输入多输出预测

多输入多输出 | MATLAB实现GWO-Elman灰狼优化循环神经网络多输入多输出预测 目录 多输入多输出 | MATLAB实现GWO-Elman灰狼优化循环神经网络多输入多输出预测预测效果基本介绍程序设计往期精彩参考资料 预测效果 基本介绍 Matlab实现GWO-Elman灰狼优化循环神经网络多输入多输出…

手把手教测试,全网内容最全有深度-jmeter-Flow Control Action

5.1.7.6.Flow Control Action(测试活动) Logical Action on Thread&#xff1a; Pause 暂停&#xff0c;配合 Duration 一起使用&#xff1b;Duration(milliseconds) 延迟时间&#xff0c;单位是毫秒 Start Next Thread Loop 开始本线程下一次循环 设置线程组线程数2&#xff…

(资源篇)2025届暑假实习春招全攻略路线

绝对的全攻略&#xff0c;资源完善程度绝对的全网唯一。 觉得有帮助的&#xff1a;随手一键三连关注就是对up主最大的激励。 绝对的宝藏up主&#xff01;&#xff01;&#xff01;&#xff0c;up主每天都会进行更新视频&#xff0c;算法视频or校招信息or八股讲解。 【暴躁老…

位运算第二弹

力扣191.位1的个数 public class Solution {// you need to treat n as an unsigned valuepublic int hammingWeight(int n) {int ret0;while(n!0){n(n&n-1);ret;}return ret;} } 推荐是自己去手动推一下&#xff0c;深刻理解一下&#xff0c;什么叫做最右侧的1。 力扣338.…

在docker中搭建selenium 爬虫环境(3分钟快速搭建)

1、安装docker 省略 2、拉取镜像 docker pull selenium/standalone-chrome-debug 3、运行容器 docker run -d -p 4444:4444 -p 5900:5900 -v C:\Users\Public\VNC_Donwnloads:/home/seluser/Downloads --memory6g --name selenium_chrome selenium/standalone-chrome-debu…