getCodeGenerationData

Создайте структуры данных для nlmpcmoveCodeGeneration

Описание

Используйте эту функцию, чтобы создать структуры данных для nlmpcmoveCodeGeneration функция, которая вычисляет перемещения оптимального управления для нелинейных контроллеров MPC.

Для получения информации о генерации структур данных для mpcmoveCodeGeneration, смотрите getCodeGenerationData.

[coreData,onlineData] = getCodeGenerationData(nlobj,x,lastMV) создает структуры данных для использования с nlmpcmoveCodeGeneration.

пример

[coreData,onlineData] = getCodeGenerationData(nlobj,x,lastMV,params) значения параметров начальной буквы копий в onlineData структура, если nlobj nlmpc объект. Если nlobj nlmpcMultistage возразите затем передаче params аргумент не позволен, и необходимо вручную задать исходные предположения в InitialGuess поле onlineData вместо этого.

[___] = getCodeGenerationData(___,field) включает заданный онлайновый вес или ограничительное поле путем добавления его в onlineData структура.

[___] = getCodeGenerationData(___,field1,...,fieldn) включает нескольким онлайн вес или ограничительные поля путем добавления их в onlineData структура.

Примеры

свернуть все

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

nlobj = nlmpc(4,2,1);
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 представлять шаг расчета. Задайте количество параметров и создайте вектор параметра.

nlobj.Model.NumberOfParameters = 1;
params = {Ts};

Задайте выходную функцию модели, передав параметр шага расчета как входной параметр.

nlobj.Model.OutputFcn = "pendulumOutputFcn";

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

nlobj.Weights.OutputVariables = [3 3];
nlobj.Weights.ManipulatedVariablesRate = 0.1;
nlobj.OV(1).Min = -10;
nlobj.OV(1).Max = 10;
nlobj.MV.Min = -100;
nlobj.MV.Max = 100;

Подтвердите функции модели предсказания.

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

Только два из состояний объекта измеримы. Поэтому создайте расширенный Фильтр Калмана для оценки четырех состояний объекта. Его функция изменения состояния задана в pendulumStateFcn.m и его функция измерения задана в pendulumMeasurementFcn.m.

EKF = extendedKalmanFilter(@pendulumStateFcn,@pendulumMeasurementFcn);

Задайте начальные условия для симуляции, инициализируйте расширенное состояние Фильтра Калмана и укажите, что нулевая начальная буква управляла значением переменных.

x0 = [0;0;-pi;0];
y0 = [x0(1);x0(3)];
EKF.State = x0;
mv0 = 0;

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

[coreData,onlineData] = getCodeGenerationData(nlobj,x0,mv0,params);

Просмотрите онлайновую структуру данных.

onlineData
onlineData = struct with fields:
           ref: [0 0]
      MVTarget: 0
    Parameters: {[0.1000]}
            X0: [10x4 double]
           MV0: [10x1 double]
        Slack0: 0

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

[coreData2,onlineData2] = getCodeGenerationData(nlobj,x0,mv0,params,...
    'OutputWeights','MVWeights','MVMin','MVMax');

Просмотрите онлайновую структуру данных. Во время выполнения задайте онлайновые веса и ограничения в добавленных полях структуры.

onlineData2
onlineData2 = struct with fields:
              ref: [0 0]
         MVTarget: 0
       Parameters: {[0.1000]}
               X0: [10x4 double]
              MV0: [10x1 double]
           Slack0: 0
    OutputWeights: [3 3]
        MVWeights: 0
            MVMin: [10x1 double]
            MVMax: [10x1 double]

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

свернуть все

Нелинейный прогнозирующий контроллер модели в виде nlmpc или nlmpcMultistage объект.

Начальные состояния нелинейной модели предсказания в виде вектор-столбца длины Nx, где Nx является количеством состояний модели предсказания.

Начальная буква управляла сигналами управления переменными в виде вектор-столбца длины Nmv, где Nmv является количеством переменных, которыми управляют.

Начальные значения параметров для не многоступенчатый MPC в виде вектора ячейки с длиной равняются nlobj.Model.NumberOfParameters, который является количеством дополнительных параметров в модели предсказания контроллера. Если у контроллера нет дополнительных параметров, задайте params как {}.

Если nlobj nlmpc возразите затем начальным значениям, заданным в params копируются в onlineData структура. Если nlobj nlmpcMultistage возразите затем params аргумент не позволен, и необходимо вручную задать исходные предположения в InitialGuess поле onlineData вместо этого.

Для получения дополнительной информации о дополнительных параметрах модели предсказания смотрите, Задают Модель Предсказания для Нелинейного MPC.

Онлайновый вес или ограничительное имя поля в виде строки или вектора символов. При создании структур данных для nlmpcmoveCodeGeneration, можно добавить любое из следующих полей к onlineData вывод структуры. Добавьте данное поле в онлайновую структуру данных, только если вы ожидаете, что соответствующий вес или ограничение будут варьироваться во время выполнения.

Онлайновые ограничения

  • "StateMin" — Нижние границы состояния

  • "StateMax" — Верхние границы состояния

  • "MVMin" — Переменные нижние границы, которыми управляют,

  • "MVMax" — Переменные верхние границы, которыми управляют,

  • "MVRateMin" — Плавающий курс, которым управляют, нижней границы изменения

  • "MVRateMax" — Плавающий курс, которым управляют, верхней границы изменения

Онлайновые ограничения и Настраивающиеся Веса для немногоступенчатого MPC

  • "OutputWeights" — Веса выходной переменной

  • "MVWeights" — Переменные веса, которыми управляют,

  • "MVRateWeights" — Веса с плавающей ставкой, которыми управляют,

  • "ECRWeight" — Ослабьте переменный вес

  • "OutputMin" — Нижние границы выходной переменной

  • "OutputMax" — Верхние границы выходной переменной

