目录
1、白鲸优化算法
2、BWO优化VMD参数
3、实战
3.1 原始时间序列数据
3.2 VMD分解--直接设置参数
3.3 采用BWO优化VMD
4、代码
在博客的基础上,本文利用白鲸优化算法对VMD的参数进行优化,采用python实现。
1、白鲸优化算法
白鲸优化算法([Beluga whale optimization,BWO)是由是由 Changting Zhong 等于2022 年提出的一种群体智能优化算法。其灵感来源于白鲸的群体觅食行为,具有3个阶段,分别是:探索、开发、鲸落,如下
2、BWO优化VMD参数
时间序列越复杂,包络熵的计算值越大,反之亦然。因此,应用VMD对信号进行分解后,计算每个子序列的包络值,包络最小的序列为所分解序列的趋势项。
当分解数K较小时,可能导致信号分解不足,趋势项中混入其他干扰项,导致包络熵值变大。当取适当的K值时,趋势项的包络熵变小。因此,将分解出的IMF中的最小的那个熵(局部包络熵)最小化时,VMD分解为最佳。
那么如何去找到局部包络熵,就需要用到白鲸优化算法,当前其他的优化算法都是可以实现的。适应度函数如下:
'''适应度函数,最小化各VMD分量的局部包络熵'''
def fitness(pop,data):
np.random.seed(0)
K = int(pop[0])
alpha = int(pop[1])
#print(K,alpha)
tau = 0
DC = 0
init = 1
tol = 1e-7
imf,res,u_hat,omega=VMD(data, alpha, tau, K, DC, init, tol)
comp=np.vstack([imf,res.reshape(1,-1)])
SE = 0
se_imf=[]
for i in range(comp.shape[0]):
temp= BaoLuoShang(comp[i,:])
SE +=temp
se_imf.append(temp)
# fit = SE
# fit = SE/K
fit = min(se_imf)
np.random.seed(int(time.time()))
return fit
3、实战
3.1 原始时间序列数据
3.2 VMD分解--直接设置参数
alpha = 10.0
K = 3
tau = 0
DC = 0
init = 1
tol = 1e-7
imf,res,u_hat,omega=VMD(data, alpha, tau, K, DC, init, tol)
3.3 采用BWO优化VMD
最优的k和alpha为5和4
t:1 ,best fit=2.7628 ,best pop= [2, 108]
t:2 ,best fit=2.7628 ,best pop= [2, 108]
t:3 ,best fit=2.7538 ,best pop= [4, 51]
t:4 ,best fit=2.7538 ,best pop= [4, 51]
t:5 ,best fit=2.7441 ,best pop= [2, 20]
t:6 ,best fit=2.7288 ,best pop= [5, 4]
t:7 ,best fit=2.7288 ,best pop= [5, 4]
t:8 ,best fit=2.7288 ,best pop= [5, 4]
t:9 ,best fit=2.7288 ,best pop= [5, 4]
t:10 ,best fit=2.7288 ,best pop= [5, 4]
4、代码
详细代码见评论区