基于莱维飞行扰动策略的麻雀搜索算法-附代码

news2024/11/20 11:22:04

基于莱维飞行扰动策略的麻雀搜索算法

文章目录

  • 基于莱维飞行扰动策略的麻雀搜索算法
    • 1.麻雀优化算法
    • 2. 改进麻雀算法
      • 2.1 莱维飞行搜索机制
      • 2.2 莱维飞行扰动策略
      • 2.3 初始化混沌搜索机制
    • 3.实验结果
    • 4.参考文献
    • 5.Matlab代码
    • 6.Python代码

摘要:为了解决麻雀搜索算法存在迭代后期搜索多样性不足、容易陷入局部最优等问题,提出了一种基于莱维飞行扰动策略的改进麻雀搜索算法。首先借鉴Sin混沌搜索机制,改进种群初始化策略。然后在麻雀种群觅食搜索过程中引入莱维飞行扰动机制,牵引种群移动适当的步长,增加空间搜索的多样性。

1.麻雀优化算法

基础麻雀算法的具体原理参考,我的博客:https://blog.csdn.net/u011835903/article/details/108830958

2. 改进麻雀算法

2.1 莱维飞行搜索机制

随着仿生学的不断发展, 模拟布谷鸟巢寄生行为的 CS 算法应运而生。生物学的研究表 明: 布谷鸟利用餒育寄生的方式繁衍后代, 表现为产卵寄生于其他宿主鸟巢并在其他宿主鸟 的帮助下孵化和育雉的一种生物行为, 其繁殖行为关于选巢位置的变化正好体现出莱维飞行 的搜索特性。

CS 算法是将布谷鸟寻窝产卵和莱维飞行的搜索机制形成搜索策略。该算法约定以下 3 条 规则:1)每只布谷鸟每次只产卵一个, 并随机选择寄生巢来卿化;2)在随机选择的一组寄生 巢中, 将最好的寄生巢保留到下一代;3)约定寄生巢的数量, 且宿主鸟按一定的概率发现寄 生卵。在这 3 条规则的约束下, 宿主鸟可以将产卵抛出, 或放弃该鸟巢以建新巢。Levy ( λ ) (\lambda) (λ) 是 一个随机搜索路径, 其随机步长表现为一个 Levy 分布, 具体计算公式为
L e v y ∼ u = t − λ , 1 < λ ⩽ 3 (6) Levy \sim u=t^{-\lambda}, \quad 1<\lambda \leqslant 3 \tag{6} Levyu=tλ,1<λ3(6)
布谷鸟通过莱维飞行寻窝搜索的路径和位置更新公式为
x i t + 1 = x i t + δ ⊕ Levy ⁡ ( λ ) (7) x_i^{t+1}=x_i^t+\delta \oplus \operatorname{Levy}(\lambda)\tag{7} xit+1=xit+δLevy(λ)(7)
式中: x i t x_i^t xit 表示第 i i i 个鸟窝在第 t t t 代的位置; δ \delta δ 表示步长大小, δ > 0 \delta>0 δ>0, 通常设置为 δ = 1 ; ⊕ \delta=1 ; \oplus δ=1; 表 示点对点乘法。

2.2 莱维飞行扰动策略

