Сконфигурируйте решатель оптимизации для нелинейного 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 опции со следующими настройками 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)

и аргументы:

  • 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.

См. также

| (Optimization Toolbox)

Похожие темы