Решатели 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. Оба решателя требуют, чтобы матрица Гессиана была положительна определенный.

  • Решатель активного набора — Этот решатель может обеспечить быструю и устойчивую эффективность для небольшого и задач оптимизации средней шкалы и в одинарной и в двойной точности. Решатель активного набора использует алгоритм KWIK от [1]. Чтобы использовать решатель активного набора, установите Optimizer.Algorithm свойство вашего контроллера MPC к 'active-set'. Чтобы сконфигурировать настройки алгоритма, используйте Optimizer.ActiveSetOptions свойство вашего контроллера.

  • Решатель внутренней точки — Этот решатель может обеспечить наилучшее решение для крупномасштабных задач оптимизации, таких как приложения MPC, которые осуществляют ограничения по большому предсказанию и управляют горизонтами. Этот решатель внутренней точки использует основной двойной алгоритм с корректором предиктора Mehrotra. Чтобы использовать решатель внутренней точки, установите Optimizer.Algorithm свойство вашего контроллера MPC к 'interior-point'. Чтобы сконфигурировать настройки алгоритма, используйте Optimizer.InteriorPointOptions свойство вашего контроллера.

Настройка решателя

При выборе и конфигурировании решателя QP для приложения, рассмотрите следующее:

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

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

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

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

  • Поиск решения 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 настраивает решение, таким образом, что это удовлетворяет всем вашим заданным ограничениям.

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

Для примера смотрите Использование Субоптимальное Решение в Быстрых Приложениях 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 и быть реализованным в скрипте 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.

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

Когда вы реализуете пользовательский решатель 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Проблема, кажется, неосуществима, то есть, ограничениям нельзя удовлетворить.
    -2Произошла неисправимая числовая ошибка.

Примечание

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

Использование quadprog как пользовательский решатель QP

Можно сконфигурировать объект MPC использовать решатель активного набора, доступный с quadprog (Optimization Toolbox) функция как пользовательский решатель QP.

Автоматически сконфигурировать объект MPC mpcobj использовать quadprog как пользовательский решатель QP и для симуляции и для генерации кода, можно использовать setCustomSolver функция. В частности в командной строке MATLAB, введите следующее.

setCustomSolver(mpcobj,'quadprog')
Эта команда генерирует, в текущей папке, файлы mpcCustomSolver.m и mpcCustomSolverCodeGen.m, которые внутренне вызывают quadprog (Optimization Toolbox). Это затем устанавливает mpcobj.Optimizer.CustomSolver и mpcobj.Optimizer.CustomSolverCodeGen к true.

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

Вернуться mpcobj назад использовать встроенный алгоритм, заданный в mpcobj.Optimizer.Algorithm и для симуляции и для генерации кода, вызвать setCustomSolver можно следующим образом.

setCustomSolver(mpcobj,'quadprog')
Этот наборы команд mpcobj.Optimizer.CustomSolver и mpcobj.Optimizer.CustomSolverCodeGen к false.

Интеграция с решателем FORCESPRO

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

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

Ссылки

[1] Шмид, C. и Л.Т. Биглер. "Методы Квадратичного программирования для Уменьшаемого Гессиана SQP". Computers & Chemical Engineering 18, № 9 (сентябрь 1994): 817–32. https://doi.org/10.1016/0098-1354 (94) E0001-4.

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

| | |

Похожие темы