在 CS 算法中, 采用莱维飞行可以产生变化多样的随机步长。在搜索过程中, 如果步长较 大, 全局搜索范围较广, 则搜索精度会降低, 易产生不稳定的震荡现状; 如果步长较小, 局部 寻优能力增强, 则搜索精度会显著增强。因此, 采用莱维飞行产生的步长具有遍历性和随机 性, 但自适应能力不够。SSA 为了弥补这一不足, 利用发现者-跟随者-警戒者的模型机制, 提 高了全局搜索能力和局部求解精度。
本文受 C S \mathrm{CS} CS 算法启发构建莱维飞行步长扰动方法, 扰动步长 S p S_p Sp 的计算公式如式 (8) (11) 所示:
s i = u ∣ v ∣ 1 / β ( 8 ) u ∼ N ( 0 , δ u 2 ) , v ∼ N ( 0 , δ v 2 ) ( 9 ) δ u = { Γ ( 1 + β ) sin ⁡ ( π β / 2 ) Γ [ ( 1 + β ) / 2 ] β 2 ( β − 1 ) / 2 } 1 / β , δ v = 1 ( 10 ) S p = τ s i x best  j ( 11 ) \begin{aligned} s_i &=\frac{u}{|v|^{1 / \beta}} &(8)\\ u & \sim N\left(0, \delta_u^2\right), \quad v \sim N\left(0, \delta_v^2\right) &(9)\\ \delta_u &=\left\{\frac{\Gamma(1+\beta) \sin (\pi \beta / 2)}{\Gamma[(1+\beta) / 2] \beta 2^{(\beta-1) / 2}}\right\}^{1 / \beta}, \quad \delta_v=1 &(10)\\ S_p &=\tau s_i x_{\text {best }}^j&(11) \end{aligned} siuδuSp=v1/βuN(0,δu2),vN(0,δv2)={Γ[(1+β)/2]β2(β1)/2Γ(1+β)sin(πβ/2)}1/β,δv=1=τsixbest j(8)(9)(10)(11)
式中: i ∈ { 1 , 2 , ⋯   , n } , j ∈ { 1 , 2 , ⋯   , D } , u i \in\{1,2, \cdots, n\}, j \in\{1,2, \cdots, D\}, u i{1,2,,n},j{1,2,,D},u v v v 属于正态分布, β = 1.5 \beta=1.5 β=1.5 。麻雀搜索位置步长 扰动定义为
v i , j = v i , j S p (12) v_{i, j}=v_{i, j} S_p \tag{12} vi,j=vi,jSp(12)

2.3 初始化混沌搜索机制

本文对传统的 SSA 进行了初始化搜索策略的改进。根据 Sin 混沌模型初始化种群分布, 增加种群搜索的多样性, 则产生不同数值的混沌序列可以定义为
x n + 1 = sin ⁡ ( 2 x n ) (13) x_{n+1}=\sin \left(\frac{2}{x_n}\right) \tag{13} xn+1=sin(xn2)(13)
式中: x n ∈ [ − 1 , 1 ] x_n \in[-1,1] xn[1,1] x n ≠ 0 , n = 0 , 1 , ⋯   , N x_n \neq 0, n=0,1, \cdots, N xn=0,n=0,1,,N

LSSA 的伪代码算法步骤如下:
步骤 1 参数设置
设置麻雀种群规模数 n n n 、麻雀发现者数量 P d P_d Pd 、警戒者数量 S d S_d Sd 、寻食步数计数器 t t t 为 0 、最 大寻食迭代次数为 T max ⁡ T_{\max } Tmax
步骤 2 初始化种群
在搜索区域内按式 (13) 产生 n n n 个向量 X i ( i = 1 , 2 , ⋯   , n ) X_i(i=1,2, \cdots, n) Xi(i=1,2,,n), 计算适应度值并记录适应度 值的最佳和最差个体位置。
步骤 3 发现者搜索
根据式 (3) 搜索更新发现者位置。
步骤 4 加入者搜索
根据式 (4) 搜索更新加入者位置。
步骤 5 檠戒者搜索
根据式 (5) 搜索更新警戒者位置。

步骤 6 根据适应度值更新位置
比较 y min ⁡ y_{\min } ymin G min ⁡ G_{\min } Gmin, 若 y min ⁡ ⩽ G min ⁡ y_{\min } \leqslant G_{\min } yminGmin, 则令 G min ⁡ = y min ⁡ , X g ( t ) = X g ′ ( t ) G_{\min }=y_{\min }, X_g(t)=X_g^{\prime}(t) Gmin=ymin,Xg(t)=Xg(t), 记录当前所有麻 雀找到的最优位置, 即全局最优解 s ∗ s^* s
步骤 7 莱维飞行机制
随机生成一个数 r r r, 设置概率 p i p_i pi, 如果 r < p i r<p_i r<pi, 则根据式 (12) 进行莱维飞行搜索。
步骤 8 更新迭代次数, 若满足当前迭代次数 t > T max ⁡ t>T_{\max } t>Tmax, 则搜索停止, 输出全局最优位置 X g X_g Xg 和求解结果 f o p t ( X g ) f_{\mathrm{opt}}\left(X_g\right) fopt(Xg); 否则转步骤 3 继续执行。

3.实验结果

请添加图片描述

4.参考文献

[1]马卫,朱娴.基于莱维飞行扰动策略的麻雀搜索算法[J].应用科学学报,2022,40(01):116-130.

