Прогнозирующий контроллер модели решатель QP преобразует задачу оптимизации MPC в общую форму проблема QP
подвергните линейным ограничениям неравенства
где
x является вектором решения.
H является матрицей Гессиана. Эта матрица является постоянной при использовании неявного MPC без онлайновых изменений веса.
A является матрицей линейных ограничительных коэффициентов. Эта матрица является постоянной при использовании неявного MPC.
b и f являются векторами.
В начале каждого интервала управления контроллер вычисляет H, f, A и b или, если они являются постоянными, получает их предварительно вычисленные значения.
Тулбокс использует алгоритм KWIK [1], чтобы решить задачу QP, которая требует, чтобы Гессиан был положителен определенный. На первом шаге управления KWIK использует cold start, в котором исходное предположение является неограниченным решением, описанным в Неограниченном Прогнозирующем Управлении Модели. Если x удовлетворяет ограничениям, это - оптимальное решение QP, x*, и алгоритм останавливается. В противном случае по крайней мере одному из линейных ограничений неравенства нужно удовлетворить как равенство. В этом случае KWIK использует эффективную, численно устойчивую стратегию определить активное ограничительное множество, удовлетворяющее стандартным условиям оптимизации. На выполняющих шагах управления KWIK использует warm start. В этом случае активное ограничительное множество, определенное на предыдущем шаге управления, становится исходным предположением для следующего.
Несмотря на то, что KWIK устойчив, рассмотрите следующее:
Одно или несколько линейных ограничений могут быть нарушены немного из-за числовых ошибок округления. Тулбокс использует некорректируемый относительный допуск. Этот допуск позволяет ограничительные нарушения 10-6 раз величины каждого термина. Такие нарушения рассматриваются нормальными и не генерируют предупреждающие сообщения.
Тулбокс также использует некорректируемый допуск при тестировании на оптимальное решение.
Поиск активного ограничительного множества является итеративным процессом. Если итерации достигают зависимого проблемой максимума, алгоритм останавливается. Для некоторых настроек контроллера максимальные итерации по умолчанию могут быть очень большими, который может заставить решатель QP, казаться, прекратить отвечать (см. mpc
).
Если ваша проблема включает трудные ограничения, этими ограничениями может быть infeasible (невозможный удовлетворить). Если алгоритм обнаруживает недопустимость, он сразу завершает работу.
В последних двух ситуациях, с аварийным результатом к поиску, контроллер сохраняет последний успешный контроль выход. Для получения дополнительной информации смотрите, mpcmove
команда. Можно обнаружить аварийный результат и заменить поведение по умолчанию, как вы считаете целесообразным.
Для данного приложения MPC с ограничениями нет никакого способа предсказать, сколько итерации решателя QP требуются, чтобы находить оптимальным решением. Кроме того, в режиме реального времени приложения количество итераций могут измениться существенно от одного интервала управления до следующего. В таких случаях время выполнения худшего случая может превысить предел, который позволен на аппаратной платформе и определен шагом расчета контроллера.
Можно гарантировать время выполнения худшего случая для контроллера MPC путем применения субоптимального решения после того, как количество итераций оптимизации превысит заданное максимальное значение. Чтобы установить время выполнения худшего случая, сначала определите время, необходимое для одной итерации оптимизации путем экспериментирования с контроллером при номинальных условиях. Затем установите верхнюю границу на количестве итераций на интервал управления. Например, если требуется приблизительно 1 мс, чтобы вычислить каждую итерацию на оборудовании, и шаг расчета контроллера составляет 10 мс, определите максимальный номер итераций, чтобы быть не больше, чем 10
.
MPCobj.Optimizer.MaxIter = 10;
По умолчанию у контроллера MPC объект есть нижняя граница 120
на максимальном количестве итераций.
По умолчанию, когда решатель достигает максимального количества итераций решателя без оптимального решения, контроллер содержит переменные, которыми управляют, в их предыдущих значениях. Чтобы использовать субоптимальное решение, достигнутое после итоговой итерации, установите UseSuboptimalSolution
опция к true
.
MPCobj.Optimizer.UseSuboptimalSolution = true;
В то время как решение не оптимально, когда применено, оно удовлетворяет всем вашим заданным ограничениям.
Нет никакой гарантии, что субоптимальное решение выполняет лучше, чем содержание контроллера вывело постоянный. Можно симулировать систему с помощью обоих подходов и выбрать настройку, которая обеспечивает лучшую производительность контроллера.
Для примера смотрите Использование Субоптимальное Решение в Быстрых Приложениях MPC.
Чтобы получить доступ к встроенному решателю KWIK для приложений, которые требуют решения онлайновые проблемы QP, используйте mpcqpsolver
команда. Эта опция полезна для:
Усовершенствованные приложения MPC, которые выходят за рамки программного обеспечения Model Predictive Control Toolbox™.
Пользовательские приложения QP, включая приложения, которые требуют генерации кода.
Программное обеспечение Model Predictive Control Toolbox позволяет вам задать пользовательский решатель QP для своего контроллера MPC. Этот решатель называется вместо встроенного qpkwik
решатель в каждом интервале управления. Эта опция полезна для:
Проверка результатов симуляции или генерация кода со сторонним решателем.
Большие проблемы MPC, куда встроенный решатель KWIK медленно запускается или не удается найти выполнимое решение.
Можно задать пользовательский решатель для симуляции или для генерации кода. В любом экземпляре вы задаете пользовательский решатель с помощью пользовательской функции и конфигурируете контроллер, чтобы использовать эту пользовательскую функцию.
Пользовательская функция решателя | Затронутый MATLAB® Functions | Затронутый Simulink® Blocks | |
---|---|---|---|
Симуляция Установите
|
Поддержки:
|
|
|
Генерация кода Установите
|
Поддержки:
|
|
Симулировать контроллер 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.
Симулируйте свой контроллер. Для получения дополнительной информации смотрите Симуляцию.
Для примера смотрите, Симулируют Контроллер MPC с Пользовательским Решателем QP.
Можно сгенерировать код для контроллеров 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, см. Приложения Файла MEX на C (MATLAB).
Когда вы реализуете пользовательский решатель QP, ваша пользовательская функция должна иметь одну из следующих подписей:
При использовании пользовательского решателя для симуляции:
function [x,status] = mpcCustomSolver(H,f,A,b,x0)
При использовании пользовательского решателя для генерации кода:
function [x,status] = mpcCustomSolverCodeGen(H,f,A,b,x0)
В обоих случаях ваш пользовательский решатель имеет следующие аргументы ввода и вывода:
H
матрица Гессиана, заданная как an n-by-n симметричная положительная определенная матрица, где n является количеством переменных оптимизации.
f
множитель линейного члена целевой функции, заданного как вектор-столбец длины n.
A
матрица линейных коэффициентов ограничения неравенства, заданных как m-by-n матрица, где m является количеством ограничений.
b
правая сторона уравнения ограничения неравенства, заданного как вектор-столбец длины m.
x0
исходное предположение для решения, заданного как вектор-столбец длины n.
x
оптимальное решение, возвращенное как вектор-столбец длины n.
status
индикатор валидности решения, возвращенный как целое число согласно следующему:
Значение | Описание |
---|---|
> 0
| x оптимально. status представляет количество итераций, выполняемых во время оптимизации. |
0
| Максимальное количество итераций было достигнуто, не находя оптимальное решение. Решение, Если |
-1
| Проблема, кажется, неосуществима, то есть, ограничение не может быть удовлетворен. |
-2
| Произошла неисправимая числовая ошибка. |
[1] Шмид, C. и Л.Т. Биглер, "Методы квадратичного программирования для уменьшаемого Гессиана SQP", Computers & Chemical Engineering, Издание 18, Номер 9, 1994, стр 817–832.
mpc
| mpcmove
| mpcqpsolver