validateFcns

Исследуйте модель предсказания и пользовательские функции nlmpc или nlmpcMultistage объекты для потенциальных проблем

Описание

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

Нелинейный MPC

пример

validateFcns(nlmpcobj,x,mv) проверяет функции нелинейного контроллера MPC nlmpcobj для потенциальных проблем. Функции проверяются с использованием заданных номинальных значений состояния, x, и манипулируемые значения переменных, mv. Используйте этот синтаксис, если у вашего контроллера нет измеренных нарушений порядка и параметров.

пример

validateFcns(nlmpcobj,x,mv,md) задает номинальные измеренные значения нарушения порядка. Если ваш контроллер имеет измеренные каналы нарушения порядка, вы должны задать md.

пример

validateFcns(nlmpcobj,x,mv,md,parameters) задает номинальные значения параметров. Если ваш контроллер имеет параметры, вы должны задать parameters.

validateFcns(nlmpcobj,x,mv,md,parameters,ref) задает номинальные выходные ссылки.

validateFcns(nlmpcobj,x,mv,md,parameters,ref,mvtarget) задает номинальные управляемые переменные цели.

Многоступенчатый нелинейный MPC

validateFcns(nlmpcMSobj,x,mv) проверяет функции многоступенчатого нелинейного контроллера MPC nlmpcMSobj для потенциальных проблем. Функции проверяются с использованием заданных номинальных значений состояния, x, и манипулируемые значения переменных, mv. Используйте этот синтаксис, если у вашего контроллера нет измеренных нарушений порядка и параметров.

пример

validateFcns(nlmpcMSobj,x,mv,simdata) если параметры необходимы для функций состояния и этапа, необходимо предоставить их в simdata структура.

Примеры

свернуть все

Создайте нелинейный контроллер MPC с шестью состояниями, шестью выходами и четырьмя входами.

nx = 6;
ny = 6;
nu = 4;
nlobj = nlmpc(nx,ny,nu);
In standard cost function, zero weights are applied by default to one or more OVs because there are fewer MVs than OVs.

Задайте шаг расчета контроллера и горизонты.

Ts = 0.4;
p = 30;
c = 4;
nlobj.Ts = Ts;
nlobj.PredictionHorizon = p;
nlobj.ControlHorizon = c;

Задайте функцию состояния модели предсказания и якобиан функции состояния. В данном примере используйте модель летающего робота.

nlobj.Model.StateFcn = "FlyingRobotStateFcn";
nlobj.Jacobian.StateFcn = "FlyingRobotStateJacobianFcn";

Задайте пользовательскую функцию стоимости для контроллера, которая заменяет функцию стандартной стоимости.

nlobj.Optimization.CustomCostFcn = @(X,U,e,data) Ts*sum(sum(U(1:p,:)));
nlobj.Optimization.ReplaceStandardCost = true;

Задайте пользовательскую функцию ограничения для контроллера.

nlobj.Optimization.CustomEqConFcn = @(X,U,data) X(end,:)';

Проверьте модель предсказания и пользовательские функции в начальных состояниях (x0) и начальные входы (u0) робота.

x0 = [-10;-10;pi/2;0;0;0];
u0 = zeros(nu,1); 
validateFcns(nlobj,x0,u0);
Model.StateFcn is OK.
Jacobian.StateFcn is OK.
No output function specified. Assuming "y = x" in the prediction model.
Optimization.CustomCostFcn is OK.
Optimization.CustomEqConFcn is OK.
Analysis of user-provided model, cost, and constraint functions complete.

Создайте нелинейный контроллер MPC с четырьмя состояниями, двумя выходами и одним входом.

nx = 4;
ny = 2;
nu = 1;
nlobj = nlmpc(nx,ny,nu);
In standard cost function, zero weights are applied by default to one or more OVs because there are fewer MVs than OVs.

Укажите шаг расчета и горизонты контроллера.

Ts = 0.1;
nlobj.Ts = Ts;
nlobj.PredictionHorizon = 10;
nlobj.ControlHorizon = 5;

Задайте функцию состояния для контроллера, которая находится в файле pendulumDT0.m. Эта модель в дискретном времени интегрирует модель в непрерывном времени, заданную в pendulumCT0.m использование многостадийного прямого метода Эйлера.

nlobj.Model.StateFcn = "pendulumDT0";
nlobj.Model.IsContinuousTime = false;

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

nlobj.Model.NumberOfParameters = 1;

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

nlobj.Model.OutputFcn = @(x,u,Ts) [x(1); x(3)];

Проверьте функции модели предсказания для номинальных состояний x0 и номинальные входы u0. Поскольку в модели предсказания используется пользовательский параметр, вы должны передать этот параметр validateFcns.

x0 = [0.1;0.2;-pi/2;0.3];
u0 = 0.4;
validateFcns(nlobj, x0, u0, [], {Ts});
Model.StateFcn is OK.
Model.OutputFcn is OK.
Analysis of user-provided model, cost, and constraint functions complete.

