По умолчанию нелинейные диспетчеры 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
опции со следующими настройками не по умолчанию:
Используйте SQP
алгоритм (SolverOptions.Algorithm = 'sqp'
)
Используйте градиенты целевой функции (SolverOptions.SpecifyObjectiveGradient = 'true'
)
Используйте ограничительные градиенты (SolverOptions.SpecifyConstraintGradient = 'true'
)
Не отображайте сообщения оптимизации к командному окну (SolverOptions.Display = 'none'
)
Эти опции не по умолчанию обычно улучшают производительность нелинейного контроллера MPC.
Можно изменить опции решателя для приложения. Например, чтобы задать максимальное количество итераций решателя для вашего приложения, установите SolverOptions.MaxIter
. Для получения дополнительной информации о доступных опциях решателя смотрите fmincon
.
В общем случае вы не должны изменять SpecifyObjectiveGradient
и SpecifyConstraintGradient
опции решателя, начиная с выполнения так могут значительно влиять на производительность контроллера. Например, ограничительные матрицы градиента разреженны, и установка SpecifyConstraintGradient
ко лжи заставил бы решатель вычислять градиенты, которые, как известно, являются нулем.
Если у вас нет программного обеспечения Optimization Toolbox, можно задать собственный нелинейный решатель. Для этого создайте пользовательскую функцию обертки, которая преобразует интерфейс вашей функции решателя, чтобы совпадать с интерфейсом, ожидаемым нелинейным контроллером MPC. Ваша пользовательская функция должна быть скриптом MATLAB® или MAT-файлом на пути MATLAB. Для примера, который показывает шаблону пользовательскую функцию обертки решателя, смотрите, что Обработка Туберкулеза Оптимизации Использует Нелинейный MPC с Пользовательским Решателем.
Сконфигурировать ваш 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
.