exponentialDegradationModel
残存耐用期間を予測する指数劣化モデル
説明
exponentialDegradationModel
を使用して、コンポーネントの残存耐用期間 (RUL) を推定するための指数劣化プロセスをモデル化します。劣化モデルは、監視されている信号が事前定義されたしきい値をいつ超えるかを予測することで、RUL を推定します。指数劣化モデルはコンポーネントが累積的に劣化する場合に役立ちます。劣化モデルの詳細については、指数劣化モデルを参照してください。
特定のタイプのコンポーネントに exponentialDegradationModel
オブジェクトを設定するには、次の操作を実行します。
同じ仕様で製造された複数のマシンなど、類似コンポーネントのアンサンブルの健全性に関する履歴データを使ってモデル パラメーターを推定します。これを行うには、
fit
を使用します。コンポーネントの劣化プロセスに関する知識に基づいてモデルを作成する際に、モデル パラメーターを指定します。
劣化モデルのパラメーターを設定したら、その後、類似コンポーネントの残存耐用期間を predictRUL
を使用して予測できます。劣化モデルによる RUL 予測の基本的な例については、データの着信に応じた RUL 予測の更新を参照してください。
残存耐用期間の予測に関する一般的な情報については、残存耐用期間を予測するモデルを参照してください。
作成
プロパティ
Theta
— θ パラメーターの現在の平均値
スカラー
この プロパティ は読み取り専用です。
劣化モデルにおける θ パラメーターの現在の平均値。スカラーとして指定します。劣化モデルの詳細については、指数劣化モデルを参照してください。
名前と値のペアの引数を使用して Theta
を指定できるのは、次の場合です。
モデルを作成する。
関数
restart
を使用してモデルをリセットする。
それ以外の場合は、関数 update
を使用すると、Theta
の値が変化します。
ThetaVariance
— θ パラメーターの現在の分散
非負のスカラー
この プロパティ は読み取り専用です。
劣化モデルにおける θ パラメーターの現在の分散。非負のスカラーとして指定します。劣化モデルの詳細については、指数劣化モデルを参照してください。
名前と値のペアの引数を使用して ThetaVariance
を指定できるのは、次の場合です。
モデルを作成する。
関数
restart
を使用してモデルをリセットする。
それ以外の場合は、関数 update
を使用すると、ThetaVariance
の値が変化します。
Beta
— β パラメーターの現在の平均値
スカラー
この プロパティ は読み取り専用です。
劣化モデルにおける β パラメーターの現在の平均値。スカラーとして指定します。劣化モデルの詳細については、指数劣化モデルを参照してください。
名前と値のペアの引数を使用して Beta
を指定できるのは、次の場合です。
モデルを作成する。
関数
restart
を使用してモデルをリセットする。
それ以外の場合は、関数 update
を使用すると、Beta
の値が変化します。
BetaVariance
— β パラメーターの現在の分散
非負のスカラー
この プロパティ は読み取り専用です。
劣化モデルにおける β パラメーターの現在の分散。非負のスカラーとして指定します。劣化モデルの詳細については、指数劣化モデルを参照してください。
名前と値のペアの引数を使用して BetaVariance
を指定できるのは、次の場合です。
モデルを作成する。
関数
restart
を使用してモデルをリセットする。
それ以外の場合は、関数 update
を使用すると、BetaVariance
の値が変化します。
Rho
— θ と β の間の現在の相関
0
(既定値) | [-1,1] の範囲のスカラー値
この プロパティ は読み取り専用です。
θ と β の間の現在の相関。[-1,1] の範囲のスカラー値として指定します。劣化モデルの詳細については、指数劣化モデルを参照してください。
名前と値のペアの引数を使用して Rho
を指定できるのは、次の場合です。
モデルを作成する。
関数
restart
を使用してモデルをリセットする。
それ以外の場合は、関数 update
を使用すると、Rho
の値が変化します。
Phi
— 現在の切片の値
スカラー
劣化モデルの現在の切片の値 ϕ。スカラーとして指定します。劣化モデルの詳細については、指数劣化モデルを参照してください。
Phi
は、モデル作成時に名前と値のペアの引数を使用して指定できます。それ以外の場合は、関数 fit
を使用してモデルの事前確率を推定すると、Phi
の値が変化します。
Prior
— モデル パラメーターに関する事前確率情報
構造体
モデル パラメーターに関する事前確率情報。以下のフィールドを持つ構造体として指定されます。
Theta
— θ の平均値ThetaVariance
— θ の分散Beta
— β の平均値BetaVariance
— β の分散Rho
— θ と β の間の相関
次の場合に、Prior
のフィールドを指定できます。
モデルを作成する場合。モデル作成時に
Theta
、ThetaVariance
、Beta
、BetaVariance
、またはRho
を名前と値のペアで指定すると、Prior
の対応するフィールドも設定されます。関数
fit
を使用する。この場合、事前確率の値はモデルの近似に使用したデータから導き出されます。関数
restart
を使用する。この場合、Theta
、ThetaVariance
、Beta
、BetaVariance
、Rho
の現在値は、Prior
の対応するフィールドにコピーされます。モデル作成後にドット表記を使用する。
劣化モデルの詳細については、指数劣化モデルを参照してください。
NoiseVariance
— 加法性ノイズの分散
1
(既定値) | 非負のスカラー
劣化モデルにおける加法性ノイズの分散 ε。非負のスカラーとして指定します。劣化モデルの詳細については、指数劣化モデルを参照してください。
次の場合に、NoiseVariance
を指定できます。
モデル作成時に名前と値のペアを使用する
名前と値のペアとともに関数
restart
を使用するモデル作成後にドット表記を使用する
SlopeDetectionLevel
— 勾配の検出レベル
0.05
(既定値) | [0,1] の範囲のスカラー値 | []
劣化プロセスの開始を判断するための勾配の検出レベル。[0,1] の範囲のスカラーとして指定します。この値は、勾配の有意性を示す t 検定における α 値に相当します。
勾配の検出の検定を無効にするには、SlopeDetectionLevel
を []
に設定します。
次の場合に、SlopeDetectionLevel
を指定できます。
モデル作成時に名前と値のペアを使用する
名前と値のペアとともに関数
restart
を使用するモデル作成後にドット表記を使用する
SlopeDetectionInstant
— 勾配の検出時間
[]
(既定値) | スカラー
この プロパティ は読み取り専用です。
勾配の検出時間 (有意な勾配を検出した時点)。スカラーとして指定します。関数 update
は、SlopeDetectionLevel
が空でないときにこの値を設定します。
CurrentMeasurement
— 最新の劣化特徴値
スカラー
この プロパティ は読み取り専用です。
関数 update
に渡される最新の劣化特徴値。スカラーとして指定されます。
InitialLifeTimeValue
— ライフタイム変数の初期値
スカラー | duration
オブジェクト
この プロパティ は読み取り専用です。
モデルに対して関数 update
が最初に呼び出されたときのライフタイム変数の初期値。スカラーとして指定されます。
モデルが勾配を検出すると、InitialLifeTime
の値を SlopeDetectionInstant
の値に合わせて変化させます。
CurrentLifeTimeValue
— 現在のライフタイム変数値
スカラー | duration
オブジェクト
この プロパティ は読み取り専用です。
関数 update
に渡される最新のライフタイム変数値。スカラーとして指定されます。
LifeTimeVariable
— ライフタイム変数
""
(既定値) | string
ライフタイム変数。有効な MATLAB® 変数名または ""
を含む string として指定します。
関数 fit
を使用してモデルを学習させるとき、学習データが次のいずれかの場合:
table
の場合、LifeTimeVariable
が table の変数名のいずれかに一致する必要があるtimetable
の場合、LifeTimeVariable
は、table の変数名の 1 つ、または時間変数の次元名data.Properties.DimensionNames{1}
にする必要がある
次の場合に、LifeTimeVariable
を指定できます。
モデル作成時に名前と値のペアを使用する
関数
fit
を呼び出す際の引数として使用するモデル作成後にドット表記を使用する
LifeTimeUnit
— ライフタイム変数の単位
""
(既定値) | string
ライフタイム変数の単位。string として指定します。
ライフタイム変数の単位は時間ベースとする必要はありません。テスト コンポーネントの寿命は、走行距離 (マイル) や消費燃料 (ガロン) などの使用量変数で測定できます。
DataVariables
— 劣化変数名
""
(既定値) | string
劣化変数名。有効な MATLAB 変数名を含む string として指定します。劣化モデルの持つデータ変数は 1 つのみです。
次の場合に、DataVariables
を指定できます。
モデル作成時に名前と値のペアを使用する
関数
fit
を呼び出す際の引数として使用するモデル作成後にドット表記を使用する
UseParallel
— 並列計算の使用のフラグ
false
(既定値) | true
データから事前確率値を近似させる際の、並列計算の使用のフラグ。true
または false
のいずれかとして指定します。
次の場合に、UseParallel
を指定できます。
モデル作成時に名前と値のペアを使用する
名前と値のペアとともに関数
restart
を使用するモデル作成後にドット表記を使用する
UserData
— その他のモデル情報
[]
(既定値) | 任意のデータ型またはデータ形式
記録用のその他のモデル情報。任意のデータ型またはデータ形式として指定します。モデルでは、この情報を使用しません。
次の場合に、UserData
を指定できます。
モデル作成時に名前と値のペアを使用する
モデル作成後にドット表記を使用する
オブジェクト関数
fit | 履歴データを使用して残存耐用期間モデルのパラメーターを推定 |
predictRUL | テスト コンポーネントの残存耐用期間を推定 |
update | 劣化残存耐用期間モデルの事後パラメーター分布を更新 |
restart | Reset remaining useful life degradation model |
例
指数劣化モデルの学習
学習データを読み込みます。
load('expTrainVectors.mat')
学習データは列ベクトルの cell 配列です。各列ベクトルは、コンポーネントの劣化特徴プロファイルです。
既定の設定で、指数劣化モデルを作成します。
mdl = exponentialDegradationModel;
学習データを使用して劣化モデルに学習させます。
fit(mdl,expTrainVectors)
既知の事前確率を使用した指数劣化モデルの作成
指数劣化モデルを作成し、既知の事前分布で構成します。
mdl = exponentialDegradationModel('Theta',0.5,'ThetaVariance',0.003,... 'Beta',0.3,'BetaVariance',0.002,... 'Rho',0.1);
指定された事前分布パラメーターは、モデルの Prior
プロパティに保存されます。
mdl.Prior
ans = struct with fields:
Theta: 0.5000
ThetaVariance: 0.0030
Beta: 0.3000
BetaVariance: 0.0020
Rho: 0.1000
また、モデルの現在の事後分布は、指定された事前分布と一致するように設定されます。たとえば、相関パラメーターの事後値を確認します。
mdl.Rho
ans = 0.1000
表形式データを使用した指数劣化モデルの学習
学習データを読み込みます。
load('expTrainTables.mat')
学習データは table の cell 配列です。各 table は、コンポーネントの劣化特徴プロファイルです。各プロファイルは、変数 "Time"
のライフタイム測定値と、それに対応する変数 "Condition"
の劣化特徴の測定値から構成されます。
既定の設定で、指数劣化モデルを作成します。
mdl = exponentialDegradationModel;
学習データを使用して劣化モデルに学習させます。ライフタイム変数とデータ変数の名前を指定します。
fit(mdl,expTrainTables,"Time","Condition")
指数劣化モデルを使用した RUL の予測
学習データを読み込みます。
load('expTrainTables.mat')
学習データは table の cell 配列です。各 table は、コンポーネントの劣化特徴プロファイルです。各プロファイルは、変数 "Hours"
のライフタイム測定値と、それに対応する変数 "Condition"
の劣化特徴の測定値から構成されます。
ライフタイム変数の単位を指定して、指数劣化モデルを作成します。
mdl = exponentialDegradationModel('LifeTimeUnit',"hours");
学習データを使用して劣化モデルに学習させます。ライフタイム変数とデータ変数の名前を指定します。
fit(mdl,expTrainTables,"Time","Condition")
テストデータを読み込みます。このデータはテスト コンポーネントの故障に至るまで実行された劣化プロファイルです。テスト データは、学習データと同じライフタイム変数とデータ変数を持つ table です。
load('expTestData.mat')
劣化特徴限界の知識に基づき、コンポーネントの耐用寿命末期を示す、状態インジケーターのしきい値を定義します。
threshold = 500;
コンポーネントの状態インジケーターを 1 時間ごとに 150 時間測定すると仮定します。学習させた劣化モデルを測定ごとに更新します。次に、150 時間時点でのコンポーネントの残存耐用期間を予測します。RUL は、劣化特徴が指定されたしきい値を通過する予測時間です。
for t = 1:150 update(mdl,expTestData(t,:)) end estRUL = predictRUL(mdl,threshold)
estRUL = duration
136.45 hr
推定された RUL は約 137
時間で、予測された寿命は合計約 287
時間です。
指数劣化モデルの更新および RUL の予測
観測データを読み込みます。
load('expTestData.mat')
この例では、学習データが履歴データではなく、コンポーネントの状態のリアルタイムの観測値であると仮定します。
劣化特徴限界の知識に基づき、コンポーネントの耐用寿命末期を示す、状態インジケーターのしきい値を定義します。
threshold = 500;
任意の事前分布データと指定されたノイズ分散を使って、指数劣化モデルを作成します。また、観測データに対し、ライフタイムとデータの変数名を指定します。
mdl = exponentialDegradationModel('Theta',1,'ThetaVariance',1e6,... 'Beta',1,'BetaVariance',1e6,... 'NoiseVariance',0.003,... 'LifeTimeVariable',"Time",'DataVariables',"Condition",... 'LifeTimeUnit',"hours");
100
時間にわたりコンポーネントの状態を観察し、観察ごとに劣化モデルを更新します。
for i=1:100 update(mdl,expTestData(i,:)); end
100
時間後、モデルに保存されている現在のライフタイム値によってコンポーネントの RUL を予測します。また、推定された RUL に関連付けられた信頼区間も取得します。
estRUL = predictRUL(mdl,threshold)
estRUL = duration
221.38 hr
推定された RUL は約 234
時間で、予測された寿命は合計約 334
時間です。
アルゴリズム
指数劣化モデル
exponentialDegradationModel
オブジェクトは、以下の連続時間指数劣化モデル[1]を実装します。
ここで、
ϕ はモデル切片で、定数です。ϕ は、
Phi
を使用して、劣化変数の実行可能領域の下限または上限として初期化できます。θ の符号に応じて次のようになります。正の場合、ϕ は下限です。
負の場合、ϕ は上限です。
θ(t) は平均
Theta
と分散ThetaVariance
をもつ対数正規分布としてモデル化された確率変数です。β(t) は平均
Beta
と分散BetaVariance
をもつガウス分布としてモデル化された確率変数です。ε(t) はモデルの加法性ノイズであり、ゼロ平均と分散
NoiseVariance
を持つ正規分布としてモデル化されます。σ2 は
NoiseVariance
と等しくなります。
参照
[1] Gebraeel, Nagi. "Sensory-Updated Residual Life Distributions for Components with Exponential Degradation Patterns." IEEE Transactions on Automation Science and Engineering. Vol. 3, Number 4, 2006, pp. 382–393.
拡張機能
C/C++ コード生成
MATLAB® Coder™ を使用して C および C++ コードを生成します。
使用に関するメモと制限:
predictRUL
、update
、restart
コマンドは、この RUL モデル タイプの MATLAB Coder™ を使用したコード生成に対応しています。このモデルを使用するコードを生成する前に、saveRULModelForCoder
を使用してモデルを保存する必要があります。例については、残存耐用期間の予測用コードの生成を参照してください。読み取り専用のプロパティに加え、劣化モデルの以下のプロパティは実行時に変更できません。
LifeTimeVariable
LifeTimeUnit
DataVariables
コード生成に関するその他の制限については、
predictRUL
を参照してください。
自動並列サポート
Parallel Computing Toolbox™ を使用して自動的に並列計算を実行することで、コードを高速化します。
これらのモデルを並列で評価するには、UseParallel
プロパティを true
に設定します。
バージョン履歴
R2018a で導入
MATLAB コマンド
次の MATLAB コマンドに対応するリンクがクリックされました。
コマンドを MATLAB コマンド ウィンドウに入力して実行してください。Web ブラウザーは MATLAB コマンドをサポートしていません。
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list:
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)