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 структура. Если параметры необходимы для состояния и подготавливают функции, необходимо обеспечить их в 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 объект.

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

Значения состояния в виде вектора из длины Nx, где Nx равен nlmpcobj.Dimensions.NumberOfStates, или nlmpcMSobj.Dimensions.NumberOfStates. Значения состояния могут представлять номинальные условия или произвольную рабочую точку.

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

Измеренные значения воздействия в виде вектора из длины Nmd, где Nmd равен длине nlmpcobj.Dimensions.MDIndex. Измеренные значения воздействия могут представлять номинальные условия или произвольную рабочую точку.

Если ваш контроллер измерил каналы воздействия, необходимо задать md. Если у вашего контроллера нет измеренных каналов воздействия, задайте md как [].

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

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

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

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

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

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

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

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

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

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

Советы

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

Алгоритмы

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

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

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

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

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

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

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

Введенный в R2018b
Для просмотра документации необходимо авторизоваться на сайте