Решатели QP

Решатель QP прогнозирующего контроллера модели преобразует линейную задачу оптимизации MPC в общую задачу QP вида

Minx(12xHx+fx)

удовлетворяющее линейным ограничениям неравенства

Axb

где

  • x - вектор решения.

  • H - матрица Гессия. Эта матрица является постоянной, когда ваша модель предсказания и веса настройки не изменяются во время исполнения.

  • A является матрицей линейных ограничительных коэффициентов. Эта матрица является постоянной, когда ваша модель предсказания не меняется во время исполнения.

  • b и f являются векторами.

В начале каждого контрольного интервала контроллер вычисляет H, f, A и b. Если H или A является постоянным, контроллер извлекает их предварительно вычисленные значения.

Встроенные решатели QP

Программное обеспечение 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.

  • Решатель внутренней точки более чувствителен к параметрам решателя, чем решатель с активной установкой. Поэтому это может потребовать большей регулировки, чтобы найти оптимальный баланс между эффективностью и робастностью.

  • Решатель active-set также использует нерегулируемый допуск при тестировании для оптимального решения. Можно настроить допуски оптимальности для решателя внутренней точки.

  • Одно или несколько линейных ограничений могут быть незначительно нарушены из-за численных ошибок округления. Такие нарушения являются нормальными и не генерируют предупреждающих сообщений. Чтобы настроить допуск на допустимые нарушения ограничений, используйте ConstraintTolerance настройка для решателя active-set или interior-point.

  • Поиск решения QP является итеративным процессом. Для любого решателя можно задать максимальное количество итераций с помощью соответствующей MaxIterations настройка. Если количество итераций достигает максимума, алгоритм прекращает работать.

  • Максимальное количество итераций по умолчанию для решателя с активной установкой: 4(nc+nv), где nc и nv являются количеством ограничений и переменных оптимизации через горизонт предсказания, соответственно. Для некоторых строений контроллера это значение может быть очень большим, из-за чего решатель QP перестает отвечать. Это значение имеет нижнюю границу 120.

  • Максимальное количество итераций по умолчанию для решателя внутренней точки 50.

  • Если ваша задача MPC включает жесткие ограничения после преобразования в задачу QP, ограничения неравенства QP могут быть infeasible (невозможно удовлетворить). Если решатель QP обнаруживает недопустимость, он немедленно завершается.

Когда решатель обнаруживает недопустимую задачу или достигает максимального количества итераций, не находя оптимального решения, контроллер сохраняет последний успешный выход управления. Для получения дополнительной информации см. mpcmove. Вы можете обнаружить ненормальный результат и переопределить поведение по умолчанию, как вы считаете нужным.

На первом этапе управления решатели QP используют cold start, в котором начальное предположение является решением без ограничений, описанным в Прогнозирующем Управлении Без Ограничений Модели. Если x удовлетворяет ограничениям, это оптимальное решение QP, и алгоритм прекращает работать. В противном случае, по крайней мере, одно из линейных ограничений неравенства должно быть выполнено как равенство, и решатель вычисляет оптимальное решение. Для последующих шагов управления:

  • Решатель активного набора использует warm start, где активное ограничительное множество, определенный на предыдущем шаге управления, становится начальным предположением.

  • Решатель внутренней точки продолжает использовать холодный запуск.

Субоптимальное решение 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 для приложений, которые требуют решения онлайн задач QP, используйте mpcActiveSetSolver и mpcInteriorPointSolver функции, которые полезны для:

  • Расширенные приложения MPC, которые выходят за рамки программного обеспечения Model Predictive Control Toolbox.

  • Пользовательские приложения QP, включая приложения, которые требуют генерации кода.

Пользовательский решатель QP

Программное обеспечение Model Predictive Control Toolbox позволяет вам задать пользовательский решатель QP для контроллера MPC. Этот решатель вызывается вместо встроенных решателей на каждом контрольном интервале. Эта опция полезна для:

  • Валидация результатов симуляции или генерация кода с помощью собственного стороннего решателя, которому вы доверяете.

  • Приложения, в которых встроенные решатели не обеспечивают удовлетворительную эффективность для вашей конкретной задачи.

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

ЗадачаПользовательская функция решателяЗатронутое MATLAB® ФункцииЗатронутый Simulink® Блоки

Симуляция

Задайте Optimizer.CustomSolver на true.

Optimizer.CustomSolverCodeGen игнорируется.

mpcCustomSolver.m

Поддерживает:

  • Код MATLAB

  • Файлы MEX

  • sim

  • mpcmove

  • mpcmoveAdaptive

  • mpcmoveMultiple

  • mpcmoveCodeGeneration

  • MPC Controller

  • Adaptive MPC Controller

  • Multiple MPC Controllers

Генерация кода

Задайте Optimizer.CustomSolverCodeGen на true.

Optimizer.CustomSolver игнорируется.

mpcCustomSolverCodeGen.m

Поддерживает:

  • Код MATLAB, подходящий для генерации кода

  • Код C/C + +

  • mpcMoveCodeGeneration

Пользовательский решатель для симуляции

