Оценка недостающих параметров модели
Оценка параметров
Если думать о создании моделей объекта управления с точки зрения данных, которые у нас есть о модели, то часто разделяют 3 подхода:
Модель белого ящика – это модель, в которой мы знаем всю основную динамику системы.
Напротив, модель черного ящика подразумевает то, что мы не знаем динамику вообще.
В этом примере разбирается промежуточный подход серого ящика, когда мы знаем структуру модели, но нам недостает некоторых параметров.
Недостающие параметры можно подобрать по экспериментальным данным. Это довольно сложный алгоритм, но благодаря совместной работе скриптов и моделей, в коде можно реализовать даже такую непростую задачу.
Для удобства переиспользования алгоритма в других проектах код скрыт Масками кодовых ячеек. Маски работают только в Редакторе кода, поэтому полный функционал не доступен в Сообществе. Поэтому ниже маскированный код заменен скриншотами из файла parameter_estimation.ngscript.
Загрузка данных из таблицы
using DataFrames, CSV;

.png)
df_in = DataFrame(time=exp_time_data, value=exp_in_data)
df_in = Float64.(df_in);
wa_in = WorkspaceArray(string(rand()), df_in)
В этом примере объект управления – двигатель постоянного тока. В модели указаны все известные параметры из документации на двигатель. Но трение в документации не дано, поэтому сейчас в блоках коэффициентов вязкого трения и трения скольжения находятся примерные значения.
Следующая ячейка запускает модель на симуляцию, чтобы убедиться, что результаты модели будут далеки от экспериментальных данных.
Сравнение экспериментальных данных и данных модели
.png)
Подключение библиотек для оценки
using DataFrames
try
using NLopt
catch
Pkg.add(["NLopt"])
using NLopt
end
try
using Interpolations
catch
Pkg.add(["Interpolations"])
using Interpolations
end


Результат:
За 30 итераций у нас подобрались следующие параметры:
Результаты оценки:
b = 0.024429360665833955
c = 1.4808238712308082
Результаты нас вполне устраивают.
Чтобы улучшить результат, можно экспериментировать с начальными предположениями, настройками оптимизации, а также подавать различные входные данные на экспериментальный стенд.