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