采用动态权重和概率扰动策略改进的灰狼优化算法-附代码

本文主要是介绍采用动态权重和概率扰动策略改进的灰狼优化算法-附代码,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

采用动态权重和概率扰动策略改进的灰狼优化算法

文章目录

  • 采用动态权重和概率扰动策略改进的灰狼优化算法
    • 1.灰狼优化算法
    • 2. 改进灰狼优化算法
      • 2.1 引入权值因子
      • 2. 2 概率扰动策略
    • 3.实验结果
    • 4.参考文献
    • 5.Matlab代码
    • 6.Python代码

摘要: 针对基本灰狼优化(GWO)算法存在易陷入局部最优,进而导致搜索精度偏低的问题,提出了一种改进的GWO(IGWO)算法。一方面,通过引入由 GWO 算法系数向量构成的权值因子,动态调整算法的位置向量更新方程;另一方面,通过采用概率扰动策略,增强算法迭代后期的种群多样性,从而提升算法跳出局部最优的能力。

1.灰狼优化算法

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

2. 改进灰狼优化算法

2.1 引入权值因子

基本 GWO 算法通过计算三个最佳灰狼位置的平均值来更新灰狼位置,这种策略并没有考虑三头狼在群体狩猎活动中的贡献度问题。由于 GWO 算法的 狼 α 并不一定是全局最优解,这时在不断迭代中,随着其余狼 ω 向这三头狼逼近,这就容易陷入局部最优 。本文从最佳灰狼贡献问题角度设计一种权重因子,用来提升GWO算法的寻优能力。由于GWO算法中的系数向量 A 和 C 是动态随机的,而权重因子也应该随着寻优过程非线性调整变化,为此本文设计的权重因子来源于系数向量 A A A C C C 。在基本 G W O \mathrm{GWO} GWO 算法中, A 1 、 A 2 、 A 3 A_{1} 、 A_{2} 、 A_{3} A1A2A3 以及 C 1 C_{1} C1 C 2 、 C 3 \boldsymbol{C}_{2} 、 \boldsymbol{C}_{3} C2C3 是不相同的,在这里为了保证权重因子更新的相关联 性, 设计 A 1 、 A 2 \boldsymbol{A}_{1} 、 \boldsymbol{A}_{2} A1A2 A 3 \boldsymbol{A}_{3} A3 相同, C 1 、 C 2 \boldsymbol{C}_{1} 、 \boldsymbol{C}_{2} C1C2 C 3 \boldsymbol{C}_{3} C3 相同, 如下:
A 1 = A 2 = A 3 = 2 a ⋅ r 1 − a C 1 = C 2 = C 3 = 2 r 2 \begin{aligned} &\boldsymbol{A}_{1}=\boldsymbol{A}_{2}=\boldsymbol{A}_{3}=2 a \cdot \boldsymbol{r}_{1}-a \\ &\boldsymbol{C}_{1}=\boldsymbol{C}_{2}=\boldsymbol{C}_{3}=2 \boldsymbol{r}_{2} \end{aligned} A1=A2=A3=2ar1aC1=C2=C3=2r2
那么, 设计的位置向量权重因子分别为:
w 1 = ∣ A 1 ⋅ C 1 ∣ ∣ A 1 ⋅ C 1 ∣ + ∣ A 2 ⋅ C 2 ∣ + ∣ A 3 ⋅ C 3 ∣ = 1 3 w 2 = ∣ A 2 ⋅ C 2 ∣ w 1 + ∣ A 2 ⋅ C 2 ∣ + ∣ A 3 ⋅ C 3 ∣ = 3 ∣ A 1 ⋅ C 1 ∣ 1 + 6 ∣ A 1 ⋅ C 1 ∣ \begin{aligned} &w_{1}=\frac{\left|\boldsymbol{A}_{1} \cdot \boldsymbol{C}_{1}\right|}{\left|\boldsymbol{A}_{1} \cdot \boldsymbol{C}_{1}\right|+\left|\boldsymbol{A}_{2} \cdot \boldsymbol{C}_{2}\right|+\left|\boldsymbol{A}_{3} \cdot \boldsymbol{C}_{3}\right|}=\frac{1}{3} \\ &w_{2}=\frac{\left|\boldsymbol{A}_{2} \cdot \boldsymbol{C}_{2}\right|}{w_{1}+\left|\boldsymbol{A}_{2} \cdot \boldsymbol{C}_{2}\right|+\left|\boldsymbol{A}_{3} \cdot \boldsymbol{C}_{3}\right|}=\frac{3\left|\boldsymbol{A}_{1} \cdot \boldsymbol{C}_{1}\right|}{1+6\left|\boldsymbol{A}_{1} \cdot \boldsymbol{C}_{1}\right|} \end{aligned} w1=A1C1+A2C2+A3C3A1C1=31w2=w1+A2C2+A3C3A2C2=1+6A1C13A1C1
w 3 = ∣ A 3 ⋅ C 3 ∣ w 1 + w 2 + ∣ A 3 ⋅ C 3 ∣ = 18 ∣ A 1 ⋅ C 1 ∣ 2 + 3 ∣ A 1 ⋅ C 1 ∣ 18 ∣ A 1 ⋅ C 1 ∣ 2 + 18 ∣ A 1 ⋅ C 1 ∣ + 1 \begin{aligned} w_{3}=& \frac{\left|\boldsymbol{A}_{3} \cdot \boldsymbol{C}_{3}\right|}{w_{1}+w_{2}+\left|\boldsymbol{A}_{3} \cdot \boldsymbol{C}_{3}\right|}=\\ & \frac{18\left|\boldsymbol{A}_{1} \cdot \boldsymbol{C}_{1}\right|^{2}+3\left|\boldsymbol{A}_{1} \cdot \boldsymbol{C}_{1}\right|}{18\left|\boldsymbol{A}_{1} \cdot \boldsymbol{C}_{1}\right|^{2}+18\left|\boldsymbol{A}_{1} \cdot \boldsymbol{C}_{1}\right|+1} \end{aligned} w3=w1+w2+A3C3A3C3=18A1C12+18A1C1+118A1C12+3A1C1
因此,得到新的位置更新公式为:
X ( t + 1 ) = w 1 X 1 + w 2 X 2 + w 3 X 3 3 \boldsymbol{X}(t+1)=\frac{w_{1} \boldsymbol{X}_{1}+w_{2} \boldsymbol{X}_{2}+w_{3} \boldsymbol{X}_{3}}{3} X(t+1)=3w1X1+w2X2+w3X3

