Создайте структуры данных для 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]
nlobj
— Нелинейный прогнозирующий контроллер моделиnlmpc
возразите | nlmpcMultistage
объектНелинейный прогнозирующий контроллер модели в виде nlmpc
или nlmpcMultistage
объект.
x
— Начальные состояния нелинейной модели предсказанияНачальные состояния нелинейной модели предсказания в виде вектор-столбца длины Nx, где Nx является количеством состояний модели предсказания.
lastMV
— Начальная буква управляла сигналами управления переменнымиНачальная буква управляла сигналами управления переменными в виде вектор-столбца длины Nmv, где Nmv является количеством переменных, которыми управляют.
params
— Начальные значения параметров для не многоступенчатый MPCНачальные значения параметров для не многоступенчатый MPC в виде вектора ячейки с длиной равняются nlobj.Model.NumberOfParameters
, который является количеством дополнительных параметров в модели предсказания контроллера. Если у контроллера нет дополнительных параметров, задайте params
как {}
.
Если nlobj
nlmpc
возразите затем начальным значениям, заданным в params
копируются в onlineData
структура. Если nlobj
nlmpcMultistage
возразите затем params
аргумент не позволен, и необходимо вручную задать исходные предположения в InitialGuess
поле onlineData
вместо этого.
Для получения дополнительной информации о дополнительных параметрах модели предсказания смотрите, Задают Модель Предсказания для Нелинейного MPC.
field
— Онлайновый вес или ограничительное имя поляОнлайновый вес или ограничительное имя поля в виде строки или вектора символов. При создании структур данных для nlmpcmoveCodeGeneration
, можно добавить любое из следующих полей к onlineData
вывод структуры. Добавьте данное поле в онлайновую структуру данных, только если вы ожидаете, что соответствующий вес или ограничение будут варьироваться во время выполнения.
Онлайновые ограничения
"StateMin"
— Нижние границы состояния
"StateMax"
— Верхние границы состояния
"MVMin"
— Переменные нижние границы, которыми управляют,
"MVMax"
— Переменные верхние границы, которыми управляют,
"MVRateMin"
— Плавающий курс, которым управляют, нижней границы изменения
"MVRateMax"
— Плавающий курс, которым управляют, верхней границы изменения
Онлайновые ограничения и Настраивающиеся Веса для немногоступенчатого MPC
"OutputWeights"
— Веса выходной переменной
"MVWeights"
— Переменные веса, которыми управляют,
"MVRateWeights"
— Веса с плавающей ставкой, которыми управляют,
"ECRWeight"
— Ослабьте переменный вес
"OutputMin"
— Нижние границы выходной переменной
"OutputMax"
— Верхние границы выходной переменной
Воздействия, параметры и исходные предположения для многоступенчатого MPC
"MeasuredDistrubance"
— Измеренные воздействия
"StateParameter"
— Вектор параметра для функции состояния и Якобианов
"StageParameter"
— Вектор параметра для стоимости этапа, ограничений и Якобианов
"TerminalState"
— Ограничение конечного состояния
"InitialGuess"
— Исходные предположения для переменных решения
coreData
— Нелинейные параметры конфигурации MPCНелинейные параметры конфигурации MPC, которые являются постоянными во время выполнения, возвратились как структура. Эти параметры выведены из настроек контроллера в nlobj
. При симуляции контроллера передайте coreData
к nlmpcmoveCodeGeneration
не изменяя параметров.
onlineData
— Онлайновый нелинейный контроллер MPC данныеДанные моделирования во время выполнения, возвращенные как структура. Поля в структуре зависят от ли nlobj
nlmpc
возразите или nlmpcMultistage
объект. Во время симуляции необходимо предоставить эту структуру как вход к nlmpcmoveCodeGeneration
в каждом контрольном интервале. nlmpcmoveCodeGeneration
затем возвращает, как выведено обновленную структуру, которую необходимо будет предоставить, как введено в следующем контрольном интервале.
Non-Multistage MPC
— Структура для типовых контроллеров MPCДля nlmpc
объекты, структура всегда содержит следующие поля.
Поле | Описание |
---|---|
ref | Выведите ссылочные значения, возвращенные как вектор-столбец из нулей с длиной |
mvTarget | Значения ссылки на переменную, которыми управляют, возвращенные как вектор-столбец из нулей с длиной Nmv, где Nmv является количеством переменных, которыми управляют. |
X0 | Исходное предположение для траектории состояния, возвращенной как вектор-столбец, равняется |
MV0 | Исходное предположение для переменной траектории, которой управляют, возвращенной как вектор-столбец, равняется |
Slack0 | Исходное предположение для слабой переменной, возвращенной как нуль. |
Для nlmpc
объекты, onlineData
может также содержать следующие поля, в зависимости от настройки контроллера и значений аргументов.
Поле | Описание |
---|---|
md | Измеренные значения воздействия — Это поле возвращено только, когда контроллер измерил входные параметры воздействия, то есть, когда |
Parameters | Значения параметров — Это поле возвращено только, когда диспетчер использует дополнительные параметры модели. |
| Вес и ограничительные значения — Каждое поле возвращено только, когда имя соответствующего поля задано с помощью field аргумент. Значение каждого поля равно соответствующему значению по умолчанию, заданному в контроллере, как возвращено в coreData . |
Для получения дополнительной информации о конфигурировании onlineData
поля, смотрите nlmpcmoveCodeGeneration
.
Multistage MPC
— Структура для многоступенчатых контроллеров MPCДля nlmpcMultistage
объекты, возвращенный onlineData
структура всегда содержит InitialGuess
поле .
Поле | Описание |
---|---|
InitialGuess | Исходное предположение для переменных решения, возвращенных как вектор-столбец длины, равняется сумме длин всех векторов переменной решения для каждого этапа. Для получения дополнительной информации смотрите |
Для nlmpcMultistage
объекты, onlineData
может также содержать следующие поля, в зависимости от настройки контроллера и значений аргументов.
Поле | Описание |
---|---|
MeasuredDisturbances | Измеренные значения воздействия — Это поле возвращено только, когда контроллер измерил входные параметры воздействия, то есть, когда |
StateFcnParameters | Значения параметров для функций состояния и Якобианов — Это поле возвращено только, когда функция предсказания состояния контроллера или ее якобиевские параметры модели использования, это когда |
StageFcnParameters | Значения параметров для стоимости этапа и ограничительных функций и их Якобианов — Это поле возвращено только, когда любая стоимость этапа или ограничительная функция или ее якобиан, используют параметры, это - когда существует по крайней мере один этап |
| Ограничительные значения — Каждое поле возвращено только, когда имя соответствующего поля задано с помощью field аргумент. Значение каждого поля равно соответствующему значению по умолчанию, заданному в контроллере, как возвращено в coreData . |
TerminalState | Конечное состояние, возвращенное как вектор-столбец со столькими же элементов сколько количество состояний. Конечное состояние является требуемым состоянием на последнем шаге предсказания. Чтобы задать желаемые конечные состояния во времени выполнения через это поле, необходимо задать конечные значения в |
Для получения дополнительной информации о конфигурировании onlineData
поля, смотрите nlmpcmove
и nlmpcmoveCodeGeneration
.
validateFcns
| nlmpcmove
| getSimulationData
| nlmpcmoveCodeGeneration
У вас есть модифицированная версия этого примера. Вы хотите открыть этот пример со своими редактированиями?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.