5.Matlab代码

6.Python代码

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

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

相关文章

(02)Cartographer源码无死角解析-(04) 熟悉bag文件,配置.launch与.lua文件,初步调参

本人讲解关于slam一系列文章汇总链接:史上最全slam从零开始&#xff0c;针对于本栏目讲解(02)Cartographer源码无死角解析-接如下: (02)Cartographer源码无死角解析- (00)目录_最新无死角讲解&#xff1a;https://blog.csdn.net/weixin_43013761/article/details/127350885 文…

算法 | 详解斐波那契数列问题

14天阅读挑战赛 本篇是学习了《趣学算法&#xff08;第2版&#xff09;》 第一章之后总结的。 上一篇讲到了等比数列求和问题&#xff0c;求Sn122223...263&#xff1f;S_n 1 2 2^2 2^3 ... 2^{63} &#xff1f;Sn​122223...263&#xff1f;&#xff0c;该函数属于爆…

1024,我们节日

文章目录1024的前奏1024应该锻炼身体1024 &#xff1f;为何是1024其他的1024代码有Bug&#xff0c;世界却温暖特殊的一类人群&#xff08;一&#xff09;特殊的一类人群&#xff08;二&#xff09;写在最后1024的前奏 写博文的时间是23号&#xff0c;距离1024这个标志性的节日…

趣学算法14天阅读|Day2

14天阅读挑战赛 文章目录前言什么是算法&#xff1f;算法复杂度如何评定好算法案例案例一&#xff1a;棋盘的麦子案例二&#xff1a;兔子数列总结前言 &#x1f4eb; 作者简介&#xff1a;「六月暴雪飞梨花」&#xff0c;专注于研究Java&#xff0c;就职于科技型公司后端中级工…

@AutoConfigurationPackage注解详解

AutoConfigurationPackage是在springboot启动类注解SpringBootApplication下的EnableAutoConfiguration下。AutoConfigurationPackage作用是指定springboot扫描包&#xff0c;默认就是扫描启动类同包下的类。可以通过AutoConfigurationPackage来附加其他路径&#xff0c;然后sp…

asp.net园林绿化服务交易网站

本设计的目的是通过对园林绿化的初步了解&#xff0c;在巩固网站设计所学知识的基础上。运用于实践&#xff0c;在实践中强化理论知识&#xff0c;做到理论联系实践。在设计中学会搜集资料地方法&#xff0c;学会查阅设计规程。掌握设计步骤&#xff0c;同时培养创新能力&#…

【图像评价】基于matlab GUI图像评价系统【含Matlab源码 2185期】

一、图像质量评价 图像质量评价对图像处理算法的可行性分析以及某类算法达成效果的比较都起着非常重要的指导作用。随着图像处理技术的发展&#xff0c;对于图像质量评价的研究也日益深入&#xff0c;新的评价指标和评价算法不断涌现&#xff0c;共同推动了图像质量评价的进步…

【模型训练】YOLOv7旋翼无人机检测

YOLOv7旋翼无人机检测 1、YOLOv7算法旋翼无人机检测模型训练2、YOLOv7模型模型评估3、模型和数据集下载1、本项目采用YOLOv7算法实现对空中旋翼无人机的检测,在一万多张旋翼无人机检测数据集中训练得到,我们训练了YOLOv7模型,经评估我们得出了各个模型的评价指标; 2、目标类…

研发效能工程实践开篇

背景 随着技术的发展&#xff0c;大至一线互联网公司、小至几十人研发团队的公司都开始开展devops运动。大公司有能力自研&#xff0c;小公司则采用开源解决方案。如何实施devops业界已经有非常成熟的方案&#xff0c;所以本系列不再谈devops工具链以及如何实施。本系列想谈谈…

初识C++ - 类与对象(中篇·下半)

目录 赋值运算符重载 以下是一个日期类的运算符重载的案例(重点) 关于流插入与流提取的使用 方法一&#xff1a;定义与声明分离 方法二&#xff1a;使用内联函数 const成员 概念 关于上述日期类代码为什么需要在函数后面加入const 取地址及const取地址操作符重载 …

5G核心网技术基础自学系列 | 网络切片

