VMD的16种优化算法

最后更新于:2024-04-07 21:42:02

该代码实现了VMD分解算法的16种寻优,另外有8种熵特征可用作适应度函数。

该代码为几种封装函数的集合调用代码,其中涵盖了本网站中的16种优化算法合集、VMD分解画图、熵特征提取。

一、代码运行环境

MATLAB2020以上版本。

二、程序介绍

注:图标代表该m文件为脚本文件,可以直接运行;图标代表函数文件,在没有输入变量的情况下无法直接运行。更详细的解释可以看这里

1.OAfuns文件夹

第三方的优化算法代码库,是实现寻优的底层代码。该文件夹中的文件不需要修改。当移植代码时,该文件夹需要随其他文件一起移植。可以调用的优化算法包括:

1.麻雀搜索算法(SSA)、
2.灰狼优化算法(GWO)、
3.鲸鱼优化算法(WOA)、
4.蚁狮优化算法(ALO)、
5.飞蛾扑火优化算法(MFO)、
6.蜻蜓优化算法(DA)、
7.多元宇宙优化算法(MVO)、
8.正弦余弦算法(SCA)、
9.樽海鞘优化算法(SSA2)、
10.海洋捕食者算法(MPA)、
11.算术优化算法(AOA)、
12.小龙虾优化算法(COA)、
13.粒子群优化算法(PSO)、
14.非线性权重粒子群优化算法(IPSO)、
15.运动编码粒子群优化算法(MPSO)、
16.基于非对称时变加速系数调整策略的粒子群算法(TACPSO)。

2.demoOA_VMD.m文件

通用优化算法框架函数kOptimizationAlgorithm进行VMD分解算法寻优的脚本文件,可以直接运行。只需要设置寻优相关的参数即可运行,运行该文件,将绘制以下图片:

另外在命令行窗口将会打印:

3.kOptimizationAlgorithm.m文件

通用优化算法框架,该代码提供了多种优化算法的接口。用户可以根据需要选择不同的算法来解决特定的优化问题。其中包含了16种寻优算法的集合调用,只需要修改入口参数中选用的寻优算法类型即可。

需注意该函数文件不能直接运行,需参照demoOA_VMD的演示案例进行调用。

function [Best_pos,Best_score,curve] = kOptimizationAlgorithm(OAmethod, dataforFitness, lb, ub, dim, pop, Max_iteration)
% 通用优化算法框架,该代码提供了多种优化算法的接口。用户可以根据需要选择不同的算法来解决特定的优化问题。
% 本代码地址及代码说明:http://khsci.com/docs/index.php/2024/03/17/oa/
% 算法讲解地址:https://zhuanlan.zhihu.com/p/687417410
% 输入参数:
% OAmethod:字符串,指定使用的优化算法。可选方法包括:(截至2024.3.16,共16种方法,后续更新见手册网页:)
%           'SSA' - Sparrow Search Algorithm (麻雀搜索算法)
%           'GWO' - Grey Wolf Optimizer (灰狼优化算法)
%           'WOA' - Whale Optimization Algorithm (鲸鱼优化算法)
%           'ALO' - Ant Lion Optimizer (蚁狮优化算法)
%           'MFO' - Moth Flame Optimizer (飞蛾扑火优化算法)
%           'DA'  - Dragonfly Algorithm (蜻蜓优化算法)
%           'MVO' - Multi-Verse Optimizer (多元宇宙优化算法)
%           'SCA' - Sine Cosine Algorithm (正弦余弦算法)
%           'SSA2'- Salp Swarm Algorithm (樽海鞘优化算法)
%           'MPA' - Marine Predator Algorithm (海洋捕食者算法)
%           'AOA' - Arithmetic Optimization Algorithm (算术优化算法)
%           'COA' - Crayfish Optimization Algorithm (小龙虾优化算法)
%           'PSO' - Particle Swarm Optimization (粒子群优化算法)
%           'IPSO'- 非线性权重粒子群优化算法
%           'MPSO'- 运动编码粒子群优化算法
%           'TACPSO'- 基于非对称时变加速系数调整策略的粒子群算法
% dataforFitness:数据集,用于评估优化问题中目标函数的适应度。
% lb:数组,定义了每个参数的下限。
% ub:数组,定义了每个参数的上限。
% dim:整数,优化问题的维度,即需要优化的参数数量。
% pop:整数,优化算法中的种群数量。比如在GWO算法中代表狼群数量
% Max_iteration:整数,优化算法的最大迭代次数。
%
% 输出参数:
% Best_pos:数组,表示获得的最佳参数位置。
% Best_score:浮点数,最佳位置对应的适应度值。
% curve:数组,记录了每次迭代最佳适应度值的变化,用于绘制收敛曲线。

4.funFitness.m文件

适应度函数,此代码是已经改好的VMD适应度函数代码,使用排列熵的均值作为适应度函数。

大家可以修改自己想要的熵特征类型。

%% 适应度函数,此代码需要根据应用场景做适应性修改
function [fitness] = funFitness(x,dataforFitness)
% 输入:
% x是待优化参数,为数组。x(1)是第一个待优化参数,x(2)是第二个,以此类推。
% dataforFitness为结构体,表示导入到适应度函数的参数,按照数据实际情况设置。可以没有
% 输出:
% fitness是适应度函数

5.kVMD.m文件

整合版VMD函数,运行后可以实现VMD分解,不画图。函数参数说明:

