В этом примере показано, как обновить предсказание RUL по мере поступления новых данных с тестируемой машины. В примере вы используете ансамбль обучающих данных для обучения модели RUL. Затем цикл через последовательность тестовых данных с одной машины, обновляя предсказание RUL для каждой новой точки данных. Пример показывает эволюцию предсказания RUL по мере поступления новых данных.
Этот пример использует exponentialDegradationModel. Для моделей RUL деградации, когда новая точка данных становится доступной, необходимо сначала обновить модель деградации, прежде чем прогнозировать новое значение RUL. Для других типов модели RUL пропустите этот шаг обновления.
Загрузите данные для этого примера, который состоит из двух переменных, TestData и TrainingData.
load UpdateRULExampleDataTestData - таблица, содержащая значение некоторого индикатора состояния, 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