书籍来源&#xff1a;《5G核心网 赋能数字化时代》 一边学习一边整理内容&#xff0c;并与大家分享&#xff0c;侵权即删&#xff0c;谢谢支持&#xff01; 附上汇总贴&#xff1a;5G核心网技术基础自学系列 | 汇总_COCOgsta的博客-CSDN博客 支持网络切片是设计5G架构的主要驱…

【牛客刷题--SQL篇】必会的常用函数之条件函数SQL26计算25岁以上和以下的用户数量(多种写法)

&#x1f496;个人主页&#xff1a;与自己作战 &#x1f4af;作者简介&#xff1a;CSDN博客专家、CSDN大数据领域优质创作者、CSDN内容合伙人、阿里云专家博主 &#x1f49e;牛客刷题系列篇&#xff1a;【SQL篇】】【Python篇】【Java篇】 &#x1f4cc;推荐刷题网站注册地址&a…

基于WEB的二维码生成系统设计与实现(Asp.net)

目 录 1 引言 6 2 二维码的生成原理 6 2.1基础知识 6 2.1.1定位图案 7 2.1.2功能性数据 8 2.1.3数据码和纠错码 8 2.2数据编码 8 2.3结束符和补齐符 9 2.3.1补齐码&#xff08;Padding Bytes&#xff09; 9 2.3.2纠错码 10 2.4最终编码 11 2.4.1穿插放置 11 2.4.2Remainder Bi…

JWT基础概念

1. 介绍 JWT &#xff08;JSON Web Token&#xff09; 是目前最流行的跨域认证解决方案&#xff0c;是一种基于 Token 的认证授权机制。 从 JWT 的全称可以看出&#xff0c;JWT 本身也是 Token&#xff0c;一种规范化之后的 JSON 结构的 Token。 JWT 自身包含了身份验证所需要…

【正点原子I.MX6U-MINI应用篇】6、嵌入式Linux在LCD屏幕上显示字符

一、原始方式&#xff1a; 取模显示字符 LCD显示屏是由width * height个像素点构成的&#xff0c;显示字符&#xff0c;一个非常容易想到的方法便是对字符取模&#xff0c;然后在LCD屏上打点显示字符&#xff1b;如果大家以前学习过单片机&#xff0c;想必接触过一些显示屏&am…

三次、五次多项式插值(附代码)

文章目录一、三次多项式插值二、五次多项式插值三、matlab代码三次、五次多项式插值在工程实践中很常见。求解多项式的系数最直接的方法是根据端点处的约束条件&#xff0c;列出线性方程组&#xff0c;再写成矩阵方程AXB&#xff0c;然后用通用的方法(如高斯消元法、LU分解等)解…

二叉树广度优先搜索、深度优先搜索(前序、中序、后序)遍历,动图详解-Java/Kotlin双版本代码

自古逢秋悲寂寥&#xff0c;我言秋日胜春朝 二叉树结构说明 本博客使用树节点结构&#xff0c;如下所示&#xff1a; Kotlin 版本 class TreeNode(var value: String, var leftNode: TreeNode? null, var rightNode: TreeNode? null)Java 版本 class TreeNode(){public…

经典排序之插入排序

目录 直接插入排序&#xff1a; 基本思路 图解过程 代码 复杂度分析 希尔排序 基本思想 图解过程 代码 复杂度分析 总结 参赛话题&#xff1a;学习笔记 直接插入排序&#xff1a; 基本思路 直接插入排序的工作方式像许多人排序一手扑克牌。开始时&#xff0c;我们的左手…

【Netty 从成神到升仙系列 大结局】全网一图流死磕解析 Netty 源码

&#x1f44f;作者简介&#xff1a;大家好&#xff0c;我是爱敲代码的小黄&#xff0c;独角兽企业的Java开发工程师&#xff0c;Java领域新星创作者。&#x1f4dd;个人公众号&#xff1a;爱敲代码的小黄&#x1f4d5;系列专栏&#xff1a;Java设计模式、数据结构和算法&#x…

第八篇 python 面向对象编程

11 面向对象编程 面向对象编程——Object Oriented Programming&#xff0c;简称OOP&#xff0c;是一种程序设计思想。OOP把对象作为程序的基本单元&#xff0c;一个对象包含了数据和操作数据的函数。 面向过程的程序设计把计算机程序视为一系列的命令集合&#xff0c;即一组…