По умолчанию нелинейные диспетчеры 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
.