目次
ブログに 基づいて、この論文では、Python で実装されたシロナガスクジラ最適化アルゴリズムを使用して VMD のパラメーターを最適化します。
1.ベルーガ最適化アルゴリズム
シロイルカ最適化アルゴリズム ([Beluga whale optimization, BWO]) は、2022 年に Changting Zhong らによって提案された群知能最適化アルゴリズムです。シロイルカの集団採餌行動からインスピレーションを得たもので、次のように探索、開発、落下の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. コード
詳細なコードについてはコメント領域を参照してください