最近、コメント欄の友人の何人かが VMD を最適化するためにアリのコロニー アルゴリズム ACO を必要としているので、記事を書く予定です。
また、ウェスタン リザーブ大学のデータセットを例として、105.mat の X105_BA_time.mat データを選択します。
まず、VMD を分解し、VMD の 2 つの主要パラメータ (ペナルティ係数 α とモード分解数 K) をアリコロニー最適化アルゴリズム (ACO) によって最適化し、最小エンベロープエントロピーを適応度値として使用します。
古いルール、最初の結果マップ:
実験中、各最適化後の最小エンベロープ エントロピー値とVMDに対応する 2 つの最良のパラメーターがリアルタイムで表示されます。今回は合計 30 個の最適化があります (最適化の数は任意に変更できます)。
30 回の最適化後、最小エンベロープ エントロピーは 7.3589、2 つの vmd に対応する最良のパラメーターは 657,5、ペナルティ係数は 657、モード分解数は 5 であることがわかります。
収束曲線は次のようになります。
コード:
%%
%% 以最小包络熵为目标函数,采用ACO算法优化VMD,求取VMD最佳的两个参数
clear all
clc
addpath(genpath(pwd))
load 105.mat
D=2; % 优化变量数目
popmin1 = 100; %惩罚因子
popmax1 = 2500;
popmin2 = 3; %模态分解K值
popmax2 = 10;
T=30; % 最大迭代数目
N=20; % 种群规模
y=@Cost;
da = X105_DE_time(1:2048); %这里选取105的DE数据
[AcoBest_pos,AcoBest_score,ACO_curve] = ACO(y,popmin1,popmax1,popmin2,popmax2,N,T,da);
%画适应度函数图
figure
plot(1:T,ACO_curve,'Color',[0.7 0.1 0.7],'Marker','>','LineStyle','--','linewidth',1);
title('Objective space')
xlabel('Iteration');
set(gca,'xtick',0:2:T);
ylabel('Best score obtained so far');
legend('ACO优化VMD')
display(['The best solution obtained by ACO is : ', num2str(round(AcoBest_pos))]); %输出最佳位置
display(['The best optimal value of the objective funciton found by ACO is : ', num2str(AcoBest_score)]); %输出最佳适应度值
コードの取得を完了します: 以下のカード内のキーワードを返信してください: ACOVMD
気分がよければブロガーに「いいね!」を残してください!あなたからのちょっとした褒め言葉がブロガーの更新の原動力になります!ありがとう!