Multistage Nonlinear MPC Controller

Симулируйте многоступенчатые нелинейные прогнозирующие контроллеры модели

  • Библиотека:
  • Model Predictive Control Toolbox

  • Multistage Nonlinear MPC Controller block

Описание

Блок Multistage Nonlinear MPC Controller моделирует многоступенчатый нелинейный прогнозирующий контроллер модели. На каждом контрольном интервале блок вычисляет оптимальные движения управления путем решения нелинейной задачи программирования, в которой различные функции затрат и ограничения заданы для различных шагов предсказания (этап). Для получения дополнительной информации о нелинейном MPC смотрите Нелинейный MPC.

Чтобы использовать этот блок, вы должны сначала создать nlmpcMultistage объект в MATLAB® рабочей области.

Ограничения

  • Ни один из Multistage Nonlinear MPC Controller параметров блоков не настраивается.

Порты

Вход

расширить все

Необходимые входные параметры

Состояния модели предсказания тока, заданные как вектор сигнал длины Nx, где Nx - количество состояний модели предсказания. Поскольку нелинейный контроллер MPC не выполняет оценку состояния, необходимо либо измерить, либо оценить текущие состояния модели предсказания на каждом контрольном интервале.

Управляющие сигналы, используемые в объекте в предыдущем контрольном интервале, задаются как векторный сигнал длины Nmv, где Nmv - количество манипулируемых переменных.

Примечание

Подключите last_mv к сигналам СН, фактически примененным к объекту в предыдущем контрольном интервале. Обычно эти сигналы СН являются значениями, генерируемыми контроллером, хотя это не всегда так. Например, если ваш контроллер работает в автономном режиме и работает в режиме отслеживания; то есть контроллер выход не приводит объект в действие, тогда подача фактического управляющего сигнала на last_mv может помочь достичь бесшумной передачи, когда контроллер переключается назад в оперативном режиме.

Дополнительные входы

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

Чтобы использовать те же самые измеренные значения нарушения порядка через горизонт предсказания, соедините md с сигналом вектора-строки с Nmd элементами, где Nmd количество манипулируемых переменных. Каждый элемент задает значение для измеренного нарушения порядка.

Чтобы изменять нарушения порядка над горизонтом предсказания (предварительный просмотр) время k время k + p, соедините md с матричным сигналом с Nmd столбцами и до p + 1 строками. Здесь k - текущее время, а p - горизонт предсказания. Каждая строка содержит нарушения порядка для одного шага горизонта предсказания. Если вы задаете меньше p + 1 строк, конечные нарушения порядка используются для остальных шагов горизонта предсказания.

Зависимости

Чтобы включить этот порт, выберите параметр Measured disturbances.

Если ваш контроллер использует дополнительные параметры в своей модели предсказания, включите этот вход порт и соедините сигнал вектора с элементами Npm, где Npm количество параметров состояния (равное Model.ParameterLength свойство nlmpcMultistage объект контроллера). Контроллер, передает эти параметры в свой модельный переход состояния и состояние якобианских функций.

Чтобы включить этот порт, выберите параметр StateFcn parameters.

Если ваш контроллер не использует дополнительные параметры, необходимо отключить state.param порт.

Зависимости

Если ваш контроллер использует дополнительные параметры в любой цене каскада или ограничительной функции, включите этот вход порт и соедините сигнал вектора с элементами Npv, где Npv, равно sum(Stages.ParameterLength), - общее количество параметров для всех функций каскада. Параметры для всех каскадов складываются в вектор параметра следующим образом.

[parameter vector for stage 1;
 parameter vector for stage 2;
 ...
 parameter vector for stage p+1;
]

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

Чтобы включить этот порт, выберите параметр StageFcn parameters.

Если ваш контроллер не использует дополнительные параметры, необходимо отключить stage.param порт. Для получения дополнительной информации смотрите nlmpcMultistage и nlmpcmove.

Зависимости

Онлайн-ограничения

Чтобы задать минимальные ограничения переменных во время выполнения, включите этот входной порт. Если этот порт отключен, блок использует нижние границы, указанные в ManipulatedVariables.Min свойство его объекта контроллера.

