いよいよ走るスピードが速くなりました!VMDパラメータを最適化し、5つのフィットネス関数を自由に切り替え、最小エンベロープエントロピー、サンプルエントロピー、情報エントロピー、順列エントロピー、順列エントロピー/相互情報エントロピー...

友人は、VMD パラメーターを最適化するプログラムの実行になぜこんなに時間がかかるのか、というメッセージをバックグラウンドで残してくれることがよくあります。改善する方法はありますか?

今日、Xiaotao は実行時間を改善する方法を提供します。公式の vmd 関数を使用します。

0672ecc5d0ccd60ba999067c87654bb3.png

これは MATLAB に付属する VMD 関数のスクリーンショットです。vmd 関数を備えているのは 2020a 以降の MATLAB バージョンのみであることがわかります。

この関数の使用方法は難しくなく、MATLAB 公式ドキュメントで vmd 関数の使用方法を直接検索できます。または、MATLAB バージョン 2020a 以降で vmd と直接入力し、vmd 文字にカーソルを置いて「F1」キーを押すと、関数に関連する使用法が表示されます。


ここに段落を挿入してください。VMD パラメータの最適化に時間がかかる理由について簡単に説明しましょう。

著者は、次の 3 つの理由があると考えています。

① 非常に大量のデータを持っている友人がいます。データ長が 10,000、さらには 100,000 を超えると、vmd 関数を 1 回呼び出すだけでも時間がかかります。さらに、インテリジェントなアルゴリズムを使用して最適化を行うと、時間は非常に長くなります。さらに長くなります!

②前作者が提供するVMD関数は、vmdの定義に基づいて某上司が手書きで作成したものであり、公式のvmd関数と比べると必ず欠点が生じます。今後は、公式の vmd 関数を参照できます。以前に Xiaotao の vmd 機能を購入したことのある友人、心配しないでください、公式 vmd 機能を置き換える方法はこの記事で詳しく説明され、その手順は保証されています。

③インテリジェント アルゴリズムの複雑さは実行時間にも影響します。一部のインテリジェント アルゴリズムは、実行プロセス中にフィットネス関数を複数回呼び出す必要があります。最初に計算された複雑さは次のとおりです: 反復数 * 母集団の数ですが、インテリジェント アルゴリズムは 1 回だけ実行されます。反復処理 フィットネス関数を複数回呼び出すと、計算時間が増加します。したがって、VMD パラメータの最適化の場合、すべてのインテリジェントなアルゴリズムが適用できるわけではなく、計算量の少ないインテリジェントな最適化アルゴリズムを選択するように努める必要があります。もちろん、Xiaotao が以前 VMD パラメータを最適化するために推奨したコードは、すべて選択された低複雑性のインテリジェントなアルゴリズムです。


今回は、この公式の VMD 関数を使用し、前回紹介したOsprey と Cauchy の突然変異を組み合わせた Sparrow 最適化アルゴリズムを使用して VMD パラメータを最適化します。このアルゴリズムは、著者が強く推奨するアルゴリズムでもあり、複雑さは異なります。最適化効率は非常に高いです。

まずは結果からお話しますが、公式のVMD機能に置き換えたところ、最適化速度が本当に大幅に向上しました!大量のデータを持っている友人は、この公式 VMD 機能を試してみるとよいでしょう。もちろん、MATLAB 2020a 以降をダウンロードする必要があります。

また、ウェスタン リザーブ大学のデータ セットを例として、105.mat の X105_BA_time.mat データで 1000 個のデータ ポイントを選択します。データがない場合は、この記事をお読みください。Western Reserve University ベアリング診断データ処理、MATLAB の無料コード取得

VMD の最適な k パラメーターと α パラメーターを決定するために、最適化のために 5 つのフィットネス関数が選択されました。4 つの適応度関数は、最小エンベロープ エントロピー、最小サンプル エントロピー、最小情報エントロピー、最小順列エントロピー、順列エントロピー/相互情報エントロピーであり、コード内で 1 回のクリックで切り替えることができます。フィットネス機能としてどれを選択すべきかについては、この記事をご覧ください。VMD にはなぜパラメータの最適化、最小エンベロープ エントロピー/サンプル エントロピー/順列エントロピー/情報エントロピー、どの適合度関数を選択する必要があるのですか?

1. 適応度関数としての最小エンベロープエントロピー

0a52a215f0af3745a832781ae00c1813.png

3b93e5878d84e7e8307692a8f7a01c1b.png

2. 適応度関数としての最小サンプルエントロピー

2b13831655c869c56b10d5d9ff6c485c.png

f1a04cf07944228745591ce0b39d52d1.png

3.適応度関数としての最小情報エントロピー

