Сконфигурируйте решатель оптимизации для нелинейного 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 — Decision, заданные как вектор длины 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 — Decision, заданные как вектор длины 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.

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

|

Похожие темы