螺旋探索与自适应混合变异的麻雀搜索-附代码
螺旋探索与自适应混合变异的麻雀搜索
文章目录
- 螺旋探索与自适应混合变异的麻雀搜索
- 1.麻雀优化算法
- 2. 改进麻雀算法
- 2.1 ICMIC 混沌初始化种群
- 2.2 螺旋探索策略
- 2.3 基于精英差分和随机反向的自适应混合变异
- 3.实验结果
- 4.参考文献
- 5.Matlab代码
- 6.Python代码
摘要:针对麻雀搜索算法(SSA)收敛速度慢,易陷入局部最优的问题,提出一种螺旋探索与自适应混合变异的麻雀搜索算法(SHSSA)。首先,采用一种无限次折叠的ICMIC混沌初始化种群,增加种群多样性和遍历性,为全局寻优奠定基础;其次,融入一种螺旋探索策略,增强发现者探索未知区域的能力,提高算法的全局搜索性能;然后,提出一种基于精英差分和随机反向的混合变异策略,加快算法收敛速度,改善算法跳出局部最优的能力。
1.麻雀优化算法
基础麻雀算法的具体原理参考,我的博客:https://blog.csdn.net/u011835903/article/details/108830958
2. 改进麻雀算法
2.1 ICMIC 混沌初始化种群
在群智能优化算法中, 初始种群的分布状态, 对于算法的收玫速度和寻优精度至关重要。在处理末知分布问题时, 初始种群应 尽可能均匀分布在搜索空间中, 保持较高的多样性。在 SSA 中, 采用随机变量生成初始种群, 这种方法遍历性较低, 个体分布不均 匀, 一定程度上影响了算法的寻优性能。
混沌变量具有遍历性和规律性, 常被应用于优化问题中。Logistic 映射和 Tent 映射是最常用的混沌模型, 但是两者在迭代区域内 的折叠次数有限, 且存在有理数不动点。文献[13]提出的 ICMIC 映射是一种映射折叠次数无线的混沌模型, 相较于 Logistic 映射和 Tent 映射, 该映射具有遍历均匀和收敛较快等优点。因此本文采用 ICMIC 映射初始化 SSA 种群, ICMIC 映射的数学表达式如下:
{ z n + 1 = sin ( α π z n ) , α ∈ ( 0 , + ∞ ) − 1 ≤ z n ≤ 1 , z n ≠ 0 (5) \left\{\begin{array}{c} z_{n+1}=\sin \left(\frac{\alpha \pi}{z_n}\right), \alpha \in(0,+\infty) \\ -1 \leq z_n \leq 1, z_n \neq 0 \end{array}\right. \tag{5} {zn+1=sin(znαπ),α∈(0,+∞)−1≤zn≤1,zn=0(5)
将 ICMIC 混沌映射到搜索空间中, 得到种群初始位置:
x i = x l b + ( x u b − x l b ) ⋅ 1 + z i 2 (6) x_i=x_{l b}+\left(x_{u b}-x_{l b}\right) \cdot \frac{1+z_i}{2} \tag{6} xi=xlb+(xub−xlb)⋅21+zi(6)
其中 x l b 、 x u b x_{l b} 、 x_{u b} xlb、xub 分别为每个个体在各维度的上下界, z i z_i zi 为式(5)产生的混沌序列。
2.2 螺旋探索策略
在 SSA 中, 发现者作为优势群体, 在解空间区域内进行大范围搜索受食; 跟随者受发现者引领, 在发现者周围进行详细搜索。 可见, 发现者的全局勘探能力更强, 跟随者则更擅长局部开发。实际上, 由公式(2)可知, 当 R 2 < S T R_2<S T R2<ST 时, 发现者的每一维都会以指数 形式减小, 导致搜索范围不够, 容易陷入局部最优, 造成收玫精度降低。
飞蛾是一种类似于蝴蝶的昆虫, 在夜间飞行时采用横向定位机制来导航。在这种机制中, 飞蛾通过保持相对于月 亮的固定角度飞行。由于月亮离飞蛾很远, 飞蛾利用这种近似的平行光可以保持直线飞行。但实际中存在很多人造光源, 这种光源 距离飞蛾非常近, 当飞蛾与人造光源保持固定角度飞行时, 就会导致横向定位机制失效, 产生围绕光源螺旋式的飞行路径。受飞蛾 螺旋飞行的启发, 本文在发现者位置更新方式中加入一种螺旋探索因子, 使得发现者拥有多种搜索路径来更好的调整自身位置, 从 而提高算法的全局搜索性能。具备螺旋探索的发现者位置更新公式如下:
x i d t + 1 = { z ⋅ x i d t ⋅ exp ( − i / α T ) , R 2 < S T x i d t + Q ⋅ L ⋅ z , R 2 ≥ S T z = exp ( b × p ) ⋅ cos ( 2 π p ) (7) x_{i d}^{t+1}=\left\{\begin{array}{c} z \cdot x_{i d}^t \cdot \exp (-i / \alpha T), R_2<S T \\ x_{i d}^t+Q \cdot L \cdot z, R_2 \geq S T \\ z=\exp (b \times p) \cdot \cos (2 \pi p) \end{array}\right. \tag{7} xidt+1=⎩ ⎨ ⎧z⋅xidt⋅exp(−i/αT),R2<STxidt+Q⋅L⋅z,R2≥STz=exp(b×p)⋅cos(2πp)(7)
式中: z z z 为螺旋探索因子, b b b 为螺旋形状常数, p p p 表示路径系数, 为 [ − 1 , 1 ] [-1,1] [−1,1] 中的随机数。融入螺旋探索后,发现者将以螺旋形式在搜索空间中搜索,扩展了发现者探索未知区域的能力,使算法跳出局部最优的可能性增加,有效提高算法的全局搜索性能。
2.3 基于精英差分和随机反向的自适应混合变异
基本 SSA 算法最优个体的更新依赖于每次迭代种群的更新, 即每次迭代后, 由当前适应度最好的个体替代最优个体, 算 法没有主动对最优个体进行扰动。若最优个体陷入局部极值空间, 则会导致算法难以跳出局部最优, 出现早熟收敛现象。为 了加快算法收玫速度、改善算法跳出局部最优的能力, 本文提出一种自适应混合变异策略, 在每次迭代后对最优麻雀进行扰 动。
(1) 精英差分变异
差分进化是利用当前种群的距离和方向信息指引搜索的一种进化算法 [ 14 , 15 ] [14,15] [14,15] 。该算法在变异阶段, 通过随机选择的两个个体的差向量加权后与第三个个体相加来产生新个体, 即:
x i ′ = x i + F ( x rand 1 − x rand 2 ) (8) x_i^{\prime}=x_i+F\left(x_{\text {rand } 1}-x_{\text {rand } 2}\right) \tag{8} xi′=xi+F(xrand 1−xrand 2)(8)
式中, F ∈ [ 0 , 2 ] F \in[0,2] F∈[0,2] 为缩放因子。文献[16]指出, 缩放因子 F F F 太大时, 算法近似随机搜索, 寻优精度降低; 当 F F F 太小时, 种群多 样性下降很快, 算法容易陷入局部最优。
通过上述分析可知, 差分进化受参数 F F F 的影响较大, 且随机选择差分个体具有盲目性。考虑到精英个体包含更多有益 信息, 为了加强精英个体间的信息交流, 本文提出一种精英差分变异策略, 公式如下:
x best ′ = r 1 ( x 2 − x best ) + r 2 ( x 3 − x best ) (9) x_{\text {best }}{ }^{\prime}=r_1\left(x_2-x_{\text {best }}\right)+r_2\left(x_3-x_{\text {best }}\right)\tag{9} xbest ′=r1(x2−xbest )+r2(x3−xbest )(9)
式中, r 1 、 r 2 r_1 、 r_2 r1、r2 为 ( 0 , 1 ) (0,1) (0,1) 的随机数。 x best x_{\text {best }} xbest 为最优解, x 2 x_2 x2 为次优解, x 3 x_3 x3 为第三优解。
式(9)中舍弃了缩放因子, 不需要考虑参数选择对算法性能的影响; 精英解的引入, 使得算法的进化方向更明确, 不再 具有盲目性。在算法迭代后, 通过式(9)产生新解, 能够提升算法在当前最优解附近发现全局最优解的可能性。
(2) 随机反向学习
反向学习是 Tizhoosh [ 17 ] { }^{[17]} [17] 提出的一种优化策略, 该策略通过计算当前解在搜索空间中的反向解来扩大搜索范围。一般反向 学习的数学表达式如下:
x j ′ = x l b + x u b − x j (10) x_j^{\prime}=x_{l b}+x_{u b}-x_j\tag{10} xj′=xlb+xub−xj(10)
文献[18]表明一般反向学习在算法迭代前期作用显著, 而在算法迭代后期作用不明显。因为在迭代后期, 大部分个体集 中在小范围区域, 反向解所在区域也集中于此, 所以通过一般反向学习的方式很难跳出当前极值区域。针对该问题, 本文提 出一种新的随机反向学习策略, 通过在一般反向学习中引入随机因子, 进一步扩展反向解位置, 增强算法跳出局部极值的能 力。随机反向学习的公式如下:
x j ′ = k 1 x l b + k 2 ( x u b − x j ) (11) x_j^{\prime}=k_1 x_{l b}+k_2\left(x_{u b}-x_j\right) \tag{11} xj′=k1xlb+k2(xub−xj)(11)
式中, k 1 k_1 k1 和 k 2 k_2 k2 为随机因子, 均为 0 ∼ 1 0 \sim 1 0∼1 之间的随机数。
(3) 自适应混合变异
SSA 算法求得全局最优解的关键是算法能否有效跳出局部最优。若只是加入单一的变异策略, 则在加快收玫速度的同 时也会导致算法陷入局部最优。因此, 本文将精英差分变异和随机反向学习融入到 SSA 中, 利用判定系数 r r r 对最优麻雀位 置进行混合变异扰动。如公式(12)所示, 当 r < 0.5 r<0.5 r<0.5 时, 采用精英差分策略进行小范围扰动; 当 r ⩾ 0.5 r \geqslant 0.5 r⩾0.5 时, 采用随机反向策略 进行大范围扰动。两种策略相辅相成, 促使算法跳出局部极值空间, 在求解不同优化问题时的适应性更强。
x best ′ = { r 1 ( x 2 − x best ) + r 2 ( x 3 − x best ) , r < 0.5 k 1 x l b + k 2 ( x u b − x best ) , r ≥ 0.5 (12) x_{\text {best }}{ }^{\prime}=\left\{\begin{array}{c} r_1\left(x_2-x_{\text {best }}\right)+r_2\left(x_3-x_{\text {best }}\right), r<0.5 \\ k_1 x_{l b}+k_2\left(x_{u b}-x_{\text {best }}\right), r \geq 0.5 \end{array}\right. \tag{12} xbest ′={r1(x2−xbest )+r2(x3−xbest ),r<0.5k1xlb+k2(xub−xbest ),r≥0.5(12)
其中 r r r 为 0 到 1 的随机数。
由于变异后的麻雀位置不一定由于原始位置, 因此, 采用贪婪策略, 选择是否将原始解用变异解替代, 即只有当变异解 的适应度值优于原始解时才进行替换, 公式如下:
x ′ = { x best ′ , f ( x best ′ ) < f ( x best ) x best , f ( x best ′ ) ≥ f ( x best ) (13) x^{\prime}=\left\{\begin{array}{l} x_{\text {best }}^{\prime}, f\left({x_{\text {best }}}^{\prime}\right)<f\left(x_{\text {best }}\right) \\ x_{\text {best }}, f\left(x_{\text {best }}^{\prime}\right) \geq f\left(x_{\text {best }}\right) \end{array}\right. \tag{13} x′={xbest ′,f(xbest ′)<f(xbest )xbest ,f(xbest ′)≥f(xbest )(13)
其中 x ′ x^{\prime} x′ 为贪婪选择后最优麻雀的位置。
SHSSA 算法:
输入: 搜索空间和目标函数
输出: 最优解
01)参数初始化 (种群规模 N N N, 发现者 P D P D PD 及侦察者 S D S D SD 比例, 侦察预警值 S T S T ST, 最大迭代次数 T T T 等)
02) 根据式(6)生成初始种群
- 计算初始适应度值, 并排序, 找出当前最优和最劣适应度的麻雀位置
- for i = 1 : T i=1: T i=1:T
- for j = 1 : P D ∗ N j=1: P D^* N j=1:PD∗N
- p = − 1 + 2 ∗ \quad p=-1+2 * p=−1+2∗ rand
07)根据式(7)计算发现者位置 - end for
- for j = P D ∗ N : N j=P D^* N: N j=PD∗N:N
10)根据式(3)计算跟随者位置 - end for
12)在种群中随机选取 S D ∗ N S D^* N SD∗N 只麻雀作为侦察者 - for j = 1 : S D ∗ N j=1: S D^* N j=1:SD∗N
14)根据式(4)计算侦察者位置 - end for
- 计算每只个体适应度值并排序, 找到当前最优个体和最劣个体
17)根据式(12)计算当前最优个体的变异位置
18)根据式(13)选择是否替换最优麻雀位置 - end for
3.实验结果
4.参考文献
[1]陈功,曾国辉,黄勃,刘瑾.螺旋探索与自适应混合变异的麻雀搜索算法[J/OL].小型微型计算机系统:1-12[2021-12-24].http://kns.cnki.net/kcms/detail/21.1106.tp.20211214.1828.006.html.
5.Matlab代码
6.Python代码
螺旋探索与自适应混合变异的麻雀搜索-附代码相关推荐
- 螺旋探索与自适应混合变异的麻雀搜索算法
文章目录 一.理论基础 1.基本麻雀搜索算法 2.螺旋探索与自适应混合变异的麻雀搜索算法 (1)ICMIC混沌初始化种群 (2)螺旋探索策略 (3)基于精英差分和随机反向的自适应混合变异 (4)SHS ...
- 混合策略改进的麻雀搜索算法-附代码
混合策略改进的麻雀搜索算法 文章目录 混合策略改进的麻雀搜索算法 1.麻雀优化算法 2. 改进麻雀算法 2.1 Circle 混沌初始化策略 2.2 蝴蝶优化策略 2.3 逐维变异策略 3.实验结果 ...
- 基于自适应t分布的麻雀搜索算法-附代码
基于自适应t分布的麻雀搜索算法 文章目录 基于自适应t分布的麻雀搜索算法 1.自适应t分布策略 2.基于自适应t分布策略的麻雀搜索算法 3.算法结果: 4.Matlab 5.Python 1.自适应t ...
- 智能优化算法:麻雀搜索算法-附代码
2020智能优化算法:麻雀搜索算法 文章目录 2020智能优化算法:麻雀搜索算法 1.算法原理 2.算法结果 3.参考文献 4.Matlab代码 5.Python代码 摘要:麻雀搜索算法(Sparro ...
- 基于莱维飞行扰动策略的麻雀搜索算法-附代码
基于莱维飞行扰动策略的麻雀搜索算法 文章目录 基于莱维飞行扰动策略的麻雀搜索算法 1.麻雀优化算法 2. 改进麻雀算法 2.1 莱维飞行搜索机制 2.2 莱维飞行扰动策略 2.3 初始化混沌搜索机制 ...
- 混合正弦余弦算法和 Lévy飞行的麻雀算法-附代码
混合正弦余弦算法和 Lévy飞行的麻雀算法 文章目录 混合正弦余弦算法和 Lévy飞行的麻雀算法 1.麻雀搜索算法 2. 改进麻雀算法 2.1 融合正弦余弦算法(SCA)思想 2.2 Lévy飞行策略 ...
- 融合柯西变异和反向学习的改进麻雀算法-附代码
融合柯西变异和反向学习的改进麻雀算法 文章目录 融合柯西变异和反向学习的改进麻雀算法 1.麻雀搜索算法 2.融合柯西变异和反向学习的改进麻雀算法(ISA) 2.1 Sine 初始化种群 2.2 动态自 ...
- 柯西变异和自适应权重优化的蝴蝶算法-附代码
融合正弦余弦和无限折叠迭代混沌映射的蝴蝶优化算法 文章目录 融合正弦余弦和无限折叠迭代混沌映射的蝴蝶优化算法 1.蝴蝶优化算法 2. 改进蝴蝶优化算法 2.1 柯西变异 2.2 自适应权重 2.3动态 ...
- 融合多策略的改进麻雀搜索算法-附代码
融合多策略的改进麻雀搜索算法 文章目录 融合多策略的改进麻雀搜索算法 1.麻雀优化算法 2. 改进麻雀算法 2.1 正弦搜索策略 2.2 多样性变异处理 3.实验结果 4.参考文献 5.Matlab代 ...
最新文章
- javascript正则表达式介绍
- 关于java static 关键字
- python之穿越火线游戏代码_Python 大作业之五子棋游戏(附代码)
- 云小课 | 华为云KYON:网段零修改上云,简单又好用
- VMware vCenter Server Appliance 模板部署
- 这款IDEA插件刷爆了技术群,群友:这用起来真酸爽~
- 莽荒天下:玩家闯昆仑插旗邀战,第5张照片亮了
- a超链接锚点的设置和应用 三国演义
- 一个奇鸽船新版本 v1.32
- 交换机上的指示灯狂闪
- 51单片机键盘、矩阵键盘松手检测
- win7右键计算机死机,win7系统右键死机的解决方法
- 建站分享:调整WordPress自带标签云参数
- 数据中心拥塞控制集中式架构Fastpass之深度剖析
- 使用Karabiner为Mac内置键盘、HHKB进行映射
- python123格式化输出_python 字符串格式化输出 %d,%s及 format函数
- UCS(统一计算系统)[1]
- oracle数据库常用sql整理
- android远程shell命令行,Android ADB使用之详细篇(五)执行Shell命令
- PAT - 1036 跟奥巴马一起编程
热门文章
- 二十四节气-春分。昼夜平分,日渐长~
- 【5G科普】只要9张图,看懂什么是5G
- t20171215a1BILL的账单
- 根据业绩确定提成比例并计算提成
- github软件安装到linux,Ubuntu下Git与Github的安装使用
- 微博超话显示服务器有点累,刚才手机刷微博,刷新了一下首页... - @菜菜_fz 的微博精选 - 微博国际站...
- 面试专题:QTrade(苹果树)面试复盘
- 人工智能正在重塑生产方式、优化产业结构、提升生产效率、赋能千行百业
- cad用键盘放大缩小_CAD的放大缩小快捷键是什么?
- 讲不明白的成语故事(轻松一笑)