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

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

  • Функция состояния — Предсказывает, как состояния объекта развиваются в зависимости от времени

  • Выходная функция — Вычисляет объект выходные параметры в терминах переменных состояния и входных переменных

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

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

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

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

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

    dx/dt=f(x,u)

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

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

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

Если метод дискретизации по умолчанию не предоставляет удовлетворительный прогноз для вашего приложения, можно задать собственную модель прогноза дискретного времени, которая использует различный метод. Для этого можно интегрировать функцию состояния непрерывного времени от данного начального условия, xk, к следующему состоянию, xk+1. При выполнении так численно, избегайте подходов, которые требуют итераций, таких как некоторые методы переменного размера шага, потому что эти методы вводят числовой шум, который ухудшает производительность решателя. Явный многоступенчатый Метод Эйлера с размером достаточно небольшого шага часто является лучшим методом, чтобы попробовать сначала. Для примера смотрите Управление Swing Маятника Используя Нелинейное Прогнозирующее Управление Модели.

Можно задать функцию состояния одним из следующих способов.

  • Имя функции в текущей рабочей папке или на пути 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=(u1u2+u3u4)потому что(x3)x˙5=(u1u2+u3u4)sin(x3)x˙6=0.2(u1u2u3+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)

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

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

    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 th индекс мВ в Dimensions.MVIndex свойство контроллера. Bmv содержит градиенты только относительно переменных, которыми управляют, в u, поскольку измеренные и неизмеренные воздействия не являются переменными решения.

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

x˙1=x4x˙2=x5x˙3=x6x˙4=(u1u2+u3u4)потому что(x3)x˙5=(u1u2+u3u4)sin(x3)x˙6=0.2(u1u2u3+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=x3x4

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

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=x3x4

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

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, необходимо все еще задать три параметра. Все эти параметры передаются во все эти функции, и необходимо выбрать правильный параметр, чтобы использовать в каждой функции.

Для примера, который задает шаг расчета функции состояния дискретного времени в качестве параметра, смотрите Управление Swing Маятника Используя Нелинейное Прогнозирующее Управление Модели.

Увеличьте модель прогноза с неизмеренными воздействиями

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

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

Чтобы увеличить вашу модель прогноза, необходимо определять один или несколько входных сигналов как неизмеренные воздействия при создании контроллера, использующего nlmpc. Например, создайте контроллер, где первые два входных параметров являются переменными, которыми управляют, и третий вход является неизмеренным воздействием (UD).

nlobj = nlmpc(nx,ny,'MV',[1 2],'UD',3);

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

  • Если вы ожидаете подобный шагу UD на объекте выход, то задаете модель UD как интегратор в вашей функции состояния и добавляете состояние интегратора в объект выход в вашей выходной функции.

  • Если вы ожидаете подобный пандусу UD во входе объекта, то задаете модель UD как интегратор и добавляете интегратор выход во входной сигнал в вашей функции состояния.

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

Для примера, который увеличивает модель прогноза для случайных подобных шагу выходных воздействий, смотрите Нелинейное Прогнозирующее Управление Модели Экзотермического Химического Реактора.

Смотрите также

Похожие темы