Решатель QP

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

Minx(12xHx+fx)

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

Axb

где

  • 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, казаться, прекратить отвечать (см. Оптимизатор).

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

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

Субоптимальное решение QP

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

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

MPCobj.Optimizer.MaxIter = 10;

По умолчанию у контроллера MPC объект есть нижняя граница 120 на максимальном количестве итераций.

По умолчанию, когда решатель достигает максимального количества итераций решателя без оптимального решения, контроллер содержит переменные, которыми управляют, в их предыдущих значениях. Чтобы использовать субоптимальное решение, достигнутое после итоговой итерации, установите опцию UseSuboptimalSolution на true.

MPCobj.Optimizer.UseSuboptimalSolution = true;

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

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

Для примера смотрите Использование Субоптимальное Решение в Быстрых Приложениях MPC.

Пользовательское приложение QP

Чтобы получить доступ к встроенному решателю KWIK для приложений, которые требуют решения онлайновые проблемы QP, используйте команду mpcqpsolver. Эта опция полезна для:

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

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

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

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

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

  • Большие проблемы MPC, куда встроенный решатель KWIK медленно запускается или не удается найти выполнимое решение.

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

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

Симуляция

Установите Optimizer.CustomSolver на true.

Optimizer.CustomSolverCodeGen проигнорирован.

mpcCustomSolver.m

Поддержки:

  • КОД MATLAB

  • Файлы MEX

  • sim

  • mpcmove

  • mpcmoveAdaptive

  • mpcmoveMultiple

  • mpcmoveCodeGeneration

  • Контроллер MPC

  • Адаптивный контроллер MPC

  • Несколько контроллеров MPC

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

Установите 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 и быть реализованным в скрипте MATLAB или файле MEX.

  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 (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 является индикатором валидности решения, возвращенным как целое число согласно следующему:

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

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

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

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

Ссылки

[1] Шмид, C. и Л.Т. Биглер, "Методы квадратичного программирования для уменьшаемого Гессиана SQP", Computers & Chemical Engineering, Издание 18, Номер 9, 1994, стр 817–832.

Смотрите также

| |

Похожие темы