Решатель контроллера прогнозирования QP модели преобразует линейную задачу оптимизации MPC в общую задачу QP
)
с учетом ограничений линейного неравенства
где
x - вектор решения.
H - матрица Гессена. Эта матрица является постоянной, если во время выполнения модели прогнозирования и веса настройки не изменяются.
A - матрица коэффициентов линейных ограничений. Эта матрица является постоянной, когда модель прогнозирования не изменяется во время выполнения.
b и f - векторы.
В начале каждого интервала управления контроллер вычисляет H, f, A и b. Если H или A являются постоянными, контроллер извлекает их предварительно вычисленные значения.
Программное обеспечение Model Predictive Control Toolbox™ поддерживает два встроенных алгоритма для решения задачи QP. Оба решателя требуют, чтобы матрица Гессена была положительной определенной.
Решатель Active-set - этот решатель обеспечивает высокую и надежную производительность для задач оптимизации малого и среднего масштаба как с одинарной, так и с двойной точностью. Решатель активного набора использует алгоритм KWIK из [1]. Чтобы использовать решатель активного набора, установите Optimizer.Algorithm свойство контроллера MPC для 'active-set'. Для настройки параметров алгоритма используйте Optimizer.ActiveSetOptions свойство вашего контроллера.
Решатель внутренних точек - этот решатель может обеспечить превосходную производительность для крупномасштабных задач оптимизации, таких как приложения MPC, которые накладывают ограничения на большие горизонты прогнозирования и управления. Этот решатель внутренних точек использует основной-двойной алгоритм с предиктором-корректором Мехротры. Чтобы использовать решатель внутренних точек, установите Optimizer.Algorithm свойство контроллера MPC для 'interior-point'. Для настройки параметров алгоритма используйте Optimizer.InteriorPointOptions свойство вашего контроллера.
При выборе и настройке решателя QP для приложения необходимо учитывать следующее:
Размер и конфигурация проблемы MPC влияет на производительность встроенных решателей QP. Чтобы определить, какой решатель лучше всего подходит для вашего приложения, рассмотрите возможность моделирования контроллера в нескольких сценариях моделирования с использованием обоих решателей QP.
Решатель внутренних точек более чувствителен к параметрам решателя, чем решатель активного набора. Поэтому для нахождения оптимального баланса между производительностью и надежностью может потребоваться дополнительная настройка.
Решатель активного набора также использует нерегулируемый допуск при тестировании оптимального решения. Можно настроить допуски оптимальности для решателя внутренних точек.
Одно или несколько линейных ограничений могут быть слегка нарушены из-за численных ошибок скругления. Такие нарушения являются нормальными и не вызывают предупреждающих сообщений. Чтобы настроить допуск для допустимых нарушений ограничений, используйте ConstraintTolerance для решателя активного набора или внутренней точки.
Поиск решения QP является итеративным процессом. Для любого решателя можно указать максимальное количество итераций с помощью соответствующего MaxIterations установка. Если число итераций достигает максимума, алгоритм завершается.
Максимальное число итераций по умолчанию для решателя активного набора равно nv), где nc и nv - количество ограничений и переменных оптимизации по горизонту прогнозирования соответственно. Для некоторых конфигураций контроллера это значение может быть очень большим, что может привести к тому, что решатель QP перестанет отвечать. Это значение имеет нижнюю границу 120.
Максимальное количество итераций по умолчанию для решателя внутренних точек: 50.
Если проблема MPC включает жесткие ограничения после преобразования в проблему QP, ограничения неравенства QP могут быть неосуществимыми (невозможно удовлетворить). Если решатель QP обнаруживает несходимость, он немедленно завершает работу.
Когда решатель обнаруживает неосуществимую проблему или достигает максимального количества итераций без нахождения оптимального решения, контроллер сохраняет последний успешный управляющий выход. Дополнительные сведения см. в разделе mpcmove. Можно обнаружить ненормальный результат и переопределить поведение по умолчанию по своему усмотрению.
На первом этапе управления решатели QP используют холодный запуск, в котором начальным предположением является неограниченное решение, описанное в разделе Неограниченное модельное предиктивное управление. Если x удовлетворяет ограничениям, это оптимальное решение QP и алгоритм завершается. В противном случае по крайней мере одно из ограничений линейного неравенства должно быть удовлетворено как равенство, и решатель вычисляет оптимальное решение. Для последующих этапов управления:
Решатель активного набора использует теплый старт, где активный набор ограничений, определенный на предыдущем шаге управления, становится начальным предположением.
Решатель внутренних точек продолжает использовать холодный запуск.
Для данного приложения MPC с ограничениями нет возможности предсказать, сколько итераций решателя QP требуется для поиска оптимального решения. Кроме того, в приложениях реального времени количество итераций может резко изменяться от одного интервала управления к следующему. В таких случаях время выполнения наихудшего случая может превышать предел, который разрешен на аппаратной платформе и определяется временем выборки контроллера.
Вы устанавливаете гарантированное наихудшее время выполнения для контроллера MPC, применяя неоптимальное решение после того, как число итераций оптимизации превысит указанное максимальное значение. Чтобы задать наихудшее время выполнения, сначала определите время, необходимое для одной итерации оптимизации, экспериментируя с контроллером в номинальных условиях. Затем задайте верхнюю границу для количества итераций на интервал управления. Например, если для вычисления каждой итерации на оборудовании требуется около 1 мс, а время выборки контроллера составляет 10 мс, установите максимальное количество итераций не более 10.
MPCobj.Optimizer.ActiveSetOptions.MaxIterations = 10;
По умолчанию объект контроллера MPC имеет нижнюю границу 120 о максимальном количестве итераций решателя активного набора.
По умолчанию, когда решатель достигает максимального числа итераций решателя без оптимального решения, контроллер удерживает управляемые переменные на их предыдущих значениях. Чтобы использовать неоптимальное решение, достигнутое после окончательной итерации, установите UseSuboptimalSolution опция для true.
MPCobj.Optimizer.UseSuboptimalSolution = true;
Хотя решение не является оптимальным, контроллер MPC настраивает решение таким образом, чтобы оно удовлетворяло всем указанным ограничениям.
Нет никакой гарантии, что неоптимальное решение будет работать лучше, чем при сохранении постоянной выходного сигнала контроллера. Вы можете смоделировать систему, используя оба подхода, и выбрать конфигурацию, которая обеспечивает более высокую производительность контроллера.
Пример см. в разделе Использование неоптимального решения в приложениях Fast MPC.
Чтобы получить доступ к решателям QP для приложений, требующих решения проблем QP в режиме онлайн, используйте mpcActiveSetSolver и mpcInteriorPointSolver функции, которые полезны для:
Расширенные приложения MPC, выходящие за рамки программного обеспечения Model Predictive Control Toolbox.
Пользовательские приложения QP, включая приложения, требующие создания кода.
Программное обеспечение Model Predictive Control Toolbox позволяет указать пользовательский решатель QP для контроллера MPC. Этот решатель вызывается вместо встроенных решателей на каждом интервале управления. Этот параметр полезен для:
Проверка результатов моделирования или создание кода с помощью внешнего решателя, которому вы доверяете.
Приложения, в которых встроенные решатели не обеспечивают удовлетворительную производительность для конкретной проблемы.
Можно определить пользовательский решатель для моделирования или создания кода. В любом случае можно определить пользовательский решатель с помощью пользовательской функции и настроить контроллер на использование этой пользовательской функции.
| Задача | Пользовательская функция решателя | Затронутые функции MATLAB ® | Затронутые блоки Simulink ® |
|---|---|---|---|
Моделирование Набор
|
Поддерживает:
|
|
|
Создание кода Набор
|
Поддерживает:
|
|
Чтобы смоделировать контроллер MPC с помощью пользовательского решателя QP, выполните следующие действия.
Скопируйте файл шаблона решателя в рабочую папку или в любое место пути MATLAB и переименуйте его mpcCustomSolver.m. Чтобы скопировать шаблон решателя в текущую рабочую папку, введите в командной строке MATLAB следующее.
src = which('mpcCustomSolver.txt'); dest = fullfile(pwd,'mpcCustomSolver.m'); copyfile(src,dest,'f');
Изменить mpcCustomSolver.m путем добавления собственного пользовательского решателя. Решатель должен иметь возможность запуска в MATLAB и быть реализован в сценарии MATLAB или файле MEX.
Настройка контроллера MPC MPCobj для использования пользовательского решателя.
MPCobj.Optimizer.CustomSolver = true;
Теперь программа использует пользовательский решатель для моделирования вместо встроенного решателя QP KWIK.
Смоделировать геймпад. Дополнительные сведения см. в разделе Моделирование.
Пример см. в разделе Simulate MPC Controller with a Custom QP Solver.
Можно создать код для контроллеров MPC, использующих пользовательский решатель QP, написанный в коде C/C + + или MATLAB, подходящем для генерации кода.
Для этого в командной строке необходимо иметь программное обеспечение MATLAB Coder™.
Для этого в Simulink необходимо иметь программное обеспечение Simulink Coder или Simulink PLC Coder™.
Чтобы создать код для контроллеров MPC, использующих пользовательский решатель QP, выполните следующие действия.
Скопируйте файл шаблона решателя в рабочую папку или в любое место пути MATLAB и переименуйте его mpcCustomSolverCodeGen.m. Чтобы скопировать шаблон кода MATLAB в текущую рабочую папку, введите в командной строке MATLAB следующее.
src = which('mpcCustomSolverCodeGen_TemplateEML.txt'); dest = fullfile(pwd,'mpcCustomSolverCodeGen.m'); copyfile(src,dest,'f');
Также можно использовать шаблон C.
src = which('mpcCustomSolverCodeGen_TemplateC.txt'); dest = fullfile(pwd,'mpcCustomSolverCodeGen.m'); copyfile(src,dest,'f');
Изменить mpcCustomSolverCodeGen.m путем добавления собственного пользовательского решателя.
Настройка контроллера MPC MPCobj для использования пользовательского решателя.
MPCobj.Optimizer.CustomSolverCodeGen = true;
Теперь программа использует пользовательский решатель для генерации кода вместо встроенного решателя QP KWIK.
Создайте код для контроллера. Дополнительные сведения см. в разделе Создание кода и развертывание контроллера в целях реального времени.
Пример см. в разделе Моделирование и генерация кода для контроллера MPC с помощью пользовательского решателя QP.
Можно внедрить один и тот же пользовательский решатель QP как для моделирования, так и для генерации кода. Для этого:
Установить оба Optimizer.CustomSolver и Optimizer.CustomSolverCodeGen кому true.
Создать оба mpcCustomSolver.m и mpcCustomSolverCodeGen.m.
Во время моделирования контроллер использует mpcCustomSolver.m пользовательская функция. Для создания кода ваш контроллер использует mpcCustomSolverCodeGen.m пользовательская функция.
Один и тот же код MATLAB можно указать в обеих пользовательских функциях решателя при условии, что код подходит для генерации кода.
При внедрении mpcCustomSolverCodeGen.m с помощью кода C/C + + создайте файл MEX с помощью этого кода. Затем можно вызвать этот MEX-файл изmpcCustomSolver.m. Дополнительные сведения о создании и использовании файлов MEX см. в разделе Файловые приложения C MEX.
При реализации пользовательского решателя QP пользовательская функция должна иметь одну из следующих сигнатур:
Пользовательский решатель для моделирования:
function [x,status] = mpcCustomSolver(H,f,A,b,x0)Пользовательский решатель для создания кода:
function [x,status] = mpcCustomSolverCodeGen(H,f,A,b,x0)Для моделирования и генерации кода пользовательский решатель имеет следующие входные и выходные аргументы.
H - матрица Гессена, заданная как n-на-n симметричная положительная определенная матрица, где n - число переменных оптимизации.
f - множитель линейного члена целевой функции, определяемый как вектор столбца длиной n.
A - матрица коэффициентов ограничения линейного неравенства, заданная как матрица m-на-n, где m - число ограничений.
b - правая часть уравнения ограничения неравенства, заданная в виде вектора столбца длиной m.
x0 является начальным предположением для решения, определяемым как вектор столбца длиной n.
x является оптимальным решением, возвращаемым в виде вектора столбца длиной n.
status - индикатор достоверности решения, возвращаемый в виде целого числа, как показано в следующей таблице.
| Стоимость | Описание |
|---|---|
> 0 | x оптимален. status представляет количество итераций, выполненных во время оптимизации. |
0 | Достигнуто максимальное количество итераций без нахождения оптимального решения. Решение Если |
-1 | Проблема представляется неосуществимой, то есть ограничения не могут быть удовлетворены. |
-2 | Неустранимая числовая ошибка. |
Примечание
Контроллер MPC ожидает, что пользовательские функции решателя решат задачу QP с учетом ограничений линейного неравенства. Если пользовательский решатель использует , необходимо изменить знак обоих A и b перед передачей их в пользовательский код решателя.
Можно использовать FORCES PRO, встроенное программное обеспечение оптимизации в реальном времени, разработанное Embotech AG, для моделирования и генерации кода контроллера MPC, разработанного с помощью программного обеспечения Model Predictive Control Toolbox. Начиная с FORCES PRO 2.0, Embotech предоставляет плагин, который использует конструктивные возможности программного обеспечения Model Predictive Control Toolbox и вычислительную производительность FORCES PRO. С помощью плагина можно создать пользовательский решатель QP, который позволяет развертывать на оборудовании реального времени и оптимизирован на основе конкретной проблемы MPC для достижения удовлетворительной производительности в реальном времени. Особенно длинные задачи ПДК могут решаться очень эффективно.
Сведения об использовании решателя FORCES PRO вместе с программным обеспечением Model Predictive Control Toolbox см. в разделе Реализация контроллеров MPC с помощью решателей Embotech FORCES PRO.
[1] Шмид, C. и Л.Т. Биглер. «Квадратичные методы программирования для сокращенного гессенского SQP». Computers & Chemical Engineering 18, No 9 (сентябрь 1994 года): 817-32. https://doi.org/10.1016/0098-1354 (94) E0001-4.
mpc | mpcActiveSetSolver | mpcInteriorPointSolver | mpcmove