Сгенерируйте код для предсказания остающегося срока полезного использования

В этом примере показано, как использовать MATLAB® Coder, чтобы развернуть алгоритм для предсказания остающегося срока полезного использования (RUL). Такая генерация кода полезна, когда вы обучили модель предсказания RUL, такую как linearDegradationModel или covariateSurvivalModel в MATLAB и готовы развернуть алгоритм прогнозирования для другой среды. Этот пример использует MATLAB Coder, чтобы сгенерировать файл MEX, который является исполняемым файлом из MATLAB. Можно использовать подобную процедуру, чтобы сгенерировать код для любой цели тот MATLAB Coder поддержки.

Рабочий процесс для генерации кода для предсказания RUL проиллюстрирован в следующей схеме. Первый шаг должен подбирать модель RUL с помощью исторических данных от системы, как описано в Обновлении Предсказание RUL, когда Данные Прибывают. Необходимо также записать функцию точки входа, от которой можно сгенерировать код. Этой функцией является функция MATLAB, которая получает новые данные из вашей системы и использует ее, чтобы предсказать новый RUL.

Можно использовать рабочий процесс этого примера, чтобы сгенерировать код для предсказания остающегося срока полезного использования с основанными на ухудшении моделями RUL (linearDegradationModel и exponentialDegradationModel) или с основанными на выживании моделями (covariateSurvivalModel и reliabilitySurvivalModel).

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

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

load('linTrainTables.mat')

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

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

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

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

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

Функция точки входа является функцией, для которой вы хотите сгенерировать код. Когда предсказание RUL, ваша точка входа функциональная сила берет входные данные, обрабатывает его в некотором роде, чтобы извлечь индикатор состояния, и затем использовать predictRUL получить новую оценку RUL из модели.

В данном примере создайте функцию точки входа degradationRULPredict.m, как показано здесь.

type degradationRULPredict.m
function [estRUL,ci,pdfRUL] = degradationRULPredict(data)
%#codegen

threshold = 60;

% Load prepared model
mdl = loadRULModelForCoder('savedModel.mat');

% Use input data for new prediction
[estRUL,ci,pdfRUL] = predictRUL(mdl,data,threshold);

end

Эта функция берет в качестве входа точку данных, состоящую из времени и значения индикатора состояния. Функция использует loadRULModelForCoder загружать версию обученной модели, ранее сохраненной с saveRULModelForCoder. Функция также включает необходимый %#codegen директива, которая дает Проверке кода команду с Анализатором кода (MATLAB Coder) помогать вам диагностировать и зафиксировать нарушения, которые могут привести к ошибкам во время генерации кода или во времени выполнения.

Возможности и ограничения функции точки входа

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

Ваша функция точки входа может обычно изменять свойства объекта модели RUL, которые не только для чтения. Однако значения следующих свойств, которые являются в противном случае чтением-записью, фиксируются в сгенерированном коде. Попытка изменить их во время выполнения генерирует ошибку.

  • LifeTimeVariable

  • LifeTimeUnit

  • DataVariables

  • CensorVariable (только модели выживания)

  • EncodedVariables (covariateSurvivalModel только)

  • EncodingMethod (covariateSurvivalModel только)

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

Чтобы сгенерировать код, необходимо обеспечить выборочные данные, имеющие тип данных и формат, ожидаемый функцией точки входа. В данном примере загрузите некоторые тестовые данные в том же формате как данные, вы раньше обучали модель RUL, таблицы значений индикатора состояния и времен. Поскольку ваша функция точки входа занимает время и значение как его вход, извлеките одну запись из таблицы тестовых данных. Для генерации кода определенные значения не имеют значения, только типы данных.

load('linTestData.mat','linTestData1')
testData = linTestData1(1,:);
testData
testData=1×2 table
    Time    Condition
    ____    _________

     1       2.1316  

Открытое приложение MATLAB Coder и задает функцию точки входа

В рабочем столе MATLAB, на вкладке Apps, под Генерацией кода, нажимают MATLAB Coder. Приложение MATLAB Coder открывается на странице Select Source Files. В Сгенерировать коде для функционального поля введите имя функции точки входа, degradationRULPredict. Затем нажмите Далее.

Задайте типы входных данных

Задавать типы входных данных для функции точки входа, на странице Define Input Types, testData использования в вызове degradationRULPredict. При вводе вызов, MATLAB Coder отображает обнаруженные входные типы и количество выходных параметров. Нажмите Далее, чтобы подтвердить.

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

Опционально, проверяйте функцию точки входа на проблемы, возникающие во время выполнения. Для этого нажмите Check for Issues. Когда вы готовы, нажимаете Далее, чтобы перейти к Сгенерировать Кодовой странице. На этой странице вы задаете цель для генерации кода. Можно сгенерировать код предсказания RUL для любой из целей, которые MATLAB Coder поддерживает, включая автономный код C/C++, код C/C++, скомпилированный к библиотеке или коду C/C++, скомпилированному к исполняемому файлу. В данном примере из списка типов Сборки, выберите MEX. Файл MEX является исполняемым файлом, который можно вызвать из MATLAB.

Нажмите Generate, чтобы сгенерировать файл MEX, degradationRULPredict_mex. Для получения дополнительной информации о возможностях MATLAB Coder и файлах это генерирует, смотрите, Генерируют код С при помощи Приложения MATLAB Coder (MATLAB Coder).

Сгенерируйте код с codegen Команда

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

codegen degradationRULPredict -args {testData} -nargout 3
Code generation successful.

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

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

[estRUL,ci,pdfRUL] = degradationRULPredict(testData);

[estRUL_mex,ci_mex,pdfRUL_mex] = degradationRULPredict_mex(testData);

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

estRUL
estRUL = 114.2927
estRUL_mex
estRUL_mex = 114.2927

Можно теперь использовать сгенерированный код в качестве части развернутой системы для предсказания остающегося срока полезного использования.

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

| |

Похожие темы