Вы построили модель в лаборатории, используя чистые данные. Что происходит, когда вы развертываете эту модель на реальных устройствах? На этом этапе многое может пойти не так, что приведет к перерасходу средств и ухудшению пользовательского опыта.
Моделирование физических процессов было постоянной темой в моей работе, и проекты варьировались от оценки температуры окружающего воздуха в помещении до измерения содержания этанола в пиве.
Инструментов для решения этих проблем предостаточно, и решения можно легко найти с помощью таких инструментов, как Jupyter, Maple, MATLAB и других. Однако когда приходит время превратить лабораторный процесс в производственное программное обеспечение, инженерам приходится перестраивать или портировать модель и алгоритмы на другую платформу.
Благодаря нашей совместной работе над рядом проектов доктор Бен Джордан и я разработали процесс, который позволяет кодировать модели один раз, в результате чего на каждом этапе жизненного цикла разработки продукта используется одна и та же реализация.
Для этого модели пишутся на C++ и взаимодействуют с пакетом оптимизации NLOpt. Определен API, который позволяет использовать библиотеку из таких сред, как Python, WebAssembly (JS) или C++.
void optimizer_model_diffeq(optimizer_model_params_t *m_params, state_type &x , state_type &dxdt , double t ) override { int data_index = (int)t; dxdt[0] = m_params->h * (m_data_buffer.rows[data_index].x[1] - x[0]) + m_params->q; }
С этой настройкой мы можем быть уверены, что вычисления, происходящие на нашем парке устройств, будут соответствовать тому, что было сделано во время калибровки и контроля качества, что также будет соответствовать тому, что происходило в лаборатории во время разработки.
Я создал репозиторий примеров, демонстрирующий эти инструменты в действии, для решения одной из моих любимых задач: оценки температуры окружающего воздуха с помощью мобильного устройства. https://github.com/parameter-estimation/ambient-temperature-estimation. Этот пример:
- Определяет термодинамическую модель на C++, связывающую температуру окружающего воздуха с температурой мобильного телефона.
- Создает расширение Python, позволяющее использовать библиотеку Jupyter.
- Демонстрирует обучение модели путем подгонки уравнений модели к реальному набору данных.
- Демонстрирует механизм логического вывода, который прогнозирует температуру окружающего воздуха на основе результатов обучения.
Я планирую написать немного больше о некоторых из этих компонентов, так что следите за обновлениями в ближайшее время.
- Моделирование в C++ против Python
- Как я использую расширения Python
- Обучение против прогнозирования