170余种智能算法优化VMD,Python代码,五种适应度函数随意切换,各种指标计算绘图,一文搞定!

作品简介

https://mp.weixin.qq.com/s?__biz=MzkyNDUwMjc3Mg==&mid=2247487689&idx=1&sn=f2c5a3020b7af0b296979b75d75207ad&chksm=c1d58f52f6a20644551f144d47f8877d7d4a70049b28a32a85038023b658eacf35419dc082f2#rd

声明:对于作者的原创代码,禁止转售倒卖,违者必究!



本期代码,利用强大的python库——mealpy,实现对VMD参数的优化。

mealpy库包含了170多个智能优化算法,其中有原始算法和改进算法。关于mealpy库的详细介绍,链接在这里:https://mealpy.readthedocs.io/en/latest/

五种适应度函数分别是:最小包络熵、样本熵、信息熵、排列熵、排列熵/互信息熵,关于这五种适应度函数的介绍之前已经介绍过非常多了,也可跳转以下链接查看:

①VMD为什么需要进行参数优化,最小包络熵/样本熵/排列熵/信息熵,适应度函数到底该选哪个

运行速度终于变快了!优化VMD参数,五种适应度函数任意切换,最小包络熵、样本熵、信息熵、排列熵、排列熵/互信息熵

Python代码示例:

第一步:读取数据

import scipy.io as scio
L = 1500 # 采样点数
STA = 1  # 采样起始位置
data1 = scio.loadmat('105.mat')
data2 = data1['X105_DE_time']   #取出X105_DE_time
data = data2[STA-1:STA-1+L]


采用的数据来自于凯斯西储大学(CWRU)的X105_DE_time数据,该数据是一个(N*1)的数据,这也意味着,只要你的数据是1列的即可,替换起来十分简单!

第二步:定义适应度函数

from objectfun import EnvelopeEntropyCost,SampleEntropyCost,PermutationEntropyCost,infoEntropyCost,compositeEntropyCost
#objectfun 是作者自己写的一个五种适应度函数的定义,在主程序调用此定义,可以方便调用这五种适应度函数!
#五种适应度函数分别为:最小包络熵,最小样本上,最小排列熵,最小信息熵,复合指标:排列熵/互信息
def x_EnvelopeEntropyCost(x):  #定义最小包络熵
    ff = EnvelopeEntropyCost(x,data)
    return ff
def x_SampleEntropyCost(x): #定义最小样本熵
    ff = SampleEntropyCost(x,data)
    return ff
def x_PermutationEntropyCost(x): #定义最小排列熵
    ff = PermutationEntropyCost(x,data)
    return ff
def x_infoEntropyCost(x):  #定义最小信息熵
    ff = infoEntropyCost(x,data)
    return ff
def x_compositeEntropyCost(x): #定义最小复合指标:排列熵/互信息
    ff = compositeEntropyCost(x,data)
    return ff


objectfun 是作者自己写的一个五种适应度函数的定义,在主程序调用此定义,可以方便调用这五种适应度函数!五种适应度函数分别为:最小包络熵,最小样本上,最小排列熵,最小信息熵,复合指标:排列熵/互信息。

第三步:调用mealpy库,实现对VMD参数的优化

problem_dict = {
    "fit_func": x_EnvelopeEntropyCost,  #只需要修改这里,即可改变适应度函数。比如改成x_SampleEntropyCost、x_PermutationEntropyCost等
    "lb": [100,3],  #分别对应惩罚因子alpha和模态分量K的下限
    "ub": [2500,10],  #分别对应惩罚因子alpha和模态分量K的上限
    "minmax""min",  #说明此程序为求最小值
}

''' 调用优化算法 '''
epoch = 5 # 最大迭代次数
pop_size = 10 # 种群数量
''' 第一种方式,需:from mealpy.swarm_based import EOA,GWO '''
EOA_model = EOA.OriginalEOA(epoch, pop_size)
BBO_model = BBO.OriginalBBO(epoch, pop_size)


注意看上述代码的注释,明确写好了如何方便的修改适应度函数!


问题:如何调用不同的智能算法呢?

只需要在程序最前面调用算法名字,然后在程序替换这个算法名字即可!

比如:


from mealpy import EOA,GWO,BBO,BMO,EOA,IWO,TPO

这里直接调用算法名字,然后在程序中替换为相应算法即可!

问题:怎么知道mealpy库有哪些算法可以被调用?

也很简单,在终端输入一句指令:

图片


打开这个位置,找到meaply文件夹,点进去:

图片


这里边都是不同的算法,任意点击一个进去,比如我点击第一个bio_based:

图片


可以看到算法名字都在这里啦,然后就在程序中调用这些算法就OK!

最后看一下效果吧:

示例1

这是哈里斯鹰算法(HHO)霜冰算法(RIME),适应度函数为最小包络熵的结果:

图片

运行完后在命令行窗口会显示如下结果:

图片

第一个参数为最佳的惩罚因子alpha,第二个为模态分量K。

示例2

不得不说,修改起来算法是真的很方便!

再来一个多元宇宙算法(MVO)斑马算法(ZOA),适应度函数为最小排列熵的结果:

图片

图片


拓展功能!

本期代码不仅有优化VMD参数的功能,还可以在优化完VMD参数后,将最佳参数回带至VMD中,从而绘制vmd分解图,包络线图,包络谱,频谱图,中心频率,峭度值,能量熵,样本熵,模糊熵,排列熵,近似熵,包络熵等所有功能!

比如,在示例1中,已经计算出最佳参数为:alpha = 647,K = 4。

此时直接将这两个参数回带,然后一键出图并统计各种指标。结果如下:

VMD分解图:

图片

VMD分解三维图展示:

图片

包络线图:

图片

包络谱图:

图片

峭度值图:

图片

频谱图:

图片

各种指标计算结果打印:

图片

代码目录

图片

所需包版本如下:


numpy~=1.26.3
scipy~=1.12.0
matplotlib~=3.8.2
mealpy~=2.5.3
vmdpy~=0.2
scikit-learn~=1.4.0
pandas~=2.2.0


 本文代码获取链接:

https://mbd.pub/o/bread/ZZuam5hy


也可跳转二维码获取:

图片


创作时间: