validateFcns

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

Описание

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

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

Советы

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

Алгоритмы

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

  • Существует на пути MATLAB®

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

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

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

  • Возвращает допустимые числовые данные; то есть, это не возвращает Inf или NaN значения

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

Введенный в R2018b