主要内容

システムの再起動に対しrulモデルの状態を保持するコドの生成

この例では,予測アルゴリズムが停止して再起動する際に荷重软化モデルの状態を保持する,残存耐用期間(原则)を予測するためのコードを生成する方法を説明します。この例は,残存耐用期間の予測用コドの生成で説明したワクフロを基にしています。

この例のワクフロは,劣化ベスのrulモデルlinearDegradationModelおよびexponentialDegradationModelに使用できます。デタの着信に応じたrul予測の更新で説明されているように,これらのモデルでは,更新コマンドを使用して,システムの動作中に受信デタでrulモデルを更新できます。展開された予測アルゴリズムでこのような更新を行うと,システムのシャットダウンに際して,動作中にモデルに加えた更新がすべて失われる危険があります。この例では、実行時にモデルに加えられた更新を保持するエントリポ以及ント関数の記述方法を示します。そのためには、エントリポ以及ント関数にreadStateコマンドとrestoreStateコマンドを組み込みます。

规则モデルの当てはめ

荷重软化予測のコードを生成する前に,履歴データを使用して荷重软化モデルを当てはめなければなりません。この例では,linTrainTables.matのデタを読み込みます。このファ“时间”および“条件”をもemf表にまとめられています。これらのデタを使用して線形劣化モデルの学習を行います。(このタモデルの構成と学習の詳細に,linearDegradationModelを参照してください。)

负载(“linTrainTables.mat”) mdl =线性降解模型;fit (mdl linTrainTables,“时间”“条件”

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

残存耐用期間の予測用コドの生成で説明されているように,モデルをコ,ド生成用に準備するには,saveRULModelForCoderを使用してrulモデルをデmatファ。後に、エントリポ以及ント関数内でloadRULModelForCoderを使用してlinearDegradationModelオブジェクトを読み込み,再構成します。

saveMATfilename =“savedModel.mat”;saveRULModelForCoder (mdl saveMATfilename);

オプションとして,学習データの後で収集された追加データを使用して,モデルパラメーターを更新することができます。この例では,時間と状態121行の表である,linTestData1を読み込みます。この表にある最初の2のエントリを使用して,モデルを更新します。

负载(“linTestData.mat”“linTestData1”) updateData = linTestData1(1:2,:);更新(mdl updateData);

次に,readStateを使用してモデルの状態を読み取ります。このコマンドは,エントリポイント関数に入力引数として渡すことが可能な構造体に荷重软化モデルオブジェクトを変換します。

savedState = readState(mdl);

エントリポ邮箱ント関数の定義

エントリポント関数とは,コド生成の対象となる関数です。この例では,次に示すように,エントリポ,ント関数degradationRULPreserveState.mを作成します。

类型degradationRULPreserveState.m
function [estRULOut,ciOut,newState] =降级规则preservestate (data,restoreStateFlag,savedState) %#codegen persistent mdl %如果isempty(mdl) mdl = loadRULModelForCoder('savedModel')第一次调用函数时加载模型;如果需要restoreStateFlag restoreState(mdl,savedState)则恢复保存的模型参数;更新模型和预测,新的数据阈值= 60;数据更新(mdl);[estRULOut,ciOut] = predictRUL(mdl,threshold);%读取更新的模型参数newState = readState(mdl);结束

この関数は,新たな入力デ,タを指定して呼び出されるたびに,更新コマンドを使用してrul予測モデルを更新します。mdl持续的変数として宣言することで,関数がメモリ内に留まっている間,更新されたモデルパラメーターは呼び出し間で保持されます。この関数は,更新されたモデルパラメタを出力引数newStateに書き込みます。この値をエントリポイント関数の外部で保存して,関数がメモリからクリアされる際に,更新されたモデルの状態を保持します。したがって,たとえばシステムシャットダウンの後に予測アルゴリズムを再起動する際に,restoreStateFlag真正的に設定して,直近にsavedStateとして保存された状態値を渡すことができ,システムは直近に更新されたモデルパラメーターを使用して予測を確実に再開するようになります。

コドの生成

コードを生成するには,エントリポイント関数で必要とされる各入力引数のデータ型と形式をもつサンプルデータを指定する必要があります。この例では,linTestData1の次の行を使用します。また,restoreStateFlagを論理値真正的に設定します。

sampleData = linTestData1(3,:);restoreStateFlag = true;

これで,次のcodegen(MATLAB编码器)コマンドを使用してコドを生成することができます。変数リスト{sampleData, restoreStateFlag, savedState}は,codegenコマンドに,この関数が時刻と数値からなる表行,論理値,readStateが返す形式savedStateの構造体を引数として受け取ることを示します。

codegendegradationRULPreserveStatearg游戏{sampleData, restoreStateFlag, savedState}-nargout3.
代码生成成功。

このコマンドはmexファereplicationルを生成します。Mexファexeルはmatlab®内から呼び出すことができる実行可能ファexeルです。この例と同様の手順を使用して,codegenがサポトする他の任意のタゲット用のコドを生成することができます。あるいは,残存耐用期間の予測用コドの生成で示されているように,MATLAB Coderアプリを使用することができます。

生成コドの検証

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

[estRUL,ci,newState] =降解规则preservestate (sampleData,restoreStateFlag,savedState);[estRUL_mex,ci_mex,newState_mex] =降级规则preservestate_mex (sampleData,restoreStateFlag,savedState);

たとえば,MATLAB関数と生成された墨西哥人ファイルそれぞれを使用して取得した推定原则を比較します。

estRUL ci
estRUL = 113.8920
ci =1×283.0901 - 172.5393
estRUL_mex, ci_mex
estRUL_mex = 113.8920
ci_mex =1×283.0901 - 172.5393

これで,残存耐用期間を予測するために,生成コードを展開先システムの一部として使用することができます。newStateの値を保存して,システムの再起動が必要なときに使用します。たとえば,linTestData1の次のデタ点を取得し,それを使用して予測を更新します。その際,前回のmexファereplicationルの呼び出しで生成されたモデルの状態newState_mexから開始します。

nextData = linTestData1(4,:);[estRUL2_mex,ci2_mex, newstat2_mex] =降解rulpreservestate_mex (nextData,restoreStateFlag,newState_mex);estRUL2_mex, ci2_mex
estRUL2_mex = 104.4336
ci2_mex =1×277.8216 - 154.1263

MATLAB関数と墨西哥人ファイルは,それぞれが独自の永続変数を管理することに注意してください。したがって,この時点でmexファereplicationルのmdl値にはnextDataからの更新が組み込まれている一方で,関数のmdl値には組み込まれていません。これら永続変数の値をリセットするには,関数とmexファereplicationルを明示的にメモリからクリアします。

清晰的degradationRULPreserveState清晰的degradationRULPreserveState_mex

参考

||||||||||

関連するトピック