Задайте модель прогноза для нелинейного 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 к вашей пользовательской стоимости и ограничительных функций.

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

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

Похожие темы