Обновите прогноз RUL, в то время как данные прибывают

Этот пример показывает, как обновить прогноз 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 на каждом временном шаге

Задайте пороговое значение индикатора состояния, которое указывает на конец жизни машины. 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'})

Смотрите также

| |

Похожие темы