Чтобы использовать те же границы над горизонтом предсказания, соедините mv.min с сигналом вектора-строки с Nmv элементами, где Nmv количество выходов. Каждый элемент задает нижнюю границу для управляемой переменной.

Чтобы изменить границы над горизонтом предсказания от времени k времени k + p -1, соедините mv.min с матричным сигналом с Ny столбцами и до p строк. Здесь k - текущее время, а p - горизонт предсказания. Каждая строка содержит ограничения для одного шага горизонта предсказания. Если вы задаете меньше p строк, границы в последней строке применяются для оставшейся части горизонта предсказания.

Зависимости

Чтобы включить этот порт, выберите параметр Lower MV limits.

Чтобы задать максимальное количество управляемых переменных во время выполнения, включите этот входной порт. Если этот порт отключен, блок использует верхние границы, указанные в ManipulatedVariables.Max свойство его объекта контроллера.

Чтобы использовать те же границы над горизонтом предсказания, соедините mv.max с сигналом вектора-строки с Nmv элементами, где Nmv количество выходов. Каждый элемент задает верхнюю границу для управляемой переменной.

Чтобы изменить границы над горизонтом предсказания от времени k времени k + p -1, соедините mv.max с матричным сигналом с Ny столбцами и до p строк. Здесь k - текущее время, а p - горизонт предсказания. Каждая строка содержит ограничения для одного шага горизонта предсказания. Если вы задаете меньше p строк, границы в последней строке применяются для оставшейся части горизонта предсказания.

Зависимости

Чтобы включить этот порт, выберите параметр Upper MV limits.

Чтобы задать минимальные ограничения переменной скорости во время выполнения, включите этот входной порт. Если этот порт отключен, блок использует нижние границы, указанные в ManipulatedVariable.RateMin свойство его объекта контроллера. dmv.min границы должны быть непозитивными.

Чтобы использовать те же границы над горизонтом предсказания, соедините dmv.min с сигналом вектора-строки с Nmv элементами, где Nmv количество выходов. Каждый элемент задает нижнюю границу для управляемой переменной скорости изменения.

Чтобы изменить границы над горизонтом предсказания от времени k времени k + p -1, соедините dmv.min с матричным сигналом с Ny столбцами и до p строк. Здесь k - текущее время, а p - горизонт предсказания. Каждая строка содержит ограничения для одного шага горизонта предсказания. Если вы задаете меньше p строк, границы в последней строке применяются для оставшейся части горизонта предсказания.

Зависимости

Чтобы включить этот порт, выберите параметр Lower MVRate limits.

Чтобы задать ограничения переменной скорости во время выполнения, включите этот входной порт. Если этот порт отключен, блок использует верхние границы, указанные в ManipulatedVariables.RateMax свойство его объекта контроллера. dmv.max границы должны быть неотрицательными.

Чтобы использовать те же границы над горизонтом предсказания, соедините dmv.max с сигналом вектора-строки с Nmv элементами, где Nmv количество выходов. Каждый элемент задает верхнюю границу для управляемой переменной скорости изменения.

Чтобы изменить границы над горизонтом предсказания от времени k времени k + p -1, соедините dmv.max с матричным сигналом с Ny столбцами и до p строк. Здесь k - текущее время, а p - горизонт предсказания. Каждая строка содержит ограничения для одного шага горизонта предсказания. Если вы задаете меньше p строк, границы в последней строке применяются для оставшейся части горизонта предсказания.

Зависимости

Чтобы включить этот порт, выберите параметр Upper MVRate limits.

Чтобы задать ограничения минимального состояния во время выполнения, включите этот входной порт. Если этот порт отключен, блок использует нижние границы, указанные в States.Min свойство его объекта контроллера.

Чтобы использовать те же границы над горизонтом предсказания, соедините x.min с сигналом вектора-строки с Nx элементами, где Nx количество выходов. Каждый элемент задает нижнюю границу для состояния.

