Этот пример показывает, как обновить прогноз RUL, когда новые данные прибывают от машины под тестом. В примере вы используете ансамбль данных тренировки, чтобы обучить модель RUL. Вы затем цикл через последовательность тестовых данных от одной машины, обновляя прогноз RUL для каждой новой точки данных. Пример показывает эволюцию прогноза RUL, когда новые данные становятся доступными.
Этот пример использует exponentialDegradationModel
. Для моделей RUL ухудшения, когда новая точка данных становится доступной, необходимо сначала обновить модель ухудшения прежде, чем предсказать новое значение RUL. Для других типов модели RUL пропустите этот шаг обновления.
Загрузите данные для этого примера, который состоит из двух переменных, TestData
и TrainingData
.
load UpdateRULExampleData
TestData
является таблицей, содержащей значение некоторого индикатора состояния, Condition
, зарегистрированного каждый час, когда первые несколько записей показывают.
head(TestData,5)
ans=5×2 table
Time Condition
____ _________
1 1.0552
2 1.2013
3 0.79781
4 1.09
5 1.0324
TrainingData
является массивом ячеек таблиц, имеющих те же переменные как TestData
. Каждая ячейка в TrainingData
представляет эволюцию отказу индикатора состояния Condition
за время жизни одной машины в ансамбле.
Используйте TrainingData
, чтобы обучить модель exponentialDegradationModel
прогнозу RUL. Команда fit
оценивает предшествующее для параметров модели на основе хронологических записей в TrainingData
. Свойство Prior
обученной модели содержит параметры модели Theta
, Beta
и Rho
. (Для получения дополнительной информации этих параметров модели, смотрите exponentialDegradationModel
.)
mdl = exponentialDegradationModel('LifeTimeUnit',"hours"); fit(mdl,TrainingData,"Time","Condition") mdl.Prior
ans = struct with fields:
Theta: 0.6389
ThetaVariance: 0.0661
Beta: 0.0583
BetaVariance: 1.8383e-04
Rho: -0.3129
Модели ухудшения являются самыми надежными для ухудшения, отслеживающего после того, как начальный наклон появится в измерениях индикатора состояния. Установите наклонный уровень обнаружения в 0,1 говорить модели не делать прогнозы RUL, пока тот наклон не будет достигнут. (Когда вы знаете заранее, что измерения для компонента, ухудшение которого уже запустилось, можно отключить наклонное обнаружение установкой mdl.SlopeDetectionLevel = []
.)
mdl.SlopeDetectionLevel = 0.1;
Задайте пороговое значение индикатора состояния, которое указывает на конец жизни машины. RUL является предсказанным временем, оставленным, прежде чем индикатор состояния для тестовой машины достигнет этого порогового значения.
threshold = 400;
Для прогноза RUL примите, что TestData
начинает во время t
= 1 час, и новая выборка данных становится доступной каждый час. В целом можно предсказать новое значение RUL с каждой новой точкой данных. Для модели ухудшения этого примера, цикла через TestData
и обновление модель с каждой новой точкой данных с помощью команды update
. Затем проверяйте, обнаруживает ли модель достаточное изменение в наклоне для надежного прогноза RUL. Если это делает, предскажите новое значение RUL с помощью команды predictRUL
. Чтобы наблюдать эволюцию оценки, сохраните предполагаемые значения RUL и связанные доверительные интервалы в векторах EstRUL
и CI
, соответственно. Точно так же сохраните параметры модели в массиве ModelParameters
.
N = height(TestData); EstRUL = hours(zeros(N,1)); CI = hours(zeros(N,2)); ModelParameters = zeros(N,3); for t = 1:N CurrentDataSample = TestData(t,:); update(mdl,CurrentDataSample) ModelParameters(t,:) = [mdl.Theta mdl.Beta mdl.Rho]; % Compute RUL only if the data indicates a change in slope. if ~isempty(mdl.SlopeDetectionInstant) [EstRUL(t),CI(t,:)] = predictRUL(mdl,CurrentDataSample,threshold); end end
Постройте траектории предполагаемых значений параметра модели. Значения изменяются быстро после того, как наклон обнаруживается в данных об ухудшении. Они имеют тенденцию сходиться, когда больше точек данных становится доступным.
Time = hours(1:N)'; tStart = mdl.SlopeDetectionInstant; % slope detection time instant plot(Time,ModelParameters); hold on plot([tStart, tStart],[-1,2],'k--') legend({'\theta(t)','\beta(t)','\rho(t)','Slope detection instant'},'Location','best') hold off
Постройте предсказанный RUL, чтобы наблюдать его эволюцию, когда больше данных об ухудшении становится доступным. Там является не новым, оценил значение RUL, пока наклон не обнаруживается в данных об ухудшении. После этого предсказанный RUL уменьшается в зависимости от времени, как ожидалось. predictRUL
вычисляет статистическое распределение значений RUL. Доверительные границы на предсказанном RUL становятся более узкими в зависимости от времени.
plot(Time,EstRUL,'b.-',Time,CI,'c',tStart,EstRUL(hours(tStart)),'r*') title('Estimated RUL at Time t') xlabel('t') ylabel('Estimated RUL') legend({'Predicted RUL','Confidence bound','Confidence bound','Slope detection instant'})
exponentialDegradationModel
| predictRUL
| update