exponenta event banner

Настройка решателя оптимизации для нелинейного 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.SolverOptions имущества nlmpc объект содержит стандарт fmincon опции со следующими настройками по умолчанию:

  • Используйте SQP алгоритм (SolverOptions.Algorithm = 'sqp')

  • Использовать градиенты целевой функции (SolverOptions.SpecifyObjectiveGradient = 'true')

  • Использовать градиенты зависимостей (SolverOptions.SpecifyConstraintGradient = 'true')

  • Не выводите сообщения об оптимизации в командное окно (SolverOptions.Display = 'none')

Эти опции не по умолчанию обычно улучшают производительность нелинейного контроллера MPC.

Можно изменить параметры решателя для приложения. Например, чтобы задать максимальное количество итераций решателя для приложения, задайте SolverOptions.MaxIter. Дополнительные сведения о доступных параметрах решателя см. в разделе fmincon(Панель инструментов оптимизации).

Как правило, не следует изменять SpecifyObjectiveGradient и SpecifyConstraintGradient опции решателя, поскольку это может существенно повлиять на производительность контроллера. Например, матрицы градиента ограничений являются разреженными и задаются SpecifyConstraintGradient значение false приведет к вычислению решателем градиентов, которые, как известно, равны нулю.

Задание пользовательского решателя

Если программное обеспечение Optimization Toolbox отсутствует, можно указать собственный нелинейный решатель. Для этого создайте пользовательскую функцию-оболочку, которая преобразует интерфейс функции решателя в соответствии с интерфейсом, ожидаемым нелинейным контроллером MPC. Пользовательская функция должна быть сценарием MATLAB ® или MAT-файлом по пути MATLAB. Пример, показывающий пользовательскую функцию оболочки решателя шаблона, см. в разделе Оптимизация лечения туберкулеза с помощью нелинейного MPC с помощью пользовательского решателя.

Для моделирования и создания кода для нелинейных контроллеров MPC можно использовать решатель нелинейного программирования, разработанный Embotech AG. Дополнительные сведения см. в разделе Реализация контроллеров 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 - количество решающих переменных.

  • Макинек - количество линейных ограничений неравенства.

  • 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 определите ограничения A⋅z≤B формы.
BВходВектор ограничения линейного неравенства, заданный как вектор столбца длины Mcineq. Вместе, A и B определите ограничения A⋅z≤B формы.
AeqВходМассив ограничений линейного равенства, заданный как массив Mceq-by-NZ. Вместе, Aeq и Beq определите ограничения Aeq⋅z=Beq формы.
BeqВходВектор ограничения линейного равенства, заданный как вектор столбца длиной Mceq. Вместе, Aeq и Beq определите ограничения Aeq⋅z=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.

См. также

| (панель инструментов оптимизации)

Связанные темы