exponenta event banner

validateFcns

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

Описание

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

Нелинейный MPC

пример

validateFcns(nlmpcobj,x,mv) проверяет функции нелинейного контроллера ПДК 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 functions, заданные как вектор с длиной, равной сумме всех значений в 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