19b1e5e3a783bbe6f848c60a82e30003.png

0a27bf2b592c28650a38f8952d09ad01.png

4.適応度関数としての最小順列エントロピー

c321b12c06885406a6c8366ef51169cb.png

6338fe31e1e03f44a12b4d651562ca92.png

5.フィットネス関数としての複合指標

複合インジケーターの概要は次のとおりです。

781eff5b5b999ee39277a3d4769aca1f.jpeg

結果グラフ:

a008f1ac7ed5ec08c58bb2c9aeddbd4d.png

b7ea41547e19828445f5f30557603280.png

公式の VMD 機能を置き換えるにはどうすればよいですか?

まず最初に、以前の VMD 関数には間違いなくエラーがないことを言っておきます。以前に作者の VMD 作品を購入したことのある友人はパニックにならないでください。これは交換する必要はありません。コードの実行が遅すぎると思われる場合は、VMD を呼び出す部分を置き換えることができます。

交換方法:

元のファイル内で VMD 関数が呼び出される場所 (通常はフィットネス関数内) を見つけます。元の VMD 呼び出しは次のようになります。

[u, u_hat, omega] = VMD(X, alpha, tau, K, DC, init, tol);

ここで、ファイル VMD.m を削除し、次のように記述する必要があります。

u= vmd(X,'PenaltyFactor', alpha,'NumIMF',K);
u=u';

u に転置を忘れずに追加してください。これは、公式の vmd 関数が分解された後、取得される IMF コンポーネントが列単位になるためです。他のパラメータに特別な必要がない場合は、デフォルトのパラメータをそのまま使用してください。

この記事のコードの一部:

%% 以最小包络熵、最小样本熵、最小信息熵、最小排列熵,排列熵/互信息熵,为目标函数(任选其一),采用OCSSA算法优化VMD,求取VMD最佳的两个参数
clear
clc
close all
xz = 1;  %xz, 选择1,以最小包络熵为适应度函数,
% 选择2,以最小样本熵为适应度函数,
% 选择3,以最小信息熵为适应度函数,
% 选择4,以最小排列熵为适应度函数,
% 选择5,以复合指标:排列熵/互信息熵为适应度函数。
if xz == 1  
    fobj=@EnvelopeEntropyCost;          %最小包络熵
elseif xz == 2
    fobj=@SampleEntropyCost;            %最小样本熵
elseif xz == 3  
    fobj=@infoEntropyCost;              %最小信息熵
elseif xz == 4
    fobj=@PermutationEntropyCost;       %最小排列熵
elseif xz == 5
    fobj=@compositeEntropyCost;       %复合指标:排列熵/互信息熵
end
%% 选取数据
load 105.mat
da = X105_DE_time(6001:7000); %这里选取105的DEtime数据,注意这里替换为自己的数据即可,数据形式为n行*1列,列数必须为1。
%% 设置参数
lb = [100 3];    %惩罚因子和K的下限
ub = [2500 10];  %惩罚因子和K的上限
dim = 2;            % 优化变量数目
Max_iter=20;       % 最大迭代数目
SearchAgents_no=30;       %种群规模


%% 调用OCSSA函数
[fMin , bestX, Convergence_curve ] = OCSSA(SearchAgents_no,Max_iter,lb,ub,dim,fobj,da);


%% 画适应度函数曲线图,并输出最佳参数
figure
plot(Convergence_curve,'Color',[0.9 0.5 0.1],'Marker','>','LineStyle','--','linewidth',1);
title('Objective space')
xlabel('Iteration');
ylabel('Best score obtained so far');
legend('OCSSA优化VMD')
display(['The best solution obtained by OCSSA is : ', num2str(round(bestX))]);  %输出最佳位置
display(['The best optimal value of the objective funciton found by OCSSA is : ', num2str(fMin)]);  %输出最佳适应度值

誰もが変数 xz に注目します。1 を選択すると、最小エンベロープ エントロピーが適合関数として使用されます。2 を選択すると、最小サンプル エントロピーが適合関数として使用されます。3 を選択すると、最小情報エントロピーは次のようになります。 4 を選択した場合、最小順列エントロピーが適応度関数となり、5 を選択した場合、複合インデックス: 順列エントロピー/相互情報エントロピーを適応度関数として使用します。これにより、誰でも簡単に切り替えることができます。

このコードには、CEC2005、CEC2021 関数、および OCSSA に最適化された VMD の Osprey および Cauchy の変異と融合した Sparrow アルゴリズムのテストが含まれています。

f523d44ba3026c28577493c7d68ce679.png

   完全なコードを取得し、バックグラウンドでキーワードを返信します。

OCSSAVMD

おすすめ

転載: blog.csdn.net/woaipythonmeme/article/details/132785162