Main Content

残存耐用期間の予測用コードの生成

この例では、MATLAB® Coder™ を使用して残存耐用期間 (RUL) を予測するためのアルゴリズムを展開する方法を説明します。このようなコード生成は、RUL 予測モデルの MATLAB での学習が済み、予測アルゴリズムを別の環境に展開する準備が整っている場合に便利です。この例では MATLAB Coder を使用して、MATLAB から実行可能な MEX ファイルを生成します。同様の手順を使用して、MATLAB Coder がサポートする任意のターゲット用にコードを生成することができます。

この例では、linearDegradationModel を使用して RUL を予測するための C コードを生成する方法を示します。同じ手順で、劣化モデル、residualSimilarityModel などの類似度ベースのモデル、covariateSurvivalModel などの生存ベースのモデルなど、あらゆる Predictive Maintenance Toolbox™ RUL モデルで予測アルゴリズムのコードを生成することができます。

RUL の予測用コードを生成するためのワークフローを次の図に示します。最初のステップでは、システムの履歴データを使用して RUL モデルを当てはめます。また、システムから新しいデータを受け取り、当てはめたモデルとともにそのデータを使用して新しい RUL を予測する MATLAB 関数を記述する必要もあります。これを "エントリポイント関数" と呼びます。次に、エントリポイント関数から C/C++ コードを生成します。

RUL モデルの当てはめ

RUL 予測のコードを生成する前に、履歴データを使用して RUL モデルを当てはめなければなりません。この例では、linTrainTables.mat のデータを読み込みます。このファイルには、経時的に取得されたいくつかの状態インジケーターの測定値が含まれ、列ラベル "Time" および "Condition" をもつ table にまとめられています。これらのデータを使用して線形劣化モデルの学習を行います。(RUL モデルの構成と学習の詳細については、linearDegradationModelを、その他のタイプの RUL モデルについてはリファレンス ページを参照してください。)

load('linTrainTables.mat')

mdl = linearDegradationModel;
fit(mdl,linTrainTables,"Time","Condition")

コード生成に向けたモデルの準備

RUL モデルの学習が済んだら、saveRULModelForCoderを使用してモデルを保存します。この関数は、RUL モデルを MAT ファイルに保存します。後に、エントリポイント関数内でloadRULModelForCoderを使用してそのファイルから RUL モデルを読み込み、再構成します。

saveMATfilename = 'savedModel.mat';
saveRULModelForCoder(mdl,saveMATfilename);

エントリポイント関数の定義

"エントリポイント関数" とは、コード生成の対象となる関数です。RUL を予測する際、エントリポイント関数は入力データを受け取り、状態インジケーターを抽出するための何らかの処理を行った後、predictRUL を使用してモデルから新しい RUL 推定を取得する場合があります。状態インジケーターの特定、データの処理、RUL の予測の完全なワークフローを示す例については、風力タービン高速ベアリングの経過予測を参照してください。この例では、次に示すように、単純なエントリポイント関数 degradationRULPredict.m を作成します。

type degradationRULPredict.m
function [estRUL,ci,pdfRUL] = degradationRULPredict(data)
%#codegen

threshold = 60;

% Load prepared model
mdl = loadRULModelForCoder('savedModel.mat');

% Use input data for new prediction
[estRUL,ci,pdfRUL] = predictRUL(mdl,data,threshold);

end

この関数は入力として、時間と状態インジケーター値で構成されるデータ点を受け取ります。関数は、前に saveRULModelForCoder を使って保存した学習済みモデルのバージョンを、loadRULModelForCoder を使用して読み込みます。この関数には、コード生成時や実行時にエラーとなる可能性のある違反の診断と修正に役立つようにコード アナライザーに指示する、必須の %#codegen 命令も含まれています。(コード アナライザーの詳細については、コード アナライザーによるコードのチェック (MATLAB Coder)を参照してください。)

エントリポイント関数の機能および制限事項