Чтобы изменить границы над горизонтом предсказания от времени k + 1 до времени k + p, соедините x.min с матричным сигналом с Ny столбцами и до p строк. Здесь k - текущее время, а p - горизонт предсказания. Каждая строка содержит ограничения для одного шага горизонта предсказания. Если вы задаете меньше p строк, границы в последней строке применяются для оставшейся части горизонта предсказания.

Зависимости

Чтобы включить этот порт, выберите параметр Lower state limits.

Чтобы задать ограничения максимального состояния во время выполнения, включите этот входной порт. Если этот порт отключен, блок использует верхние границы, указанные в States.Max свойство его объекта контроллера.

Чтобы использовать те же границы над горизонтом предсказания, соедините x.max с сигналом вектора-строки с Nx элементами, где Nx количество выходов. Каждый элемент задает верхнюю границу для состояния.

Чтобы изменить границы над горизонтом предсказания от времени k + 1 до времени k + p, соедините x.max с матричным сигналом с Ny столбцами и до p строк. Здесь k - текущее время, а p - горизонт предсказания. Каждая строка содержит ограничения для одного шага горизонта предсказания. Если вы задаете меньше p строк, границы в последней строке применяются для оставшейся части горизонта предсказания.

Зависимости

Чтобы включить этот порт, выберите параметр Upper state limits.

Другие

Конечное состояние, заданная как вектор сигнал длины Nx. Чтобы задать желаемые ограничения по конечному состоянию, включите этот вход порт. Чтобы задать желаемые конечные состояния во время выполнения через этот входной порт, необходимо задать конечные значения в TerminalState поле Model свойство nlmpcMultistage объект, который передается как параметр в блок. Задайте inf для состояний, которые не должны быть ограничены терминальным значением. Во время исполнения блок игнорирует любые значения входного сигнала, которые соответствуют inf значений в объекте. Если вы не задаете какое-либо условие терминального значения в nlmpcMultistage объект, сигнал в этом входном порте игнорируется во время выполнения.

Если этот порт не включен, ограничение конечного состояния (если он присутствует) не меняется во время выполнения.

Зависимости

Чтобы включить этот порт, выберите параметр Terminal state.

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

z0 является вектором-столбцом длины, равной сумме длин всех векторов переменной принятия решения для каждого каскада. Начальные предположения должны быть сложены как:

[state vector guess for stage 1;
 manipulated variable vector guess for stage 1;
 manipulated variable vector rate guess for stage 1; % if used
 slack variable vector guess for stage 1; % if used
 state vector guess for stage 2;
 manipulated variable vector guess for stage 2;
 manipulated variable vector rate guess for stage 2; % if used
 slack variable vector guess for stage 2; % if used
 ...
 state vector guess for stage p;
 manipulated variable vector guess for stage p;
 manipulated variable vector rate guess for stage p; % if used
 slack variable vector guess for stage p; % if used
 state vector guess for stage p+1;
 slack variable vector guess for stage p+1; % if used
]
Для получения дополнительной информации смотрите nlmpcMultistage и nlmpcmove.

Зависимости

Чтобы включить этот порт, выберите параметр Initial guess.

Выход

расширить все

Необходимый выход

Оптимальное манипулируемое действие управления, выхода как вектор-столбец сигнал длины Nmv, где Nmv - количество манипулируемых переменных.

Если решатель сходится к локальному оптимальному решению (nlp.status положительно), то mv содержит оптимальное решение.

Если решатель достигает максимального количества итераций, не найдя оптимального решения (nlp.status равно нулю) и Optimization.UseSuboptimalSolution свойство контроллера:

  • true, затем mv содержит неоптимальное решение

  • false, тогда mv так же, как last_mv

Если решатель отказывает (nlp.status отрицательно), то mv так же, как last_mv.

Дополнительные выходы

Стоимость целевой функции, выход как неотрицательный скалярный сигнал. Стоимость определяет степень достижения контроллером своих целей.

Значение стоимости имеет значение только, когда выход nlp.status неотрицателен.

Зависимости

Чтобы включить этот порт, выберите параметр Optimal cost.

