Вы построили модель в лаборатории, используя чистые данные. Что происходит, когда вы развертываете эту модель на реальных устройствах? На этом этапе многое может пойти не так, что приведет к перерасходу средств и ухудшению пользовательского опыта.

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

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