Обновите прогноз 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'})

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

| |

Похожие темы