По умолчанию нелинейные контроллеры MPC решают проблему нелинейного программирования с помощью fmincon с алгоритмом SQP, для которого требуется программное обеспечение Optimization Toolbox™. Если программное обеспечение Optimization Toolbox отсутствует, можно указать собственный нелинейный решатель.
Для нелинейных контроллеров MPC в момент времени tk задача нелинейной оптимизации использует следующие переменные решения:
Прогнозируемые значения состояния от времени tk + 1 до tk + p. Эти значения соответствуют строкам 2-p + 1 X входной аргумент вашей стоимости и функции ограничения, где p - горизонт прогнозирования.
Предсказанные управляемые переменные от времени tk до tk + p-1. Эти значения соответствуют обрабатываемым столбцам переменных в строках 1-p U входной аргумент функций затрат и ограничений.
Поэтому число решающих переменных NZ равно p (Nx + Nmv) + 1, Nx - числу состояний, Nmv - числу манипулируемых переменных, а + 1 - для глобальной переменной слабости.
Правильно настроенная стандартная задача линейной оптимизации MPC имеет уникальное решение. Однако нелинейные задачи оптимизации MPC часто допускают множество решений (локальных минимумов), и поиск решения может быть затруднен для решателя. В таких случаях важно обеспечить хорошую отправную точку вблизи глобального оптимума.
Во время моделирования с замкнутым контуром рекомендуется разогреть нелинейный решатель. Для этого в качестве начальных предположений для текущего интервала управления используйте предсказанное состояние и управляемые переменные траектории из предыдущего интервала управления. В Simulink ® блок Nonlinear MPC Controller настроен на использование этих траекторий в качестве начальных предположений по умолчанию. Чтобы использовать эти траектории в качестве начальных предположений в командной строке:
Вернуть opt выходной аргумент при вызове nlmpcmove. Это nlmpcmoveopt объект содержит любые параметры времени выполнения, указанные при предыдущем вызове nlmpcmove. Он также включает начальные догадки для государства (opt.X0) и управляемая переменная (opt.MV0) траектории и глобальная переменная слабости (opt.Slack0).
Передать этот объект как options входной аргумент для nlmpcmove для следующего интервала управления.
Эти шаги моделирования командной строки являются оптимальными, даже если не указаны другие параметры времени выполнения.
fmincon ВариантыПо умолчанию нелинейные контроллеры MPC оптимизируют управление с помощью fmincon на панели инструментов оптимизации. При первом создании геймпада Optimization.SolverOptions имущества nlmpc объект содержит стандарт fmincon опции со следующими настройками по умолчанию:
Используйте SQP алгоритм (SolverOptions.Algorithm = 'sqp')
Использовать градиенты целевой функции (SolverOptions.SpecifyObjectiveGradient = 'true')
Использовать градиенты зависимостей (SolverOptions.SpecifyConstraintGradient = 'true')
Не выводите сообщения об оптимизации в командное окно (SolverOptions.Display = 'none')
Эти опции не по умолчанию обычно улучшают производительность нелинейного контроллера MPC.
Можно изменить параметры решателя для приложения. Например, чтобы задать максимальное количество итераций решателя для приложения, задайте SolverOptions.MaxIter. Дополнительные сведения о доступных параметрах решателя см. в разделе fmincon(Панель инструментов оптимизации).
Как правило, не следует изменять SpecifyObjectiveGradient и SpecifyConstraintGradient опции решателя, поскольку это может существенно повлиять на производительность контроллера. Например, матрицы градиента ограничений являются разреженными и задаются SpecifyConstraintGradient значение false приведет к вычислению решателем градиентов, которые, как известно, равны нулю.
Если программное обеспечение Optimization Toolbox отсутствует, можно указать собственный нелинейный решатель. Для этого создайте пользовательскую функцию-оболочку, которая преобразует интерфейс функции решателя в соответствии с интерфейсом, ожидаемым нелинейным контроллером MPC. Пользовательская функция должна быть сценарием MATLAB ® или MAT-файлом по пути MATLAB. Пример, показывающий пользовательскую функцию оболочки решателя шаблона, см. в разделе Оптимизация лечения туберкулеза с помощью нелинейного MPC с помощью пользовательского решателя.
Для моделирования и создания кода для нелинейных контроллеров MPC можно использовать решатель нелинейного программирования, разработанный Embotech AG. Дополнительные сведения см. в разделе Реализация контроллеров MPC с помощью решателей Embotech FORCES PRO.
Как настроить nlmpc объект для использования пользовательской функции оболочки решателя, задайте его Optimization.CustomSolverFcn одним из следующих способов:
Имя функции в текущей рабочей папке или в пути MATLAB, указанное как вектор строки или символа
Optimization.CustomSolverFcn = "myNLPSolver";Обращаться к функции в текущей рабочей папке или по пути MATLAB
Optimization.CustomSolverFcn = @myNLPSolver;
Пользовательская функция оболочки решателя должна иметь подпись:
function [zopt,cost,flag] = myNLPSolver(FUN,z0,A,B,Aeq,Beq,LB,UB,NLCON)В этой таблице описываются входы и выходы этой функции, где:
NZ - количество решающих переменных.
Макинек - количество линейных ограничений неравенства.
Mceq - число линейных ограничений равенства.
Ncineq - количество нелинейных ограничений неравенства.
Nceq - количество нелинейных ограничений равенства.
| Аргумент | Ввод/вывод | Описание |
|---|---|---|
FUN | Вход | Нелинейная функция затрат для минимизации, заданная как дескриптор функции с сигнатурой: [F,G] = FUN(z) и аргументы:
|
z0 | Вход | Начальные догадки для значений переменных решения, заданных как вектор длины NZ |
A | Вход | Массив ограничений линейного неравенства, заданный как массив Mcineq-by-NZ. Вместе, A и B определите ограничения формы. |
B | Вход | Вектор ограничения линейного неравенства, заданный как вектор столбца длины Mcineq. Вместе, A и B определите ограничения формы. |
Aeq | Вход | Массив ограничений линейного равенства, заданный как массив Mceq-by-NZ. Вместе, Aeq и Beq определите ограничения формы. |
Beq | Вход | Вектор ограничения линейного равенства, заданный как вектор столбца длиной Mceq. Вместе, Aeq и Beq определите ограничения формы. |
LB | Вход | Нижние границы для переменных принятия решения, указанных как вектор столбца длиной NZ, где (i). |
UB | Вход | Верхние границы для переменных принятия решения, определяемые как вектор столбца длиной NZ, где (i). |
NLCON | Вход | Нелинейная функция ограничения, заданная как дескриптор функции с сигнатурой: [cineq,c,Gineq,Geq] = NLCON(z) и аргументы:
|
zopt | Продукция | Оптимальные значения переменных решения, возвращаемые как вектор длины NZ. |
cost | Продукция | Оптимальная стоимость, возвращаемая как скаляр. |
flag | Продукция | Флаг выхода, возвращаемый как одно из следующих значений:
|
При реализации пользовательской функции решателя рекомендуется использовать данные градиента затрат и ограничений, предоставляемые нелинейным контроллером MPC.
Если не удается получить решение с помощью пользовательского решателя, попробуйте определить специальное условие, для которого известно решение, и запустите решатель при этом условии. Если решатель расходится с этим начальным предположением:
Проверьте достоверность функций состояния и вывода в модели прогнозирования.
Если используется пользовательская функция затрат, проверьте ее правильность.
При использовании стандартной функции затрат MPC проверьте вес настройки контроллера.
Убедитесь, что все ограничения выполнимы при первоначальном предположении.
Если вы предоставляете пользовательские якобинские функции, проверьте свои якобинцы с помощью validateFcns.
nlmpc | fmincon (панель инструментов оптимизации)