Чтобы симулировать контроллер MPC с пользовательским решателем QP, выполните следующие шаги.

  1. Скопируйте файл шаблона решателя в рабочую папку или где угодно по пути MATLAB и переименуйте его mpcCustomSolver.m. Чтобы скопировать шаблон решателя в текущую рабочую папку, введите следующее в командной строке MATLAB.

    src = which('mpcCustomSolver.txt');
    dest = fullfile(pwd,'mpcCustomSolver.m');
    copyfile(src,dest,'f');
  2. Изменение mpcCustomSolver.m путем добавления собственного пользовательского решателя. Ваш решатель должен уметь запускаться в MATLAB и быть реализован в скрипте или Файле MEX MATLAB.

  3. Сконфигурируйте контроллер MPC MPCobj для использования пользовательского решателя.

    MPCobj.Optimizer.CustomSolver = true;

    Теперь программное обеспечение использует ваш пользовательский решатель для симуляции вместо встроенного решателя QP KWIK.

  4. Симулируйте свой контроллер. Для получения дополнительной информации см. раздел Симуляции.

Для получения примера смотрите Моделирование контроллера MPC с пользовательским решателем QP.

Пользовательский решатель для генерации кода

Можно сгенерировать код для контроллеров MPC, которые используют пользовательский решатель QP, написанный либо кодом C/C + +, либо кодом MATLAB, подходящим для генерации кода.

  • Для этого в командной строке необходимо иметь программное обеспечение MATLAB Coder™.

  • Для этого в Simulink вы должны иметь программное обеспечение Simulink Coder или Simulink PLC Coder™.

Чтобы сгенерировать код для контроллеров MPC, которые используют пользовательский решатель QP, выполните следующие шаги.

  1. Скопируйте файл шаблона решателя в рабочую папку или где угодно по пути 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');
  2. Изменение mpcCustomSolverCodeGen.m путем добавления собственного пользовательского решателя.

  3. Сконфигурируйте контроллер MPC MPCobj для использования пользовательского решателя.

    MPCobj.Optimizer.CustomSolverCodeGen = true;

    Теперь программное обеспечение использует ваш пользовательский решатель для генерации кода вместо встроенного решателя QP KWIK.

  4. Сгенерируйте код для контроллера. Для получения дополнительной информации см. «Генерация кода» и «Развертывание контроллера на целевых устройствах в реальном времени».

Для получения примера смотрите Моделирование и Генерация кода для контроллера 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 Applications.

Реализация пользовательской функции решателя

При реализации пользовательского решателя QP ваша пользовательская функция должна иметь одну из следующих сигнатур:

  • Пользовательский решатель для симуляции:

    function [x,status] = mpcCustomSolver(H,f,A,b,x0)
  • Пользовательский решатель для генерации кода:

    function [x,status] = mpcCustomSolverCodeGen(H,f,A,b,x0)

Для симуляции и генерации кода ваш пользовательский решатель имеет следующие входные и выходные аргументы.

  • H - матрица Гессия, заданная как n -by n симметричная положительно определенная матрица, где n - количество переменных оптимизации.

  • f - умножитель линейного члена целевой функции, заданный как вектор-столбец длины n.

  • A - матрица линейных коэффициентов ограничения неравенства, заданная как m -by - n матрица, где m - количество ограничений.

  • b - правая сторона уравнения ограничения неравенства, заданная как вектор-столбец m длины.

  • x0 является начальным предположением для решения, заданным как вектор-столбец длины n.

  • x - оптимальное решение, возвращаемое как вектор-столбец длины n.

  • status - индикатор валидности решения, возвращаемый в виде целого числа, как показано в следующей таблице.

    ЗначениеОписание
    > 0x оптимально. status представляет количество итераций, выполненных во время оптимизации.
    0

    Максимальное количество итераций было достигнуто, не найдя оптимального решения. Решение x может быть неоптимальным или недопустимым.

    Если на Optimizer.UseSuboptimalSolution свойство вашего контроллера trueконтроллер использует неоптимальное решение в x когда status является 0.

    -1Задача представляется недопустимой, то есть ограничения не могут быть удовлетворены.
    -2Произошла неустранимая числовая ошибка.

Примечание

Контроллер MPC ожидает, что пользовательские функции решателя решат задачу QP, удовлетворяющую линейным ограничениям неравенства Axb. Если ваш пользовательский решатель использует Axbнеобходимо изменить знак обоих A и b прежде чем передать их в ваш пользовательский код решателя.

Интегрирование с решателем FORCES PRO

Можно использовать FORCES PRO, встроенный программный инструмент оптимизации в реальном времени, разработанный Embotech AG, для моделирования и генерации кода для контроллера MPC, разработанного с помощью программного обеспечения Model Predictive Control Toolbox. Начиная с версии FORCES PRO 2.0, Embotech предоставляет плагин, который использует возможности проекта программного обеспечения Model Predictive Control Toolbox и вычислительную эффективность FORCES PRO. Используя плагин, можно сгенерировать пользовательский решатель QP, который позволяет развертывание на оборудовании в реальном времени и высоко оптимизирован на основе вашей конкретной задачи MPC, чтобы достичь удовлетворительной эффективности в реальном времени. Особенно длинногоризонные проблемы MPC могут быть решены очень эффективно.

Для получения информации об использовании решателя FORCES PRO вместе с программным обеспечением Model Predictive Control Toolbox, смотрите Реализуйте Контроллеры MPC, используя Решатели Embotech FORCES PRO.

Ссылки

[1] Шмид, С. и Л.Т. Биглер. «Квадратичные методы программирования для сокращенного гессианского SQP». Компьютеры и химическая техника 18, № 9 (сентябрь 1994): 817-32. https://doi.org/10.1016/0098-1354 (94) E0001-4.

См. также

| | |

Похожие темы