Создайте нелинейный контроллер MPC с тремя состояниями, одним выходом и четырьмя входами. Первые два входа являются измеренными нарушениями порядка, третий вход является манипулируемой переменной, а четвертый вход является неизмеренным нарушением порядка.

nlobj = nlmpc(3,1,'MV',3,'MD',[1 2],'UD',4);

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

nlobj.Dimensions
ans = struct with fields:
     NumberOfStates: 3
    NumberOfOutputs: 1
     NumberOfInputs: 4
            MVIndex: 3
            MDIndex: [1 2]
            UDIndex: 4

Задайте шаг расчета контроллера и горизонты.

nlobj.Ts = 0.5;
nlobj.PredictionHorizon = 6;
nlobj.ControlHorizon = 3;

Задайте функцию состояния модели предсказания, которая находится в файле exocstrStateFcnCT.m.

nlobj.Model.StateFcn = 'exocstrStateFcnCT';

Задайте выходную функцию модели предсказания, которая находится в файле exocstrOutputFcn.m.

nlobj.Model.OutputFcn = 'exocstrOutputFcn';

Проверьте функции модели предсказания, используя начальную рабочую точку в качестве номинального условия для проверки и установки неизмеренного состояния нарушения порядка, x0(3), в 0. Поскольку модель измерила нарушения порядка, вы должны передать их в validateFcns.

x0 = [311.2639; 8.5698; 0];
u0 = [10; 298.15; 298.15];
validateFcns(nlobj,x0,u0(3),u0(1:2)');
Model.StateFcn is OK.
Model.OutputFcn is OK.
Analysis of user-provided model, cost, and constraint functions complete.

Входные параметры

свернуть все

Нелинейный контроллер MPC, заданный как nlmpc объект.

Номинальные значения состояния, заданные как вектор длины Nx, Nx равны nlmpcobj.Dimensions.NumberOfStates

Номинальные манипулируемые значения переменных, заданные как вектор длины Nmv, где Nmv равно длине nlmpcobj.Dimensions.MVIndex.

Номинальные измеренные значения нарушения порядка, заданные как вектор длины Nmd, где Nmd равно длине nlmpcobj.Dimensions.MDIndex. Если ваш контроллер имеет измеренные каналы нарушения порядка, вы должны задать md. Если ваш контроллер не имеет измеренных каналов нарушения порядка, задайте md как [].

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

Если ваш контроллер имеет параметры, вы должны задать parameters. Если ваш контроллер не имеет параметров, задайте parameters как [].

Номинальные выходные опорные значения, заданные как вектор длины Ny, где Ny равно nlmpcobj.Dimensions.NumberOfOutputs. ref передается в пользовательскую функцию затрат и ограничений. Если вы не задаете refконтроллер передает нулевой вектор в пользовательские функции.

Номинальные управляемые переменные цели, заданные как вектор длины Nmv, где Nmv равно длине nlmpcobj.Dimensions.MVIndex. mvtarget передается в пользовательскую функцию затрат и ограничений. Если вы не задаете mvtargetконтроллер передает нулевой вектор в пользовательские функции.

Многоступенчатый нелинейный контроллер MPC, заданный как nlmpcMultistage объект.

Данные моделирования во время выполнения, первоначально созданные getSimulationData, и указывается как структура с полями, подробно описанными в nlmpcmove. Для validateFcns, релевантны только следующие поля

Измеренные нарушения порядка значения, заданные как вектор-строка длины Nmd или массив с Nmd столбцами, где Nmd - количество измеренных нарушений порядка. Если у вашего многоступенчатого объекта MPC задан какой-либо измеренный канал нарушения порядка, необходимо задать MeasuredDisturbance. Если ваш контроллер не имеет измеренных нарушений порядка, это поле не существует в структуре, возвращенной getSimulationData.

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

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

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

Значения параметров функций Stage, заданные как вектор с длиной, равной сумме всех значений в Stages(i).ParameterLength свойства объекта многоступенчатого контроллера. Если какие-либо затраты или ограничительные функции определены в Stages свойству нужен вектор параметра, вы должны предоставить все векторы параметра во время выполнения (сложенные в один столбец), используя это поле. Если ни одна из ваших функций этапа не нуждается в каком-либо параметре, это поле не существует в структуре, возвращенной getSimulationData.

Векторы параметров для всех каскадов должны быть сложены в вектор-столбец StateFcnParameters как:

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

Совет

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

Алгоритмы

Для каждой функции контроллера, validateFunctions проверяет, является ли функция:

  • Существует в MATLAB® путь

  • Имеет необходимое количество входных параметров

  • Может быть успешно выполнен без ошибок

  • Возвращает выходные аргументы с правильными размером и размерностями

  • Возвращает действительные числовые данные; то есть не возвращается Inf или NaN значения

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

Введенный в R2018b