Вектор переменных Stacked slack, используемый в смягчении ограничений. Если все элементы равны нулю, все мягкие ограничения выполняются на всем горизонте предсказания. Если любой элемент больше нуля, то нарушается по крайней мере одно мягкое ограничение.

Вектор переменной slack для всех каскадов сложены как:

[slack variable vector for stage 1; % if used
 slack variable vector for stage 2; % if used
 ...
 slack variable vector for stage p+1; % if used
]

Статус оптимизации, выход как один из следующих:

  • Положительное целое число - решатель сходился к оптимальному решению

  • 0 - Максимальное количество итераций, достигнутых без сходимости к оптимальному решению

  • Отрицательное целое число - ошибка решателя

Зависимости

Чтобы включить этот порт, выберите параметр Optimization status.

Оптимальные последовательности

Оптимальная манипулированная переменная последовательность, возвращаемая как матричный сигнал с p + 1 строками и Nmv столбцами, где p - горизонт предсказания, а Nmv - количество манипулированных переменных.

Первые p строки mv.seq содержат вычисленные оптимальные манипулируемые значения переменных от текущего времени k ко времени k + p -1. Первая строка mv.seq содержит ток, управляемый значениями переменных (выходной mv). Поскольку контроллер не вычисляет оптимальные движения управления в момент времени k + p, последние две строки mv.seq идентичны.

Зависимости

Чтобы включить этот порт, выберите параметр Optimal control sequence.

Оптимальная последовательность состояний модели предсказания, возвращенная как матричный сигнал с p + 1 строками и Nx столбцами, где p - горизонт предсказания, а Nx - количество состояний.

Первые p строки x.seq содержат вычисленные оптимальные значения состояний от текущего времени k до времени k + p -1. Первая строка x.seq содержит текущие оцененные значения состояния. Поскольку контроллер не вычисляет оптимальные состояния в момент времени k + p, последние две строки x.seq идентичны.

Зависимости

Чтобы включить этот порт, выберите параметр Optimal state sequence.

Параметры

расширить все

Вы должны предоставить nlmpcMultistage объект, который задает нелинейный контроллер MPC. Для этого введите имя nlmpc объект в рабочем пространстве MATLAB.

Программное использование

Параметры блоков: nlmpcobj
Тип: строка, вектор символов
По умолчанию: ""

Выберите этот параметр, чтобы запустить контроллер, используя тот же шаг расчета, что и его модель предсказания. Чтобы использовать другой шаг расчета контроллера, очистите этот параметр и укажите шаг расчета с помощью параметра Make block run at a different sample time.

Чтобы ограничить количество переменных принятия решений и улучшить вычислительную эффективность, можно запустить контроллер с шагом расчета, который отличается от горизонта предсказания. Например, рассмотрим случай нелинейного контроллера MPC, работающего на частоте 10 Гц. Если шаги расчета объекта управления и контроллера совпадают, для предсказания поведения объекта в течение десяти секунд требуется горизонт предсказания длины 100, который создает большое количество переменных принятия решений. Чтобы уменьшить количество переменных принятия решений, можно использовать шаг расчета объекта 1 секунду и горизонт предсказания длины 10.

Программное использование

Параметры блоков: UseObjectTs
Тип: строка, вектор символов
Значения: "off", "on"
По умолчанию: "on"

Задайте этот параметр, чтобы запустить контроллер с использованием другого шага расчета по сравнению с его моделью предсказания.

Зависимости

Чтобы включить этот параметр, очистите параметр Use prediction model sample time.

Программное использование

Параметры блоков: TsControl
Тип: строка, вектор символов
По умолчанию: ""

Выберите этот параметр, чтобы симулировать контроллер с помощью MEX-функции, сгенерированной buildMEX. Это сокращает время симуляции контроллера. Чтобы задать имя MEX-функции, используйте параметр Specify MEX function name.

Программное использование

Параметры блоков: UseMEX
Тип: строка, вектор символов
Значения: "off", "on"
По умолчанию: "off"

Используйте этот параметр, чтобы задать имя MEX-функции для использования во время симуляции. Чтобы создать MEX-функцию, используйте buildMEX функция.

Зависимости

Чтобы включить этот параметр, выберите параметр Use MEX to speed up simulation.