Воздействия, параметры и исходные предположения для многоступенчатого MPC

  • "MeasuredDistrubance" — Измеренные воздействия

  • "StateParameter" — Вектор параметра для функции состояния и Якобианов

  • "StageParameter" — Вектор параметра для стоимости этапа, ограничений и Якобианов

  • "TerminalState" — Ограничение конечного состояния

  • "InitialGuess" — Исходные предположения для переменных решения

Выходные аргументы

свернуть все

Нелинейные параметры конфигурации MPC, которые являются постоянными во время выполнения, возвратились как структура. Эти параметры выведены из настроек контроллера в nlobj. При симуляции контроллера передайте coreData к nlmpcmoveCodeGeneration не изменяя параметров.

Данные моделирования во время выполнения, возвращенные как структура. Поля в структуре зависят от ли nlobj nlmpc возразите или nlmpcMultistage объект. Во время симуляции необходимо предоставить эту структуру как вход к nlmpcmoveCodeGeneration в каждом контрольном интервале. nlmpcmoveCodeGeneration затем возвращает, как выведено обновленную структуру, которую необходимо будет предоставить, как введено в следующем контрольном интервале.

Для nlmpc объекты, структура всегда содержит следующие поля.

Поле Описание
ref

Выведите ссылочные значения, возвращенные как вектор-столбец из нулей с длиной Ny, где Ny количество модели предсказания выходные параметры.

mvTarget

Значения ссылки на переменную, которыми управляют, возвращенные как вектор-столбец из нулей с длиной Nmv, где Nmv является количеством переменных, которыми управляют.

X0

Исходное предположение для траектории состояния, возвращенной как вектор-столбец, равняется x.

MV0

Исходное предположение для переменной траектории, которой управляют, возвращенной как вектор-столбец, равняется lastMV.

Slack0

Исходное предположение для слабой переменной, возвращенной как нуль.

Для nlmpc объекты, onlineData может также содержать следующие поля, в зависимости от настройки контроллера и значений аргументов.

Поле Описание
md

Измеренные значения воздействия — Это поле возвращено только, когда контроллер измерил входные параметры воздействия, то есть, когда nlobj.Dimensions.MDIndex является ненулевым. md возвращен как вектор-столбец из нулей с длиной Nmd, где Nmd является количеством измеренных воздействий.

Parameters

Значения параметров — Это поле возвращено только, когда диспетчер использует дополнительные параметры модели. Parameters возвращен как вектор ячейки, равный params.

  • OutputWeights

  • MVWeights

  • MVRateWeights

  • ECRWeight

  • OutputMin

  • OutputMax

  • StateMin

  • StateMax

  • MVMin

  • MVMax

  • MVRateMin

  • MVRateMax

Вес и ограничительные значения — Каждое поле возвращено только, когда имя соответствующего поля задано с помощью field аргумент. Значение каждого поля равно соответствующему значению по умолчанию, заданному в контроллере, как возвращено в coreData.

Для получения дополнительной информации о конфигурировании onlineData поля, смотрите nlmpcmoveCodeGeneration.

Для nlmpcMultistage объекты, возвращенный onlineData структура всегда содержит InitialGuess поле .

Поле Описание
InitialGuess

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

Для nlmpcMultistage объекты, onlineData может также содержать следующие поля, в зависимости от настройки контроллера и значений аргументов.

Поле Описание
MeasuredDisturbances

Измеренные значения воздействия — Это поле возвращено только, когда контроллер измерил входные параметры воздействия, то есть, когда nlobj.Dimensions.MDIndex является ненулевым. md возвращен как вектор-столбец из нулей с длиной Nmd, где Nmd является количеством измеренных воздействий.

StateFcnParameters

Значения параметров для функций состояния и Якобианов — Это поле возвращено только, когда функция предсказания состояния контроллера или ее якобиевские параметры модели использования, это когда Model.ParameterLength больше нуля. StateFcnParameter возвращен как вектор.

StageFcnParameters

Значения параметров для стоимости этапа и ограничительных функций и их Якобианов — Это поле возвращено только, когда любая стоимость этапа или ограничительная функция или ее якобиан, используют параметры, это - когда существует по крайней мере один этап i для которого Stages(i).ParameterLength больше нуля. StageFcnParameter возвращен как вектор.

  • StateMin

  • StateMax

  • MVMin

  • MVMax

  • MVRateMin

  • MVRateMax

Ограничительные значения — Каждое поле возвращено только, когда имя соответствующего поля задано с помощью field аргумент. Значение каждого поля равно соответствующему значению по умолчанию, заданному в контроллере, как возвращено в coreData.
TerminalState

Конечное состояние, возвращенное как вектор-столбец со столькими же элементов сколько количество состояний. Конечное состояние является требуемым состоянием на последнем шаге предсказания. Чтобы задать желаемые конечные состояния во времени выполнения через это поле, необходимо задать конечные значения в TerminalState поле Model свойство nlobj. Задайте inf для состояний, которые не должны быть ограничены к конечной стоимости. Во время выполнения, nlmpcmoveCodeGeneration игнорирует любые значения в TerminalState поле simdata это соответствует inf значения в nlobj. Если вы не задаете условия конечной стоимости в nlobj, это поле не создается в onlinedata.

Для получения дополнительной информации о конфигурировании onlineData поля, смотрите nlmpcmoveи nlmpcmoveCodeGeneration.

Введенный в R2020a