この例の単純なエントリポイント関数はモデルを読み込み、新しい RUL 予測を取得します。エントリポイント関数では、入力データをさらに処理して予測に使用する状態インジケーターを抽出するなど、他の操作をすることも可能です。ただし、エントリポイント関数内のすべての関数と操作はコード生成をサポートしていなければなりません。劣化ベースの RUL モデルの場合、関数は update コマンドを使用して、新規データに基づき予測モデルを更新することもできます。これを行う場合、展開されたシステムをシャットダウンし再起動する際に、更新されたモデル パラメーターを保持するための追加コードを含めることができます。詳細については、システムの再起動に対し RUL モデルの状態を保持するコードの生成を参照してください。

RUL モデルのコード生成に関する制限の詳細については、predictRULのリファレンス ページを、個別の RUL モデル タイプについては、「拡張機能」の節を参照してください。

コードの生成

コードを生成するには、エントリポイント関数で必要とされるデータ型と形式のサンプル データを指定しなければなりません。この例では、RUL モデルの学習に使用したデータと同じ形式のいくつかのテスト データと、時間および状態インジケーター値の table を読み込みます。使用するエントリポイント関数は 1 つの時間と値を入力として受け取るため、テスト データの table から 1 つの行を抽出します。コード生成では、サンプル データの具体的な値は重要でなく、データ型のみが重要です。

load('linTestData.mat','linTestData1')
sampleData = linTestData1(1,:);
sampleData
sampleData=1×2 table
    Time    Condition
    ____    _________

     1       2.1316  

MATLAB Coder アプリを使用するか、MATLAB コマンド ラインを使用するかの 2 つの方法でコードを生成するできるようになりました。

MATLAB Coder アプリを使用したコードの生成

MATLAB デスクトップの [アプリ] タブで、[コード生成] の下にある [MATLAB Coder] をクリックします。[ソース ファイルの選択] ページに MATLAB Coder アプリが開きます。[関数のコードを生成] ボックスにエントリポイント関数の名前「degradationRULPredict」を入力します。次に、[次へ] をクリックします。

エントリポイント関数の入力データ型を指定するには、[入力の型を定義] ページで、degradationRULPredict の呼び出しに sampleData を使用します。呼び出しを入力すると、MATLAB Coder は検出された入力型と出力数を表示します。[次へ] をクリックして確認します。

オプションで、実行時に発生する問題についてエントリポイント関数を確認します。これを行うには、[問題の確認] をクリックします。準備ができたら [次へ] をクリックして [コード生成] ページに進みます。このページでは、コード生成のターゲットを指定します。スタンドアロンの C/C++ コード、ライブラリとしてコンパイルされる C/C++ コード、実行可能ファイルとしてコンパイルされる C/C++ コードなど、MATLAB Coder がサポートする任意のターゲットの RUL 予測コードを生成できます。この例では、[ビルド タイプ] リストで MEX を選択します。MEX ファイルは MATLAB 内から呼び出すことができる実行可能ファイルです。

[生成] をクリックして、MEX ファイル degradationRULPredict_mex を生成します。MATLAB Coder の機能と、そこで生成されるファイルについての追加情報は、MATLAB Coder アプリを使用した C コードの生成 (MATLAB Coder)を参照してください。

codegen コマンドを使用したコードの生成

MATLAB Coder アプリを使用する代わりに、次のcodegen (MATLAB Coder)コマンドを使用してコードを生成することができます。

codegen degradationRULPredict -args {sampleData} -nargout 3
Code generation successful.

生成コードの検証

生成コードを検証するには、MATLAB コマンド プロンプトで、テストデータを指定して MATLAB エントリポイント関数を実行します。次に、同じデータに対して生成された MEX ファイルを実行し、結果が同じであることを確認します。

[estRUL,ci,pdfRUL] = degradationRULPredict(sampleData);

[estRUL_mex,ci_mex,pdfRUL_mex] = degradationRULPredict_mex(sampleData);

たとえば、MATLAB 関数と生成された MEX ファイルそれぞれを使用して取得した推定 RUL を比較します。

estRUL
estRUL = 114.2927
estRUL_mex
estRUL_mex = 114.2927

これで、残存耐用期間を予測するために、生成コードを展開先システムの一部として使用することができます。

参考

| | | | | | | | |

関連するトピック