Программное использование

Параметры блоков: mexname
Тип: строка, вектор символов
По умолчанию: ""

Вкладка Общие

Если ваш контроллер имеет измеренные нарушения порядка, необходимо выбрать этот параметр, чтобы добавить md выходной порт к блоку.

Программное использование

Параметры блоков: md_enabled
Тип: строка, вектор символов
Значения: "off", "on"
По умолчанию: "off"

Если ваша модель предсказания использует необязательные параметры, необходимо выбрать этот параметр, чтобы добавить state.param входной порт к блоку.

Программное использование

Параметры блоков: stateparam_enabled
Тип: строка, вектор символов
Значения: "off", "on"
По умолчанию: "off"

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

Программное использование

Параметры блоков: stageparam_enabled
Тип: строка, вектор символов
Значения: "off", "on"
По умолчанию: "off"

Выберите этот параметр, чтобы добавить cost выходной порт к блоку.

Программное использование

Параметры блоков: cost_enabled
Тип: строка, вектор символов
Значения: "off", "on"
По умолчанию: "off"

Выберите этот параметр, чтобы добавить mv.seq выходной порт к блоку.

Программное использование

Параметры блоков: mvseq_enabled
Тип: строка, вектор символов
Значения: "off", "on"
По умолчанию: "off"

Выберите этот параметр, чтобы добавить x.seq выходной порт к блоку.

Программное использование

Параметры блоков: stateseq_enabled
Тип: строка, вектор символов
Значения: "off", "on"
По умолчанию: "off"

Выберите этот параметр, чтобы добавить slack выходной порт к блоку.

Программное использование

Параметры блоков: slack_enabled
Тип: строка, вектор символов
Значения: "off", "on"
По умолчанию: "off"

Выберите этот параметр, чтобы добавить nlp.status выходной порт к блоку.

Программное использование

Параметры блоков: status_enabled
Тип: строка, вектор символов
Значения: "off", "on"
По умолчанию: "off"

Вкладка Оперативные функции

Выберите этот параметр, чтобы добавить mv.min входной порт к блоку.

Программное использование

Параметры блоков: mv_min
Тип: строка, вектор символов
Значения: "off", "on"
По умолчанию: "off"

Выберите этот параметр, чтобы добавить mv.max входной порт к блоку.

Программное использование

Параметры блоков: mv_max
Тип: строка, вектор символов
Значения: "off", "on"
По умолчанию: "off"

Выберите этот параметр, чтобы добавить dmv.min входной порт к блоку.

Программное использование

Параметры блоков: mvrate_min
Тип: строка, вектор символов
Значения: "off", "on"
По умолчанию: "off"

Выберите этот параметр, чтобы добавить dmv.max входной порт к блоку.

Программное использование

Параметры блоков: mvrate_max
Тип: строка, вектор символов
Значения: "off", "on"
По умолчанию: "off"

Выберите этот параметр, чтобы добавить x.min входной порт к блоку.

Программное использование

Параметры блоков: state_min
Тип: строка, вектор символов
Значения: "off", "on"
По умолчанию: "off"

Выберите этот параметр, чтобы добавить x.max входной порт к блоку.

Программное использование

Параметры блоков: state_max
Тип: строка, вектор символов
Значения: "off", "on"
По умолчанию: "off"

Выберите этот параметр, чтобы добавить x.terminal входной порт к блоку.

Программное использование

Параметры блоков: terminal_state
Тип: строка, вектор символов
Значения: "off", "on"
По умолчанию: "off"

Выберите этот параметр, чтобы добавить z0 входной порт к блоку.

Примечание

По умолчанию Nonlinar MPC Controller блок использует вычисленные оптимальные состояния, манипулируемые переменные и переменные slack из одного контрольного интервала в качестве начальных предположений для следующего контрольного интервала.

Включите начальные порты догадок, только если это необходимо для вашего приложения.

Программное использование

Параметры блоков: nlp_initialize
Тип: строка, вектор символов
Значения: "off", "on"
По умолчанию: "off"

Расширенные возможности

.
Введенный в R2021a