Модель предсказания нелинейного контроллера MPC состоит из следующих пользовательских функций:
Функция состояния - Предсказывает, как состояния объекта развиваются с течением времени
Выходная функция - Вычисляет выходы объекта в терминах состояния и входных переменных
Можно задать модель предсказания в непрерывном времени или в дискретном времени.
Перед симуляцией контроллера лучшей практики подтвердить ваши пользовательские функции, включая функцию состояния, выходную функцию и их якобианы, используя validateFcns
команда.
Можно задать функцию состояния в непрерывном времени или в дискретном времени. Для a:
Непрерывное время модели предсказания функция состояния является производной функции состояния.
Модель предсказания в дискретном времени, функция состояния является функцией обновления состояния.
Поскольку нелинейный контроллер MPC является контроллером дискретного времени, если ваша функция состояния непрерывна, контроллер автоматически дискретизирует модель, используя неявное метод трапеций. Этот метод может обрабатывать умеренно жесткие модели, и его точность предсказания зависит от шага расчета контроллером; то есть большой шаг расчета может потенциально привести к неточному предсказанию.
Если метод дискретизации по умолчанию не обеспечивает удовлетворительное предсказание для вашего приложения, можно задать свою собственную модель предсказания в дискретном времени, которая использует другой метод. Для этого можно интегрировать функцию состояния в непрерывном времени из заданного начального условия, xk, в следующее состояние, xk+1. При этом численно избегайте подходов, которые требуют итераций, таких как некоторые методы переменного размера, потому что эти методы вводят численный шум, который ухудшает эффективность решателя. Явный многоступенчатый метод Эйлера с достаточно небольшим шагом размером часто является лучшим методом, чтобы попробовать сначала. Для получения примера см. «Управление качанием маятника с использованием нелинейной модели прогнозирующего управления».
Можно задать функцию состояния одним из следующих способов.
Имя функции в текущей рабочей папке или в MATLAB® путь, заданный как строковый или символьный вектор
Model.StateFcn = "myStateFunction";
Указатель на функцию в текущей рабочей папке или на пути MATLAB
Model.StateFcn = @myStateFunction;
Анонимная функция
Model.StateFcn = @(x,u,params) myStateFunction(x,u,params)
Ваша функция состояния должна иметь одну из следующих сигнатур.
Если ваш контроллер не использует дополнительные параметры:
function z = myStateFunction(x,u)
Если ваш контроллер использует параметры. Здесь, params
- разделенный списками , разделенными запятыми параметров:
function z = myStateFunction(x,u,params)
Эта таблица описывает входы и выходы этой функции, где:
Nx - количество состояний и равно Dimensions.NumberOfStates
свойство контроллера.
Nu - количество входов, включая все манипулируемые переменные, измеренные нарушения порядка и неизмеренные нарушения порядка, и равно Dimensions.NumberOfInputs
свойство контроллера.
Аргумент | Ввод/вывод | Описание |
---|---|---|
x | Вход | Текущие состояния, заданные как вектор-столбец Nx длины. |
u | Вход | Входы тока, заданные как вектор-столбец длины Nu. |
params | Вход | Необязательные параметры, заданные как разделенный запятыми список (для примера Если ваша модель использует необязательные параметры, необходимо задать количество параметров, используя |
z | Выход | Функция состояния выхода, возвращенная как вектор-столбец длины Nx. Для модели предсказания в непрерывном времени, z содержит производные по состоянию, dx/dt , и для моделей предсказания в дискретном времени, z содержит следующие состояния, x(k+1) . |
В качестве примера функции состояния рассмотрим модель непрерывного времени со следующими уравнениями состояния:
Можно задать функцию состояния следующим образом:
z = zeros(6,1); z(1) = x(4); z(2) = x(5); z(3) = x(6); z(4) = (u(1) - u(2) + u(3) - u(4))*cos(x(3)); z(5) = (u(1) - u(2) + u(3) - u(4))*sin(x(3)); z(6) = 0.2*(u(1) - u(2) - u(3) + u(4));
Чтобы улучшить вычислительную эффективность, лучшая практика задать аналитический якобиан для вашей функции состояния. Если вы не задаете якобиан, контроллер вычисляет якобиан с помощью численного возмущения. Чтобы задать якобиан для функции состояния, установите Jacobian.StateFcn
свойство контроллера одному из следующих.
Имя функции в текущей рабочей папке или на пути MATLAB, заданное как строковый или символьный вектор
Model.StateFcn = "myStateJacobian";
Указатель на функцию в текущей рабочей папке или на пути MATLAB
Model.StateFcn = @myStateJacobian;
Анонимная функция
Model.StateFcn = @(x,u,params) myStateJacobian(x,u,params)
Ваша государственная якобианская функция должна иметь одну из следующих сигнатур.
Если ваш контроллер не использует дополнительные параметры:
function [A,Bmv] = myStateJacobian(x,u)
Если ваш контроллер использует параметры. Вот params
- разделенный списками , разделенными запятыми параметров:
function [A,Bmv] = myStateJacobian(x,u,params)
Входные аргументы якобианской функции состояния те же, что входы функции состояния. Эта таблица описывает выходы якобианской функции, где:
Nx - количество состояний и равно Dimensions.NumberOfStates
свойство контроллера
Nu - количество входов, включая все манипулируемые переменные, измеренные нарушения порядка и неизмеренные нарушения порядка, и равно Dimensions.NumberOfInputs
свойство контроллера
Аргумент | Описание |
---|---|
A | Якобиан выхода функции состояния, z , в отношении x , возвращается как Nx -by - Nx массив, где. |
Bmv | Якобиан выхода функции состояния относительно управляемых переменных, заданный как Nx -by - Nmv массив, где и MV (j) является j-м индексом MV в Dimensions.MVIndex свойство контроллера. Bmv содержит градиенты только для управляемых переменных в u , поскольку измеренные и неизмеренные нарушения порядка не являются переменными принятия решений. |
Снова рассмотрим функцию состояния со следующими уравнениями состояния:
Чтобы найти якобианов, вычислите частные производные уравнений состояния относительно состояний и манипулируемых переменных, принимая, что все четыре входов являются манипулируемыми переменными.
A = zeros(6,6); A(1,4) = 1; A(2,5) = 1; A(3,6) = 1; A(4,3) = -(u(1) - u(2) + u(3) - u(4))*sin(x(3)); A(5,3) = (u(1) - u(2) + u(3) - u(4))*cos(x(3)); B = zeros(6,4); B(4,:) = cos(x(3))*[1 -1 1 -1]; B(5,:) = sin(x(3))*[1 -1 1 -1]; B(6,:) = 0.2*[1 -1 -1 1];
Выходная функция вашей модели предсказания связывает состояния и входы на текущем контрольном интервале с выходами. Если количество состояний и выходов модели предсказания одинаковое, можно опустить OutputFcn
, что подразумевает, что все состояния поддаются измерению; то есть каждый выход соответствует одному состоянию.
Примечание
OutputFcn
не может иметь прямое сквозное соединение от любой манипулированной переменной до любого выхода в любое время; другими словами, нелинейный MPC всегда принимает Dmv = 0
.
Можно задать выходную функцию одним из следующих способов.
Имя функции в текущей рабочей папке или на пути MATLAB, заданное как строковый или символьный вектор
Model.OutputFcn = "myOutputFunction";
Указатель на функцию в текущей рабочей папке или на пути MATLAB
Model.OutputFcn = @myOutputFunction;
Анонимная функция
Model.OutputFcn = @(x,u,params) myOutputFunction(x,u,params)
Выходная функция должна иметь одну из следующих сигнатур.
Если ваш контроллер не использует дополнительные параметры:
function y = myOutputFunction(x,u)
Если ваш контроллер использует параметры. Здесь, params
- разделенный списками , разделенными запятыми параметров:
function y = myOutputFunction(x,u,params)
Эта таблица описывает входы и выходы этой функции, где:
Nx - количество состояний и равно Dimensions.NumberOfStates
свойство контроллера.
Nu - количество входов, включая все манипулируемые переменные, измеренные нарушения порядка и неизмеренные нарушения порядка, и равно Dimensions.NumberOfInputs
контроллера.
NY - количество выходов и равно Dimensions.NumberOfOutputs
свойство контроллера.
Аргумент | Ввод/вывод | Описание |
---|---|---|
x | Вход | Текущие состояния, заданные как вектор-столбец Nx длины. |
u | Вход | Входы тока, заданные как вектор-столбец длины Nu. |
params | Вход | Необязательные параметры, заданные как разделенный запятыми список (для примера Если ваша модель использует необязательные параметры, необходимо задать количество параметров, используя |
y | Выход | Выходы тока, возвращенные как вектор-столбец длины Ny. |
В качестве примера выходной функции рассмотрим следующие выходы уравнения. Напомним, что ваша выходная функция не может иметь прямое сквозное соединение от любой манипулированной переменной к любому выходу в любой момент времени.
Можно задать выходную функцию следующим образом:
y = zeros(6,1); y(1) = x(1); y(2) = x(2)+0.2*x(3); y(3) = x(3)*x(4);
Чтобы улучшить вычислительную эффективность, лучшую практику задать аналитический якобиан для вашей выходной функции. Если вы не задаете якобиан, контроллер вычисляет якобиан с помощью численного возмущения. Чтобы задать якобиан для вашей выходной функции, установите Jacobian.OutputFcn
свойство контроллера одному из следующих.
Имя функции в текущей рабочей папке или на пути MATLAB, заданное как строковый или символьный вектор
Model.StateFcn = "myOutputJacobian";
Указатель на функцию в текущей рабочей папке или на пути MATLAB
Model.StateFcn = @myOutputJacobian;
Анонимная функция
Model.StateFcn = @(x,u,params) myOutputJacobian(x,u,params)
Ваша выходная якобианская функция должна иметь одну из следующих сигнатур.
Если ваш контроллер не использует дополнительные параметры:
function C = myOutputJacobian(x,u)
Если ваш контроллер использует параметры. Здесь, params
- разделенный списками , разделенными запятыми параметров:
function C = myOutputJacobian(x,u,params)
Входные аргументы выхода якобианской функции те же, что и входы выходной функции. Эта таблица описывает выход якобианской функции. Поскольку выходная функция не может иметь прямое сквозное соединение от любой манипулированной переменной к любому выходу, выходная якобианская функция возвращает только градиенты выходной функции относительно состояний модели.
Аргумент | Описание |
---|---|
C | Якобиан выходной функции, возвращенный как Ny -by - Nx массив, где. |
Снова рассмотрим модель со следующими выходами уравнениями:
Чтобы найти якобийцев, вычислите частные производные выходных уравнений относительно состояний. Поскольку выходная функция не может иметь прямое сквозное соединение от любой манипулированной переменной к любому выходу в любое время, вы не вычисляете Якобиан относительно манипулированных переменных.
C = zeros(3,4); C(1,1) = 1; C(2,2) = 1; C(2,3) = 0.2; C(3,3) = x(4); C(3,4) = x(3);
Можно задать дополнительные параметры для нелинейной модели предсказания MPC, функции затрат и пользовательских ограничений. Для этого передайте список , разделенный запятыми аргументов параметра в пользовательские функции (для примера p1,p2,p3
). Эти параметры должны быть числовыми значениями. Кроме того, вы должны задать количество параметров модели, используя Model.NumberOfParameters
свойство контроллера.
Те же параметры передаются в модель предсказания, пользовательскую функцию затрат, пользовательские функции ограничений и их соответствующие якобианы. Например, даже если функция состояния использует только параметр p1
ограничительные функции используют только параметр p2
, и функция затрат использует только параметр p3
необходимо задать три параметра. Все эти параметры передаются во все эти функции, и вы должны выбрать правильный параметр, который будет использоваться в каждой функции.
Для примера, который задает шаг расчета функции состояния в дискретном времени как параметр, см. Управление качанием маятника с использованием нелинейной модели прогнозирующего управления.
Можно увеличить модель предсказания, чтобы включить неизмеренные нарушения порядка. Например, если у вашего объекта нет интегратора, и вы хотите отклонить определенное неизмеренное нарушение порядка, увеличьте свой план с помощью модели возмущения. Это позволяет блоку оценки внешнего состояния обнаружить нарушение порядка и, таким образом, предоставить нелинейному контроллеру MPC достаточно информации, чтобы отклонить его.
Во время симуляции контроллер передает нуль в каждый неизмеренный входной канал нарушения порядка, поскольку сигналы по умолчанию не измерены и приняты как нулевые.
Чтобы увеличить вашу модель предсказания, вы должны обозначить один или несколько входных сигналов как неизмеренные нарушения порядка при создании контроллера, используя nlmpc
. Например, создайте контроллер, где первые два входа являются управляемыми переменными, а третий вход является неизмеренным нарушением порядка (UD).
nlobj = nlmpc(nx,ny,'MV',[1 2],'UD',3);
Задайте неизмеренную модель возмущения в состоянии и выходных функциях вашей модели предсказания. Эта неизмеренная модель возмущения может быть любой произвольной моделью, которая точно фиксирует эффект нарушения порядка на вашем объекте. Для примера:
Если вы ожидаете шагового UD на выходе объекта, задайте модель UD как интегратор в функции вашего состояния и добавьте состояние интегратора к выходу объекта в своей выходной функции.
Если вы ожидаете UD, подобный пандусу, на входе объекта, задайте модель как интегратор и добавьте выход интегратора к входному сигналу в функции вашего состояния.
Любые состояния, которые вы добавляете при определении неизмеренной модели возмущения, включаются в вектор состояния модели предсказания. Значения в этих неизмеренных состояниях модели возмущения отражают нарушение порядка во время симуляции. Этот вектор состояния соответствует x
входной параметр функции вашего состояния и X
входной параметр в пользовательские функции затрат и ограничений.
Для примера, который увеличивает модель предсказания для случайных ступенчатых выходных нарушений порядка, см. Нелинейную Модель Прогнозирующего Контроля Экзотермического Химического Реактора.