По умолчанию нелинейные контроллеры 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 Toolbox. Когда вы впервые создаете свой контроллер, Optimization.SolverOptions
свойство nlmpc
объект содержит стандарт fmincon
опции со следующими настройками nondefault:
Используйте SQP
алгоритм (SolverOptions.Algorithm = 'sqp'
)
Используйте градиенты целевой функции (SolverOptions.SpecifyObjectiveGradient = 'true'
)
Используйте градиенты ограничений (SolverOptions.SpecifyConstraintGradient = 'true'
)
Не отображать сообщения оптимизации в командное окно (SolverOptions.Display = 'none'
)
Эти опции nondefault обычно улучшают эффективность нелинейного контроллера MPC.
Можно изменить опции решателя для вашего приложения. Для примера, чтобы задать максимальное количество итераций решателя для вашего приложения, установите SolverOptions.MaxIter
. Для получения дополнительной информации о доступных опциях решателя, см. fmincon
(Optimization Toolbox).
В целом, вы не должны изменять SpecifyObjectiveGradient
и SpecifyConstraintGradient
опции решателя, поскольку это может значительно повлиять на эффективность контроллера. Для примера ограничительные градиентные матрицы являются разреженными и задающими SpecifyConstraintGradient
значение false заставит решатель вычислить градиенты, которые, как известно, равны нулю.
Если у вас нет программного обеспечения Optimization Toolbox, можно задать свой собственный пользовательский нелинейный решатель. Для этого создайте пользовательскую функцию-оболочку, которая преобразует интерфейс вашего решателя функции в соответствие с интерфейсом, ожидаемым нелинейным контроллером MPC. Ваша пользовательская функция должна быть MATLAB® скрипт или MAT-файл в пути MATLAB. Для примера, который показывает шаблон пользовательской функции обертки решателя, см. Оптимизацию лечения туберкулеза с использованием нелинейного MPC с пользовательским решателем.
Можно использовать решатель Нелинейного Программирования, разработанный Embotech AG, чтобы симулировать и сгенерировать код для нелинейных контроллеров MPC. Для получения дополнительной информации см. «Реализация контроллеров 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 - количество переменных принятия решений.
Mcineq - количество линейных ограничений неравенства.
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, где . |
UB | Вход | Верхние границы для переменных принятия решений, заданные как вектор-столбец длины NZ, где . |
NLCON | Вход | Нелинейная функция ограничения, заданная как указатель на функцию с сигнатурой: [cineq,c,Gineq,Geq] = NLCON(z) и аргументы:
|
zopt | Выход | Оптимальные значения переменных принятия решений, возвращенное как вектор длины NZ. |
cost | Выход | Оптимальная стоимость, возвращенная в виде скаляра. |
flag | Выход | Выходной флаг, возвращенный как один из следующих:
|
Когда вы реализуете свою пользовательскую функцию решателя, лучшей практики, чтобы решатель использовал информацию о стоимости и градиенте ограничения, предоставленную нелинейным контроллером MPC.
Если вы не можете получить решение с помощью пользовательского решателя, попробуйте идентифицировать специальное условие, для которого вы знаете решение, и запустите решатель при этом условии. Если решатель отличается от этого начального предположения:
Проверьте валидность состояния и выходных функций в вашей модели предсказания.
Если вы используете пользовательскую функцию затрат, убедитесь, что она верна.
Если вы используете стандартную функцию стоимости MPC, проверьте веса настройки контроллера.
Убедитесь, что все ограничения допустимы при первоначальном предположении.
Если вы предоставляете пользовательские якобианские функции, проверьте своих якобианцев, используя validateFcns
.
nlmpc
| fmincon
(Optimization Toolbox)