2. 2 概率扰动策略

随着 GWO 算法迭代次数的不断增加,算法寻优逐渐趋于收敛,一旦收敛于局部最优很难跳出。在算法种群更新中加入扰动机制可以有效提升算法跳出局部最优的能力 。本文设计带有一定概率的扰动来增强算法寻优后期的种群多样性,为摆脱局部收敛创造有利条件。对于概率扰动策略,在以往的一些优化算法中有所研究,如胡宏梅等 提出采用随机概率扰动方式作为基本粒子群算法的全局更新条件,从而增强全局寻优区域的搜索能力,但它采用的是模拟退火算法的退火概率,计算过于复杂;张伟提出在差分进化算法中运用小概率扰动操作来增强种群的多样性,但它采用固定的概率形式,无法在不同迭代过程中充分发挥扰动策略。为此,本文设计一种简便且高效的扰动概率公式为:
P = ( G − 1 ) e ( t − 1 ) / T 4 G P=\frac{(G-1) \mathrm{e}^{(t-1) / T}}{4 G} P=4G(G1)e(t1)/T
其中: P P P 为扰动概率; G G G 为优化问题的维度; T T T 为最大迭代次 数。算法迭代初期, 扰动概率较小, 以便算法快速寻找全局最 优解; 算法迭代后期, 扰动概率增加, 增强了种群多样性。一般 来说 T T T 是一个较大的常数, 当算法迭代至后期 t → T t \rightarrow T tT, 扰动概 率 P = ( 1 − 1 / G ) e ( t / T − 1 / T ) 4 → ( 1 − 1 / G ) e 4 P=\frac{(1-1 / G) \mathrm{e}^{(t / T-1 / T)}}{4} \rightarrow \frac{(1-1 / G) \mathrm{e}}{4} P=4(11/G)e(t/T1/T)4(11/G)e 。灰狼个体进行扰动 的公式为:
M ( t + 1 ) = l b + r 3 ⋅ ( u b − l b ) ; r 3 < P \boldsymbol{M}(t+1)=\boldsymbol{l b}+\boldsymbol{r}_{3} \cdot(\boldsymbol{u} \boldsymbol{b}-\boldsymbol{l b}) ; \quad \boldsymbol{r}_{3}<P M(t+1)=lb+r3(ublb);r3<P
其中: M \boldsymbol{M} M 为扰动后的个体; l b \boldsymbol{l b} lb 为灰狼个体位置的下界; u b \boldsymbol{u} \boldsymbol{b} ub 为灰 狼个体位置的上界; ; r 3 ; \boldsymbol{r}_{3} ;r3 [ 0 , 1 ] [0,1] [0,1] 之间取值的随机向量。扰动后 的灰狼个体基于贪婪机制进行更新, 更新公式为:
X ( t + 1 ) = { M ( t + 1 ) , f ( M ( t + 1 ) ) < f ( X ( t + 1 ) ) X ( t + 1 ) , 其他  \boldsymbol{X}(t+1)= \begin{cases}\boldsymbol{M}(t+1), & f(\boldsymbol{M}(t+1))<f(\boldsymbol{X}(t+1)) \\ \boldsymbol{X}(t+1), & \text { 其他 }\end{cases} X(t+1)={M(t+1),X(t+1),f(M(t+1))<f(X(t+1)) 其他 
其中: f ( M ( t + 1 ) ) f(\boldsymbol{M}(t+1)) f(M(t+1)) f ( X ( t + 1 ) ) f(\boldsymbol{X}(t+1)) f(X(t+1)) 分别表示第 t + 1 t+1 t+1 代扰动个 体 M \boldsymbol{M} M 和灰狼个体 X \boldsymbol{X} X 的目标函数值。

3.实验结果

请添加图片描述

4.参考文献

[1]陈闯,Ryad Chellali,邢尹.采用动态权重和概率扰动策略改进的灰狼优化算法[J].计算机应用,2017,37(12):3493-3497+3508.

5.Matlab代码

6.Python代码

这篇关于采用动态权重和概率扰动策略改进的灰狼优化算法-附代码的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/838753

相关文章

go动态限制并发数量的实现示例

《go动态限制并发数量的实现示例》本文主要介绍了Go并发控制方法,通过带缓冲通道和第三方库实现并发数量限制,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面... 目录带有缓冲大小的通道使用第三方库其他控制并发的方法因为go从语言层面支持并发,所以面试百分百会问到

小白也能轻松上手! 路由器设置优化指南

《小白也能轻松上手!路由器设置优化指南》在日常生活中,我们常常会遇到WiFi网速慢的问题,这主要受到三个方面的影响,首要原因是WiFi产品的配置优化不合理,其次是硬件性能的不足,以及宽带线路本身的质... 在数字化时代,网络已成为生活必需品,追剧、游戏、办公、学习都离不开稳定高速的网络。但很多人面对新路由器

Python实现MQTT通信的示例代码

《Python实现MQTT通信的示例代码》本文主要介绍了Python实现MQTT通信的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一... 目录1. 安装paho-mqtt库‌2. 搭建MQTT代理服务器(Broker)‌‌3. pytho

MySQL进行数据库审计的详细步骤和示例代码

《MySQL进行数据库审计的详细步骤和示例代码》数据库审计通过触发器、内置功能及第三方工具记录和监控数据库活动,确保安全、完整与合规,Java代码实现自动化日志记录,整合分析系统提升监控效率,本文给大... 目录一、数据库审计的基本概念二、使用触发器进行数据库审计1. 创建审计表2. 创建触发器三、Java

MySQL深分页进行性能优化的常见方法

《MySQL深分页进行性能优化的常见方法》在Web应用中,分页查询是数据库操作中的常见需求,然而,在面对大型数据集时,深分页(deeppagination)却成为了性能优化的一个挑战,在本文中,我们将... 目录引言:深分页,真的只是“翻页慢”那么简单吗?一、背景介绍二、深分页的性能问题三、业务场景分析四、

Linux进程CPU绑定优化与实践过程

《Linux进程CPU绑定优化与实践过程》Linux支持进程绑定至特定CPU核心,通过sched_setaffinity系统调用和taskset工具实现,优化缓存效率与上下文切换,提升多核计算性能,适... 目录1. 多核处理器及并行计算概念1.1 多核处理器架构概述1.2 并行计算的含义及重要性1.3 并

一文详解SpringBoot中控制器的动态注册与卸载

《一文详解SpringBoot中控制器的动态注册与卸载》在项目开发中,通过动态注册和卸载控制器功能,可以根据业务场景和项目需要实现功能的动态增加、删除,提高系统的灵活性和可扩展性,下面我们就来看看Sp... 目录项目结构1. 创建 Spring Boot 启动类2. 创建一个测试控制器3. 创建动态控制器注

Java中的雪花算法Snowflake解析与实践技巧

《Java中的雪花算法Snowflake解析与实践技巧》本文解析了雪花算法的原理、Java实现及生产实践,涵盖ID结构、位运算技巧、时钟回拨处理、WorkerId分配等关键点,并探讨了百度UidGen... 目录一、雪花算法核心原理1.1 算法起源1.2 ID结构详解1.3 核心特性二、Java实现解析2.

Java中调用数据库存储过程的示例代码

《Java中调用数据库存储过程的示例代码》本文介绍Java通过JDBC调用数据库存储过程的方法,涵盖参数类型、执行步骤及数据库差异,需注意异常处理与资源管理,以优化性能并实现复杂业务逻辑,感兴趣的朋友... 目录一、存储过程概述二、Java调用存储过程的基本javascript步骤三、Java调用存储过程示

Visual Studio 2022 编译C++20代码的图文步骤

《VisualStudio2022编译C++20代码的图文步骤》在VisualStudio中启用C++20import功能,需设置语言标准为ISOC++20,开启扫描源查找模块依赖及实验性标... 默认创建Visual Studio桌面控制台项目代码包含C++20的import方法。右键项目的属性: