В этом примере показано, как обновить предсказание 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- предсказания. The fit
команда оценивает априорные для параметров модели на основе исторических записей в TrainingData
. The Prior
свойство обученной модели содержит параметры модели Theta
, Beta
, и Rho
. (Для получения дополнительной информации об этих параметрах модели см. exponentialDegradationModel
.)
mdl = exponentialDegradationModel('LifeTimeUnit',"hours"); fit(mdl,TrainingData,"Time","Condition") mdl.Prior
ans = struct with fields:
Theta: 0.6762
ThetaVariance: 0.0727
Beta: 0.0583
BetaVariance: 1.8383e-04
Rho: -0.2811
Модели деградации наиболее надежны для отслеживания деградации после появления начального наклона в измерениях индикатор состояния. Установите уровень обнаружения наклона на 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