Обновите предсказание 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.6762
    ThetaVariance: 0.0727
             Beta: 0.0583
     BetaVariance: 1.8383e-04
              Rho: -0.2811

Модели ухудшения являются самыми надежными для ухудшения, отслеживающего после того, как начальный наклон появится в измерениях индикатора состояния. Установите наклонный уровень обнаружения в 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

Figure contains an axes object. The axes object contains 4 objects of type line. These objects represent \theta(t), \beta(t), \rho(t), Slope detection instant.

Постройте предсказанный 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'})

Figure contains an axes object. The axes object with title Estimated RUL at Time t contains 4 objects of type line. These objects represent Predicted RUL, Confidence bound, Slope detection instant.

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

| |

Похожие темы