function [imf,CenFs]  = kVMD(data,FsOrT, alpha, K, tol)
% 整合版VMD函数,整合了第三方VMD和MATLAB自带工具箱的VMD分解方法
% 默认设置下按照MATLAB自带库进行
% 并且统一输出格式,配合后续进行希尔伯特-黄变换等无缝衔接
% 输入:
% data:待分解的数据(一维)
% FsOrT:采样频率或采样时间向量,如果为采样频率,该变量输入单个值;如果为时间向量,该变量为与y相同长度的一维向量。如果未知采样频率,可设置为1
% alpha   - 惩罚因子
% K       - 指定分解模态数
% tol     - 收敛容差,是优化的停止准则之一,可以取 1e-6~5e-6

% 输出:
% imf:内涵模态分量,统一为n*m格式,其中n为模态数,m为数据点数。例如 imf(1,:)即IMF1,imf(end,:)即为残差
% 注意,为了与其他“类EMD”方法分解出来的imf分量保持一致,本程序内将imf排序进行了翻转
% 即保证imf排列是从高频向低频排列
% CenFs:即CentralFrequencies,各imf分量的中心频率

% 注意:使用两种库所得到的imf结果会存在差异,这是由两个库自身算法差异导致的,属于正常现象。

6.pVMD.m文件

使用VMD分解方法,绘制分解后各个模态的图像。

function [imf,CenFs] = pVMD(y,FsOrT, alpha, K, tol)
% 画信号VMD分解图
% 输入:
% data:待分解的数据(一维)
% FsOrT:采样频率或采样时间向量,如果为采样频率,该变量输入单个值;如果为时间向量,该变量为与y相同长度的一维向量。如果未知采样频率,可设置为1
% alpha   - 惩罚因子
% K       - 指定分解模态数
% tol     - 收敛容差,是优化的停止准则之一,可以取 1e-6~5e-6

% 输出:
% imf:内涵模态分量,统一为n*m格式,其中n为模态数,m为数据点数。例如 imf(1,:)即IMF1,imf(end,:)即为残差
% 注意,为了与其他“类EMD”方法分解出来的imf分量保持一致,本程序内将imf排序进行了翻转
% 即保证imf排列是从高频向低频排列
% CenFs:即CentralFrequencies,各imf分量的中心频率

7.testGenFeaEn.m文件

特征提取函数genFeatureEn的测试文件。在修改funFitness.m文件中熵特征提取类型时,可以参考该文件中的写法进行修改。

三、快速开始

1.运行测试脚本

先在MATLAB里打开下载好的文件夹,然后运行demoOA_VMD.m程序,程序运行完毕后如果没报错,且正常画出适应度函数收敛曲线图像,则说明运行环境正常,程序正确。

2.修改仿真数据/导入数据

复制一个demoOA_VMD.m的文件副本,在这个副本里做如下修改:

(1)第一种情况,你可能想要对你自己要研究的仿真数据进行滤波测试,此时你需要对demoOA_VMD.m 脚本文件中的第0小节内容进行修改替换即可。需要注意的是,请最好保持变量名的一致,即待寻优信号命名为x,x应该是一维数据。此时数据替换完成。

(2)第二种情况,你可能是想对一段真实采集的数据进行分解,此时需要根据你的文件类型的不同(excel,txt,csv等),将数据导入MATLAB的方法有所不同。同学们可以看博主针对常用文件的导入方法的这个教程,教程上未包含的数据类型,大家可以再参考这个文档导入完成后请将这个待分解信号命名为x

3.修改熵特征类型(可选)

打开funFitness.m文件,现在代码选择的熵特征是PeEn,大家可以选择其他类型的熵。

(3)需要注意,fitness作为寻优收敛的对象,寻优算法是以寻找fitness的最小值为目标,如果你的研究对象中希望寻找的是最大值,那么需要以其负数为fitness。

4.设置寻优相关参数

参照 demoOA_VMD.m文件中第一步。修改以下几个参数:

lb = [100,2];        % 定义每个优化参数的取值下限,这里的写法代表:alpha下限设置为100,K下限设置为2
ub = [10000,10];     % 定义每个优化参数的取值上限,这里的写法代表:alpha上限设置为10000,K上限设置为10
OAmethod = 'SSA';    % 选择使用的优化算法,这里使用'SSA'即麻雀搜索算法
pop = 3;             % 设置优化算法的种群大小
Max_iteration = 40;  % 设置优化算法的最大迭代次数

这几个参数都比较容易理解,就不过多讲解了,大家参照案例演示修改即可。

5.运行程序

此时运行程序即可。

四、关于完整版与公开版代码

功能完整版公开版
数据导入、参数设置、实现特征提取
软件全部源码(函数m文件)×
优化的参数数量无限制2个以内
种群数量无限制3以内
迭代次数无限制5代以内
画图水印无水印有水印
特征提取数据长度无限制200个点以内
VMD可分析数据长度无限制200个点以内

五、获取公开版程序(需使用电脑浏览器打开)

VMD的16种寻优算法公开版

注:公开版代码需使用MATLAB2022a及以上版本。

六、获取完整版程序(使用电脑浏览器或者手机浏览器打开)

获取通道一(淘宝):点击此处获取完整版程序

获取通道二(本页面):点击下面“立即支付”按钮,付款后获取完整版代码下载链接和售后联系方式~本通道处于测试阶段,使用该通道可以额外优惠(仅需123元)。付款完成后刷新一下本页面即可看到下载链接。

(注意支付跳转失败的话,请使用浏览器打开本页面)

您需要先支付 123元 才能查看此处内容!立即支付

七、完整版代码重要更新

20240401 完成初版代码

八、常见问题

1.为什么运行出来得到的适应度函数收敛曲线两张图一样?对数曲线图为什么没有按对数形式显示?

这通常是由于适应度函数数值没有发生比较大的变化,尤其是没有数量级的变化,此时没有必要对数值取对数,就会导致两张收敛曲线图相同。此时大家使用第一张图像即可(黑色曲线的)。