Сконфигурируйте решатель оптимизации для нелинейного MPC

По умолчанию нелинейные диспетчеры 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 сконфигурирован, чтобы использовать эти траектории в качестве исходных предположений по умолчанию. Использовать эти траектории в качестве исходных предположений в командной строке:

  1. Возвратите opt выходной аргумент при вызове nlmpcmove. Этот nlmpcmoveopt объект содержит любые опции во время выполнения, которые вы задали в предыдущем вызове nlmpcmove. Это также включает исходные предположения для состояния (opt.X0) и переменная, которой управляют (opt.MV0) траектории и глобальная переменная ослабляют переменную (opt.Slack0).

  2. Передайте этот объект в как 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)

и аргументы:

  • z — Переменные решения в виде вектора длины NZ.

  • F — Стойте, возвращенный как скаляр.

  • G — Градиенты функции стоимости относительно переменных решения, возвращенных как вектор-столбец длины NZ, где G(i)=F/z(i).

z0Входной параметрИсходные предположения для значений переменных решения в виде вектора длины NZ
AВходной параметрЛинейный массив ограничения неравенства в виде Mcineq-by-NZ массив. Вместе, A и B задайте ограничения формы AzB.
BВходной параметрЛинейный вектор ограничения неравенства в виде вектор-столбца длины Mcineq. Вместе, A и B задайте ограничения формы AzB.
AeqВходной параметрЛинейный массив ограничения равенства в виде Mceq-by-NZ массив. Вместе, Aeq и Beq задайте ограничения формы Aeqz=Beq.
BeqВходной параметрЛинейный вектор ограничения равенства в виде вектор-столбца длины Mceq. Вместе, Aeq и Beq задайте ограничения формы Aeqz=Beq.
LBВходной параметрНижние границы для переменных решения в виде вектор-столбца длины NZ, где LB(i)z(i).
UBВходной параметрВерхние границы для переменных решения в виде вектор-столбца длины NZ, где z(i)UB(i).
NLCONВходной параметр

Нелинейная ограничительная функция в виде указателя на функцию с подписью:

[cineq,c,Gineq,Geq] = NLCON(z)

и аргументы:

  • z — Переменные решения в виде вектора длины NZ.

  • cineq — Нелинейные значения ограничения неравенства, возвращенные как вектор-столбец длины Ncineq.

  • ceq — Нелинейные значения ограничения равенства, возвращенные как вектор-столбец длины Nceq.

  • Gineq — Нелинейные градиенты ограничения неравенства относительно переменных решения, возвращенных как NZ-by-Ncineq массив, где Gineq(i,j)=cineq(j)/z(i).

  • Geq — Нелинейные градиенты ограничения равенства относительно переменных решения, возвращенных как NZ-by-Nceq массив, где Geq(i,j)=ceq(j)/z(i).

zoptВывод Оптимальные значения переменных решения, возвращенные как вектор длины NZ.
costВывод Оптимальная стоимость, возвращенная как скаляр.
flagВывод

Выйдите из флага, возвращенного как одно из следующего:

  • 1 — Успешная оптимизация (условия оптимизации первого порядка, которым удовлетворяют)

  • 0 — Субоптимальное решение (максимальное количество достигнутых итераций)

  • Отрицательная величина — Оптимизация перестала работать

Когда вы реализуете свою пользовательскую функцию решателя, это - лучшая практика иметь ваше использование решателя стоимость и ограничительная информация о градиенте, предоставленная нелинейным контроллером MPC.

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

  • Проверяйте валидность и выходных функций состояния в вашей модели предсказания.

  • Если вы используете пользовательскую функцию стоимости, убедитесь, что это правильно.

  • Если вы используете стандартную функцию стоимости MPC, проверяете контроллер, настраивающий веса.

  • Убедитесь, что все ограничения выполнимы в исходном предположении.

  • Если вы обеспечиваете пользовательские Функции Якоби, подтверждаете ваши Якобианы с помощью validateFcns.

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

|

Похожие темы

Для просмотра документации необходимо авторизоваться на сайте