exponenta event banner

Задание модели прогнозирования для нелинейного MPC

Модель прогнозирования нелинейного контроллера MPC состоит из следующих пользовательских функций:

  • Функция состояния - предсказывает, как состояния растения развиваются во времени

  • Функция вывода - вычисляет выходные данные установки с точки зрения состояния и входных переменных

Можно указать модель непрерывного или дискретного прогнозирования.

Перед моделированием контроллера рекомендуется проверить пользовательские функции, включая функцию состояния, функцию вывода и их якобинцы, используя validateFcns команда.

Функция состояния

Можно указать функцию состояния непрерывного или дискретного времени. Для:

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

    dx/dt = f (x, u)

  • Дискретная модель прогнозирования, функция состояния является функцией обновления состояния.

    x (k + 1) = f (x (k), u (k))

Поскольку нелинейный контроллер 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Вход

Дополнительные параметры, указанные как список, разделенный запятыми (например, p1,p2,p3). Те же параметры передаются в модель прогнозирования, пользовательскую функцию затрат и пользовательские функции ограничений контроллера.

Если в модели используются дополнительные параметры, необходимо указать количество параметров с помощью Model.NumberOfParameters свойства контроллера.

zПродукцияВывод функции состояния, возвращаемый в виде вектора столбца длиной Nx. Для модели непрерывного прогнозирования, z содержит производные состояния, dx/dtи для моделей дискретного прогнозирования времени, z содержит следующие состояния, x(k+1).

В качестве примера функции состояния рассмотрим модель непрерывного времени со следующими уравнениями состояния:

x˙1=x4x˙2=x5x˙3=x6x˙4= (u1 u2 + u3 − u4) cos (x3) x˙5= (u1 − u2 + u3 u4) sin (x3) x˙6=0.2 (u1 − u2 − u3 + u4)

Можно указать функцию состояния следующим образом:

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)

Ваша функция Jacobian должна иметь одну из следующих подписей.

  • Если контроллер не использует дополнительные параметры:

    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, где A (i, j) =∂z (i )/ ∂x (j).
BmvЯкобиан вывода функции состояния по отношению к манипулируемым переменным, указанным как массив Nx-by-Nmv, где Bmv (i, j) =∂z (i )/ ∂u (MV (j)) и MV (j) является j-м индексом MV вDimensions.MVIndex свойство контроллера. Bmv содержит градиенты по отношению только к управляемым переменным в u, поскольку измеренные и неизмеренные возмущения не являются переменными принятия решения.

Рассмотрим снова функцию состояния со следующими уравнениями состояния:

x˙1=x4x˙2=x5x˙3=x6x˙4= (u1 u2 + u3 − u4) cos (x3) x˙5= (u1 − u2 + u3 u4) sin (x3) x˙6=0.2 (u1 − u2 − u3 + u4)

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

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Вход

Дополнительные параметры, указанные как список, разделенный запятыми (например, p1,p2,p3). Те же параметры передаются в модель прогнозирования, пользовательскую функцию затрат и пользовательские функции ограничений контроллера.

Если в модели используются дополнительные параметры, необходимо указать количество параметров с помощью Model.NumberOfParameters.

yПродукцияТоковые выходы, возвращаемые в виде вектора столбца длиной Ny.

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

y1=x1y2=x2+0.2x3y3=x3⋅x4

Функцию вывода можно задать следующим образом:

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 (i, j) =∂y (i )/ ∂x (j).

Еще раз рассмотрим модель со следующими уравнениями вывода:

y1=x1y2=x2+0.2x3y3=x3⋅x4

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

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, укажите модель UD в качестве интегратора и добавьте выход интегратора к входному сигналу в функции состояния.

Любые состояния, добавляемые при задании модели неизмеренного возмущения, включаются в вектор состояния модели прогнозирования. Значения в этих неизмеренных состояниях модели возмущения отражают поведение возмущения во время моделирования. Этот вектор состояния соответствует x входной аргумент функции состояния и X входной аргумент для пользовательских функций затрат и ограничений.

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

См. также

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