Сгенерируйте Код который Консервы состояние Модели RUL для Системного Перезапуска

В этом примере показано, как сгенерировать код для предсказания остающегося срока полезного использования (RUL), который сохраняет состояние модели RUL, когда алгоритм прогнозирования остановлен и перезапущен. Этот рабочий процесс полезен, когда вы используете входящие данные, чтобы обновить модель RUL во время работы системы. Когда вы делаете так на завершении работы системы, вы рискуете терять любые обновления, которые вы делаете к модели. В этом примере показано, как использовать readState и restoreState команды в вашей точке входа функционируют, чтобы сохранить обновления, сделанные к модели во время выполнения.

Этот пример основывается на рабочем процессе, показанном в, Генерируют Код для Предсказания Остающегося Срока полезного использования. Можно использовать рабочий процесс этого примера, чтобы сгенерировать код для предсказания остающегося срока полезного использования с основанными на ухудшении моделями RUL, linearDegradationModel и exponentialDegradationModel.

Подбирайте модель RUL

Прежде, чем сгенерировать код для предсказания RUL, необходимо подбирать модель RUL с помощью исторических данных. В данном примере загрузите данные в linTrainTables.mat. Этот файл содержит измерения некоторого индикатора состояния, бравшегося в зависимости от времени, организованный в таблицы со столбцом маркирует "Time" и "Condition". Используйте эти данные, чтобы обучить линейную модель ухудшения. (Для получения дополнительной информации о конфигурировании и обучении этот тип модели RUL, смотрите linearDegradationModel.)

load('linTrainTables.mat')

mdl = linearDegradationModel;
fit(mdl,linTrainTables,"Time","Condition")

Подготовьте модель к генерации кода

Как описано в Генерируют Код для Предсказания Остающегося Срока полезного использования, чтобы подготовить модель к генерации кода, используют saveRULModelForCoder сохранить модель RUL как структуру данных в файле MAT. Позже, в функции точки входа, используйте loadRULModelForCoder загрузить и восстановить linearDegradationModel объект.

saveMATfilename = 'savedModel.mat';
saveRULModelForCoder(mdl,saveMATfilename);

Опционально, можно обновить параметры модели с помощью дополнительных данных, собранных после обучающих данных. В данном примере загрузите linTestData1, который является таблицей с 121 строкой значений индикатора состояния и времен. Используйте первые две записи в этой таблице, чтобы обновить модель.

load('linTestData.mat','linTestData1')
updateData = linTestData1(1:2,:);
update(mdl,updateData);

Затем считайте состояние модели с помощью readState. Эта команда преобразует объект модели RUL в структуру, которую можно передать функции точки входа как входной параметр.

savedState = readState(mdl);

Задайте функцию точки входа

Функция точки входа является функцией, для которой вы хотите сгенерировать код. В данном примере создайте функцию точки входа degradationRULPreserveState.m, как показано здесь.

type degradationRULPreserveState.m
function [estRULOut,ciOut,newState] = degradationRULPreserveState(data,restoreStateFlag,savedState)
%#codegen

persistent mdl

% Load the model the first time function is called
if isempty(mdl)
   mdl = loadRULModelForCoder('savedModel');  
end

% Restore the saved model parameters if needed
if restoreStateFlag
   restoreState(mdl,savedState);
end

% Update model and prediction with new data
threshold = 60;
update(mdl,data);
[estRULOut,ciOut] = predictRUL(mdl,threshold);

% Read the updated model parameters 
newState = readState(mdl);

end

Эта функция обновляет модель предсказания RUL использование update управляют каждый раз, когда это вызвано новыми входными данными. Объявление mdl как persistent переменная сохраняет обновленные параметры модели между вызовами, в то время как функция остается в памяти. Эта функция пишет обновленные параметры модели в выходной аргумент newState. Можно использовать этот выходной аргумент, чтобы сохранить обновленное состояние модели, когда функция очищена из памяти. Таким образом, например, при перезапуске алгоритма прогнозирования после завершения работы системы, можно установить restoreStateFlag к true и передайте в последний раз сохраненном savedState, обеспечение, что система возобновляет предсказание с помощью последний раз обновленных параметров модели.

Сгенерируйте код

Чтобы сгенерировать код, необходимо обеспечить выборочные данные, имеющие тип данных и формат каждого входного параметра, ожидаемого функцией точки входа. В данном примере используйте следующую запись в linTestData1. Кроме того, установите restoreStateFlag к логическому значению true.

testData = linTestData1(3,:);
restoreStateFlag = true;

Теперь можно сгенерировать код с помощью следующего codegen (MATLAB Coder) команда.

codegen degradationRULPreserveState -args {testData,restoreStateFlag,savedState} -nargout 3
Code generation successful.

Эта команда генерирует файл MEX, который является исполняемым файлом, который можно вызвать из MATLAB®. Можно использовать процедуры, похожие на этот пример, чтобы сгенерировать код для любой другой цели что codegen поддержки. В качестве альтернативы можно использовать приложение MATLAB Coder, как показано в Генерируют Код для Предсказания Остающегося Срока полезного использования.

Подтвердите сгенерированный код

Чтобы подтвердить сгенерированный код, в командной строке MATLAB, запускают функцию MATLAB точки входа на тестовых данных. Затем запустите сгенерированный файл MEX на тех же данных и подтвердите, что результатами является то же самое.

[estRUL,ci,newState] = degradationRULPreserveState(testData,restoreStateFlag,savedState);
[estRUL_mex,ci_mex,newState_mex] = degradationRULPreserveState_mex(testData,restoreStateFlag,savedState);

Например, сравните предполагаемый RUL, полученный с функцией MATLAB и сгенерированным файлом MEX.

estRUL,ci
estRUL = 113.8920
ci = 1×2

   83.0901  172.5393

estRUL_mex,ci_mex
estRUL_mex = 113.8920
ci_mex = 1×2

   83.0901  172.5393

Можно теперь использовать сгенерированный код в качестве части развернутой системы для предсказания остающегося срока полезного использования. Сохраните значение newState использовать, когда необходимо перезапустить систему. Например, возьмите следующую точку данных в linTestData1 и используйте его, чтобы обновить предсказание, начиная с newState_mex, состояние модели, сгенерированное в предыдущем вызове файла MEX.

testData2 = linTestData1(4,:);
[estRUL2_mex,ci2_mex,newState2_mex] = degradationRULPreserveState_mex(testData2,restoreStateFlag,newState_mex);

estRUL2_mex,ci2_mex
estRUL2_mex = 104.4336
ci2_mex = 1×2

   77.8216  154.1263

Обратите внимание на то, что функция MATLAB и файл MEX каждый управляет их собственными персистентными переменными. Поэтому значение файла MEX mdl теперь включает обновление от testData2, который значение функции mdl не делает. Чтобы сбросить значения этих персистентных переменных, явным образом очистите функцию и файл MEX из памяти.

clear degradationRULPreserveState;
clear degradationRULPreserveState_mex;

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

| | |

Похожие темы