Многоступенчатый прогнозирующий контроллер нелинейной модели
Многоступенчатый нелинейный прогнозирующий контроллер модели вычисляет оптимальные перемещения управления через горизонт предсказания p используя нелинейную модель предсказания. Этапы включают текущие k времени и все шаги предсказания (от k + 1 до k + p). На каждом этапе могут быть заданы различные функции затрат и ограничений. Эти функции зависят только от информации о объекте, такой как состояния и входы, доступные на этом этапе. Для получения дополнительной информации о нелинейном MPC смотрите Нелинейный MPC.
создает nlobj
= nlmpcMultistage(p
,nx
,nu
)nlmpcMultistage
объект с горизонтом предсказания p
, и чья модель предсказания имеет nx
состояния, и nu
входы, и где все входы являются управляемыми переменными. Используйте этот синтаксис, если ваша модель не имеет измеренных или не измеренных входов нарушения порядка.
создает nlobj
= nlmpcMultistage(p
,nx
,'MV',mvIndex
,'MD',mdIndex
,'UD',udIndex
)nlmpcMultistage
объект, чья модель предсказания имеет как измеренные, так и неизмеренные входы нарушения порядка. Задайте входные индексы для манипулируемых переменных, измеренных нарушений порядка и неизмеренных нарушений порядка.
p
- Горизонт предсказанияКоличество шагов горизонта предсказания, заданное как положительное целое число. Этот синтаксис устанавливает свойство только для чтения PredictionHorizon
равен входной параметр p
. Поскольку это свойство доступно только для чтения, вы не можете изменить его после создания объекта контроллера. Обратите внимание, что p
также определяет количество каскадов (p
+1).
nx
- Количество состояний модели предсказанияКоличество состояний модели предсказания, заданное как положительное целое число. Это значение сохранено в Dimensions.NumberOfStates
свойство только для чтения контроллера. Вы не можете изменить количество состояний после создания объекта контроллера.
nu
- Количество входов модели предсказанияКоличество входов модели предсказания, которые все заданы как управляемые переменные, заданное в виде положительного целого числа. Это значение сохранено в Dimensions.NumberOfInputs
свойство только для чтения контроллера. Вы не можете изменить количество манипулируемых переменных после создания объекта контроллера.
mvIndex
- Манипулируемые индексы переменныхМанипулируемые индексы переменных, заданные как вектор положительных целых чисел. Вы не можете изменить эти индексы после создания объекта контроллера. Это значение сохранено в Dimensions.MVIndex
свойство контроллера.
Объединенный набор индексов из mvIndex
, mdIndex
, и udIndex
должны содержать все целые числа от 1
через Nu, где Nu - количество входов модели предсказания.
mdIndex
- Измеренные индексы нарушения порядкаИзмеренные индексы нарушения порядка, заданные как вектор положительных целых чисел. Вы не можете изменить эти индексы после создания объекта контроллера. Это значение сохранено в Dimensions.MDIndex
свойство контроллера.
Объединенный набор индексов из mvIndex
, mdIndex
, и udIndex
должны содержать все целые числа от 1
через Nu, где Nu - количество входов модели предсказания.
udIndex
- Неизмеренные индексы нарушения порядкаНеизмеренные индексы нарушения порядка, заданные как вектор положительных целых чисел. Вы не можете изменить эти индексы после создания объекта контроллера. Это значение сохранено в Dimensions.UDIndex
свойство контроллера.
Объединенный набор индексов из mvIndex
, mdIndex
, и udIndex
должны содержать все целые числа от 1
через Nu, где Nu - количество входов модели предсказания.
Ts
- Время расчета модели предсказания1
(по умолчанию) | положительный конечный скалярМодель предсказания шага расчета, заданная как положительный конечный скаляр. Контроллер использует модель в дискретном времени со шаг расчета Ts
для предсказания. Если вы задаете модель предсказания в непрерывном времени (Model.IsContinuousTime
является true
), затем контроллер дискретизирует модель с помощью встроенного неявного метода трапеций с шагом расчета Ts
.
PredictionHorizon
- Горизонт предсказанияЭто свойство доступно только для чтения.
Шаги горизонта предсказания, заданные как положительное целое число только для чтения. Область продукта PredictionHorizon
и Ts
- время предсказания; то есть как далеко контроллер смотрит в будущее.
UseMVRate
- Скорость СН, используемая в задаче MPCfalse
(по умолчанию) | true
Флаг, указывающий, используется ли скорость изменения манипулируемых переменных в качестве переменной принятия решения в формулировке задачи. Задайте UseMVRate
на true
если:
Необходимо задать жесткие верхние или нижние границы скорости СН.
Ставка MV появляется как термин в функции затрат или ограничений на любом этапе.
Вам нужно реализовать блочные ходы (которые вы можете сделать это путем установки RateMin
и RateMax
ограничения на соответствующих этапах равны нулю)
По умолчанию значение false
, что означает, что скорость изменения манипулируемых переменных явно не появляется в формулировке вашей задачи MPC.
Dimensions
- Информация о размерности модели предсказанияЭто свойство доступно только для чтения.
Размерная информация модели предсказания, заданная когда контроллер создан и сохранен как структура со следующими полями.
NumberOfStates
- Количество состоянийЭто свойство доступно только для чтения.
Количество состояний в модели предсказания, заданное как положительное целое число. Это значение соответствует nx
.
NumberOfInputs
- Количество состоянийЭто свойство доступно только для чтения.
Количество входов в модели предсказания, заданное в виде положительного целого числа. Это значение соответствует любому из nmv
или сумму длин mvIndex
, mdIndex
, и udIndex
.
MVIndex
- Манипулируемые индексы переменныхЭто свойство доступно только для чтения.
Манипулируемые индексы переменных для модели предсказания, заданные как вектор положительных целых чисел. Это значение соответствует mvIndex
.
MDIndex
- Измеренные индексы нарушения порядкаЭто свойство доступно только для чтения.
Измеренные индексы нарушения порядка для модели предсказания, заданные как вектор положительных целых чисел. Это значение соответствует mdIndex
.
UDIndex
- Неизмеренные индексы нарушения порядкаЭто свойство доступно только для чтения.
Неизмеренные индексы нарушения порядка для модели предсказания, заданные как вектор положительных целых чисел. Это значение соответствует udIndex
.
Model
- Модель предсказанияМодель предсказания, заданная как структура со следующими полями.
StateFcn
- Функция состоянияФункция состояния, заданная как строка, вектор символов или указатель на функцию. Для модели предсказания в непрерывном времени, StateFcn
- производная от состояния функция. Для модели предсказания в дискретном времени, StateFcn
- функция обновления состояния.
Если ваша функция состояния находится в непрерывном времени, контроллер автоматически дискретизирует модель с помощью неявного метода трапеций. Этот метод может обрабатывать умеренно жесткие модели, и его точность предсказания зависит от шага расчета контроллером Ts
; то есть большой шаг расчета приводит к неточному предсказанию.
Если метод дискретизации по умолчанию не обеспечивает удовлетворительное предсказание для вашего приложения, можно задать свою собственную модель предсказания в дискретном времени, которая использует другой метод, такой как многостадийное прямое правило Эйлера.
Вы можете задать свою функцию состояния одним из следующих способов:
Имя функции в текущей рабочей папке или в MATLAB® путь, заданный как строковый или символьный вектор
Model.StateFcn = "myStateFunction";
Указатель на локальную функцию или функцию, заданную в текущей рабочей папке или в пути MATLAB
Model.StateFcn = @myStateFunction;
Функция состояния должна иметь следующие входные и выходные параметры:
if Model.ParameterLength>0 out = myStateFunction(x,u,pm); else out = myStateFunction(x,u); end
где x
- вектор состояния, u
- вектор входа, и pm
является вектором параметра модели. Если IsContinuousTime
тогда верно out
должно быть значением производной состояния относительно времени, в противном случае это должно быть значение состояния в следующем временном интервале.
Для получения дополнительной информации смотрите Задать модель предсказания для нелинейного MPC.
StateJacFcn
- Государственная якобианская функция[]
(по умолчанию) | строку | вектор символов | указатель на функциюСостояние якобианской функции, заданное как строка, вектор символов или указатель на функцию. Лучшую практику использовать якобиан всякий раз, когда они доступны, поскольку они улучшают эффективность оптимизации. Если вы не задаете Якобиан для заданной функции, решатель нелинейного программирования должен численно вычислить Якобиан.
Можно задать выходную функцию одним из следующих способов:
Имя функции в текущей рабочей папке или на пути MATLAB, заданное как строковый или символьный вектор
Model.StateJacFcn = "myStateJacFunction";
Указатель на локальную функцию или функцию, заданную в текущей рабочей папке или в пути MATLAB
Model.StateJacFcn = @myStateJacFunction;
Якобианская функция состояния должна иметь следующие входные и выходные параметры:
if Model.ParameterLength>0 [A,Bmv] = myStateJacFunction(x,u,pm); else [A,Bmv] = myStateJacFunction(x,u); end
где x
- вектор состояния, u
- вектор входа, и pm
является вектором параметра модели. A
является якобианом функции состояния (непрерывное или дискретное время) относительно вектора состояния и B
якобиан функции состояния относительно манипулируемого вектора переменной. A
- квадратная матрица с Nx строками и столбцами, где Nx - количество состояний (Dimensions.NumberOfStates
). Bmv
должно иметь Nx строки и Nmv столбцов, где Nmv количество манипулируемых переменных.
Для получения дополнительной информации смотрите Задать модель предсказания для нелинейного MPC.
IsContinuousTime
- Флаг, указывающий временной интервал модели предсказанияtrue
(по умолчанию) | false
Флаг, указывающий временной интервал модели предсказания, заданный как один из следующих:
true
- Модель предсказания в непрерывном времени. В этом случае контроллер автоматически дискретизирует модель во время предсказания, используя Ts
.
false
- Модель предсказания в дискретном времени. В этом случае Ts
- шаг расчета модели.
Примечание
Если IsContinuousTime
является true
, StateFcn
должен вернуть производную состояния относительно времени, в текущее время. В противном случае StateFcn
необходимо вернуть состояние в следующий контрольный интервал.
ParameterLength
- Длина вектора параметра0
(по умолчанию) | неотрицательное целое числоДлина вектора параметра, используемого моделью предсказания, заданная в виде неотрицательного целого числа. Если функция состояния модели или ее якобиан требуют внешних параметров, задайте это значение как количество необходимых скалярных параметров. Во время выполнения вы должны затем предоставить вектор числового параметра, через весь горизонт предсказания, контроллеру.
TerminalState
- Состояние терминала[]
(по умолчанию) | векторКонечное состояние, заданная как вектор-столбец с таким количеством элементов, как количество состояний. Это конечное состояние является желаемым состоянием на последнем шаге предсказания. Если какие-либо состояния в векторе не имеют терминальных значений, задайте inf
в соответствующих местах, чтобы оставить их значения терминалов свободными.
Значение по умолчанию этого свойства []
, что означает, что никакое ограничение конечного состояния не применяется.
States
- Информация о состоянии и границыИнформация о состоянии и жесткие границы, заданные как массив структур с Nx элементами, где Nx количество состояний. Каждый структурный элемент имеет следующие поля.
Min
- Жесткая нижняя граница состояния-Inf
(по умолчанию) | скалярный вектор |Жесткая нижняя граница состояния, заданная как скаляр или вектор. По умолчанию эта нижняя граница -Inf
.
Чтобы использовать ту же границу между горизонтом предсказания, задайте скалярное значение.
Чтобы изменить границу над горизонтом предсказания от времени k + 1 до времени k + p, задайте вектор до p значений. Здесь k - текущее время, а p - горизонт предсказания. Если вы задаете меньше p значений, конечная граница используется для остальных шагов горизонта предсказания.
Границы состояний всегда являются жесткими ограничениями. Используйте ограничения неравенства каскадов для реализации мягких границ (см. Этапы).
Max
- Жесткая верхняя граница состоянияInf
(по умолчанию) | скалярный вектор |Жесткая верхняя граница состояния, заданная как скаляр или вектор. По умолчанию эта верхняя граница Inf
.
Чтобы использовать ту же границу между горизонтом предсказания, задайте скалярное значение.
Чтобы изменить границу над горизонтом предсказания от времени k + 1 до времени k + p, задайте вектор до p значений. Здесь k - текущее время, а p - горизонт предсказания. Если вы задаете меньше p значений, конечная граница используется для остальных шагов горизонта предсказания.
Границы состояний всегда являются жесткими ограничениями. Используйте ограничения неравенства каскадов для реализации мягких границ (см. Этапы).
Name
- имя государстваИмя состояния, заданное как строковый или символьный вектор. Имя состояния по умолчанию "x#"
, где #
- его индекс состояния.
Units
- Государственные модули""
(по умолчанию) | строку | вектор символовМодули измерения состояния, заданные как строковый или символьный вектор.
ManipulatedVariables
- Манипулирование информацией переменной и жесткими границамиИнформация и жесткие границы Манипулированной Переменной (MV), заданные как массив структур с Nmv элементами, где Nmv - количество манипулированных переменных. Для доступа к этому свойству можно использовать псевдоним MV
вместо ManipulatedVariables
.
Каждый структурный элемент имеет следующие поля.
Min
- жесткая нижняя граница СН-Inf
(по умолчанию) | скалярный вектор |MV жесткая нижняя граница, заданная как скаляр или вектор. По умолчанию эта нижняя граница -Inf
.
Чтобы использовать ту же границу между горизонтом предсказания, задайте скалярное значение.
Чтобы изменить границу над горизонтом предсказания от времени k времени k + p -1, задайте вектор до p значений. Здесь k - текущее время, а p - горизонт предсказания. Если вы задаете меньше p значений, конечная граница используется для остальных шагов горизонта предсказания.
Ограничения СН всегда являются жесткими ограничениями. Используйте ограничения неравенства каскадов для реализации мягких границ (см. Этапы).
Max
- жесткая верхняя граница СНInf
(по умолчанию) | скалярный вектор |MV жесткая верхняя граница, заданная как скаляр или вектор. По умолчанию эта верхняя граница Inf
.
Чтобы использовать ту же границу между горизонтом предсказания, задайте скалярное значение.
Чтобы изменить границу над горизонтом предсказания от времени k времени k + p -1, задайте вектор до p значений. Здесь k - текущее время, а p - горизонт предсказания. Если вы задаете меньше p значений, конечная граница используется для остальных шагов горизонта предсказания.
Ограничения СН всегда являются жесткими ограничениями. Используйте ограничения неравенства каскадов для реализации мягких границ (см. Этапы).
RateMin
- Скорость изменения СН жесткая нижняя граница-Inf
(по умолчанию) | непозитивный скаляр |Скорость изменения MV жесткая нижняя граница, заданная как непозитивный скаляр или вектор. Скорость изменения СН на этапе i определяется как MV (i) - MV (i-1). По умолчанию эта нижняя граница -Inf
. Если UseMVRate false
это значение игнорируется.
Чтобы использовать ту же границу между горизонтом предсказания, задайте скалярное значение.
Чтобы изменить границу над горизонтом предсказания от времени k времени k + p -1, задайте вектор до p значений. Здесь k - текущее время, а p - горизонт предсказания. Если вы задаете меньше p значений, конечная граница используется для остальных шагов горизонта предсказания.
Ограничения скорости MV всегда являются жесткими ограничениями. Используйте ограничение неравенства каскадов для реализации мягких границ (см. Этапы).
RateMax
- скорость изменения СН жесткая верхняя границаInf
(по умолчанию) | неотрицательный скаляр |Скорость изменения MV жесткая верхняя граница, заданная в виде неотрицательного скаляра или вектора. Скорость изменения СН на этапе i определяется как MV (i) - MV (i-1). По умолчанию эта верхняя граница Inf
.
Чтобы использовать ту же границу между горизонтом предсказания, задайте скалярное значение. Если UseMVRate false
это значение игнорируется.
Чтобы изменить границу над горизонтом предсказания от времени k времени k + p -1, задайте вектор до p значений. Здесь k - текущее время, а p - горизонт предсказания. Если вы задаете меньше p значений, конечная граница используется для остальных шагов горизонта предсказания.
Ограничения скорости СН всегда являются жесткими ограничениями. Используйте ограничение неравенства каскадов для реализации мягких границ (см. Этапы).
Name
- Имя СНИмя MV, заданное как строковый или символьный вектор. Имя MV по умолчанию "u#"
, где #
является его входным индексом.
Units
- модули СН""
(по умолчанию) | строку | вектор символовМодули измерения MV, заданные как строковый или символьный вектор.
MeasuredDisturbances
- Информация о измеренных нарушениях порядкаИнформация о измеренном нарушении порядка (MD), заданная как массив структур с Nmd элементами, где Nmd - количество измеренных нарушений порядка. Если ваша модель не имеет измеренных нарушений порядка, то MeasuredDisturbances
является []
. Для доступа к этому свойству можно использовать псевдоним MD
вместо MeasuredDisturbances
.
Каждый структурный элемент имеет следующие поля.
Name
- Имя MDMD- имени, заданный как строка или вектор символов. Имя MD по умолчанию "u#"
, где #
является его входным индексом.
Units
- модули MD""
(по умолчанию) | строку | вектор символовMD- модулей, заданный как строка или вектор символов.
Stages
- Поэтапные функции и функции ограниченийПоэтапные функции и функции ограничений, заданные как массив p+1
структуры (где p
- горизонт предсказания), каждый с следующими полями.
CostFcn
- Функция затрат на этапе i
Функция затрат на этапе i
, (где i
находится в диапазоне от 1
на p+1
), заданный как указатель на строку, вектор символов или функцию. Общая функция затрат нелинейной задачи MPC является суммой функций затрат на каждом этапе.
Вы можете задать функцию стоимости этапа одним из следующих способов:
Имя функции в текущей рабочей папке или на пути MATLAB, заданное как строковый или символьный вектор
Stages(i).CostFcn = 'myCostFunction';
Указатель на локальную функцию или функцию, заданную в текущей рабочей папке или в пути MATLAB
Stages(i).CostFcn = @myCostFunction;
В самом общем случае, в котором UseMVRate true
, и то и другое Stages(i).ParameterLength
и Stages(i).SlackVariableLength
больше 0
, функция затрат должна иметь следующие входные и выходные параметры:
Ji = myCostFunction(i,x,u,dmv,e,pv);
где
Ji
- двойной скаляр, выражающий стоимость для этапа i
.
i
- номер этапа из 1
(текущий контрольный интервал), чтобы p+1
(конец горизонта предсказания).
x
- вектор состояния.
u
- вектор входа.
dmv
- управляемый вектор переменной скорости (изменение относительно предыдущего контрольного интервала).
e
- вектор переменной замедления каскада.
pv
- вектор параметров каскада.
Если UseMVRate
является false
, затем dmv
вход должен быть пропущен.
Если Stages(i).SlackVariableLength
является 0
затем e
вход должен быть пропущен.
Если Stages(i).ParameterLength
является 0
затем pv
вход должен быть пропущен.
В сводные данные:
if UseMVRate is true if Stages(i).SlackVariableLength>0 if Stages(i).ParameterLength>0 Ji = myCostFunction(i,x,u,dmv,e,pv); else Ji = myCostFunction(i,x,u,dmv,e); end else if Stages(i).ParameterLength>0 Ji = myCostFunction(i,x,u,dmv,pv); else Ji = myCostFunction(i,x,u,dmv); end end else if Stages(i).SlackVariableLength>0 if Stages(i).ParameterLength>0 Ji = myCostFunction(i,x,u,e,pv); else Ji = myCostFunction(i,x,u,e); end else if Stages(i).ParameterLength>0 Ji = myCostFunction(i,x,u,pv); else Ji = myCostFunction(i,x,u); end end end
Обратите внимание, что вы также можете записать отдельные функции для отдельных этапов, пока их имя задано в Stages(i).CostFcn
и что все функции имеют необходимое количество входов и выходов в необходимом порядке.
Для получения дополнительной информации смотрите Задать модель предсказания для нелинейного MPC.
CostJacFcn
- Градиент функции затрат на этапе i
Градиент функции затрат на этапе i
, (где i
находится в диапазоне от 1
на p+1
), заданный как указатель на строку, вектор символов или функцию. Лучшая практика использовать якобианы (в данном случае градиенты) всякий раз, когда они доступны, поскольку они улучшают эффективность оптимизации. Если вы не задаете Якобиан для заданной функции, решатель нелинейного программирования должен численно вычислить Якобиан.
Вы можете задать функцию градиента стоимости этапа одним из следующих способов:
Имя функции в текущей рабочей папке или на пути MATLAB, заданное как строковый или символьный вектор
Stages(i).CostJacFcn = 'myCostJacFunction';
Указатель на локальную функцию или функцию, заданную в текущей рабочей папке или в пути MATLAB
Stages(i).CostJacFcn = @myCostJacFunction;
В самом общем случае, в котором UseMVRate true
, и то и другое Stages(i).ParameterLength
и Stages(i).SlackVariableLength
больше 0
функция градиента стоимости каскада должна иметь следующие входные и выходные параметры:
[Gx,Gmv,Gdmv,Ge] = myCostJacFunction(i,x,u,dmv,e,pv);
где
Gx
- градиент функции стоимости для этапа i
относительно вектора состояний x
. Это должен быть вектор-столбец с Nx элементами, где Nx количество состояний.
Gmv
- градиент функции затрат для этапа i
относительно манипулируемого вектора переменной mv
. Это должен быть вектор-столбец с Nmv элементами, где Nmv - количество манипулируемых переменных.
Gdmv
- градиент функции затрат для этапа i
относительно управляемого изменения вектора переменной dmv
. Это должен быть вектор-столбец с Nmv элементами, где Nmv - количество манипулируемых переменных.
Ge
- градиент функции затрат для этапа i
относительно вектора переменной замедления каскада e
. Это должен быть вектор-столбец с Ne элементами, где Ne количество переменных замедления каскада.
i
- номер этапа из 1
(текущий контрольный интервал), чтобы p+1
(конец горизонта предсказания).
x
- вектор состояния.
u
- вектор входа.
dmv
- управляемый вектор переменной скорости (изменение относительно предыдущего контрольного интервала).
e
- вектор переменной замедления каскада.
pv
- вектор параметров каскада.
Если UseMVRate
является false
, затем dmv
вход и Gdmv
выход должен быть пропущен.
Если Stages(i).SlackVariableLength
является 0
затем e
вход и Ge
выход должен быть пропущен.
Если Stages(i).ParameterLength
является 0
затем pv
вход должен быть пропущен.
В сводные данные:
if UseMVRate is true if Stages(i).SlackVariableLength>0 if Stages(i).ParameterLength>0 [Gx,Gmv,Gdmv,Ge] = myCostJacFunction(i,x,u,dmv,e,pv); else [Gx,Gmv,Gdmv,Ge] = myCostJacFunction(i,x,u,dmv,e); end else if Stages(i).ParameterLength>0 [Gx,Gmv,Gdmv] = myCostJacFunction(i,x,u,dmv,pv); else [Gx,Gmv,Gdmv] = myCostJacFunction(i,x,u,dmv); end end else if Stages(i).SlackVariableLength>0 if Stages(i).ParameterLength>0 [Gx,Gmv,Ge] = myCostJacFunction(i,x,u,e,pv); else [Gx,Gmv,Ge] = myCostJacFunction(i,x,u,e); end else if Stages(i).ParameterLength>0 [Gx,Gmv] = myCostJacFunction(i,x,u,pv); else [Gx,Gmv] = myCostJacFunction(i,x,u); end end end
Обратите внимание, что вы также можете записать отдельные функции для отдельных этапов, пока их имя задано в Stages(i).CostJacFcn
и что все функции имеют необходимое количество входов и выходов в необходимом порядке.
Для получения дополнительной информации смотрите Задать модель предсказания для нелинейного MPC.
EqConFcn
- Функция ограничения равенства на этапе i
Функция ограничения равенства на этапе i
, (где i
находится в диапазоне от 1
на p
), заданный как указатель на строку, вектор символов или функцию. Обратите внимание, что установка ограничения равенства для последнего этапа (p
+ 1) не поддерживается. Используйте TerminalState
поле Model
вместо этого свойство.
Можно задать функцию ограничения равенства каскадов одним из следующих способов:
Имя функции в текущей рабочей папке или на пути MATLAB, заданное как строковый или символьный вектор
Stages(i).EqConFcn = 'myEqConFunction';
Указатель на локальную функцию или функцию, заданную в текущей рабочей папке или в пути MATLAB
Stages(i).EqConFcn = @myEqConFunction;
В самом общем случае, в котором UseMVRate true
, и Stages(i).ParameterLength
больше 0
, функция ограничения равенства должна иметь следующие входные и выходные параметры:
Ceq = myEqConFunction(i,x,u,dmv,pv);
где
Ceq
является вектором, выражающим ограничения равенства для этапа i
. При любом возможном решении задачи MPC возвращенный Ceq
должно быть равно 0
. Обратите внимание, что количество элементов в Ceq
должно быть меньше, чем количество манипулируемых переменных, в противном случае задача переопределена и обычно недопустима.
i
- номер этапа из 1
(текущий контрольный интервал), чтобы p+1
(конец горизонта предсказания).
x
- вектор состояния.
u
- вектор входа.
dmv
- управляемый вектор переменной скорости (изменение относительно предыдущего контрольного интервала).
pv
- вектор параметров каскада.
Если UseMVRate
является false
, затем dmv
вход должен быть пропущен.
Если Stages(i).ParameterLength
является 0
затем pv
вход должен быть пропущен.
В сводных данных
if UseMVRate is true if Stages(i).ParameterLength>0 Ceq = myEqConFunction(i,x,u,dmv,pv); else Ceq = myEqConFunction(i,x,u,dmv); end else if Stages(i).ParameterLength>0 Ceq = myEqConFunction(i,x,u,pv); else Ceq = myEqConFunction(i,x,u); end end
Обратите внимание, что вы также можете записать отдельные функции для отдельных этапов, пока их имя задано в Stages(i).EqConFcn
и что все функции имеют необходимое количество входов и выходов в необходимом порядке.
Для получения дополнительной информации смотрите Задать модель предсказания для нелинейного MPC.
EqConJacFcn
- якобиан функции ограничения равенства на стадии i
Якобиан функции ограничения равенства на этапе i
, (где i
находится в диапазоне от 1
на p
), заданный как указатель на строку, вектор символов или функцию. Обратите внимание, что установка ограничения равенства (и, следовательно, его якобианской функции) для последнего этапа (p
+ 1) не поддерживается.
Лучшую практику использовать якобиан всякий раз, когда они доступны, поскольку они улучшают эффективность оптимизации. Если вы не задаете Якобиан для заданной функции, решатель нелинейного программирования должен численно вычислить Якобиан.
Можно задать якобианскую функцию ограничения равенства каскадов одним из следующих способов:
Имя функции в текущей рабочей папке или на пути MATLAB, заданное как строковый или символьный вектор
Stages(i).EqConJacFcn = 'myEqConJacFunction';
Указатель на локальную функцию или функцию, заданную в текущей рабочей папке или в пути MATLAB
Stages(i).EqConJacFcn = @myEqConJacFunction;
В самом общем случае, в котором UseMVRate true
, и Stages(i).ParameterLength
больше 0
, ограничивающая равенство якобианская функция должна иметь следующие входные и выходные параметры:
[Ceqx,Ceqmv,Ceqdmv] = myEqConJacFunction(i,x,u,dmv,pv);
где
Ceqx
является якобианом функции ограничения равенства для стадии i
, относительно вектора состояний x
. Это должна быть матрица с NCeq строками и Nx столбцами, где NCeq - количество ограничений равенства каскадов и Nx количество состояний. Обратите внимание, что NCeq должно быть меньше, чем NCmv в противном случае проблема переопределена и обычно недопустима.
Ceqmv
является якобианом функции ограничения равенства для стадии i
, относительно манипулируемого вектора переменной mv
. Это должна быть матрица с NCeq строками и Nmv столбцами, где NCeq - количество ограничений равенства каскадов и Nmv количество манипулируемых переменных.
Ceqdmv
является якобианом функции ограничения равенства для стадии i
, относительно манипулируемого изменения вектора переменной (скорости) dmv
. Это должна быть матрица с NCeq строками и Nmv столбцами, где NCeq - количество ограничений равенства каскадов и Nmv количество манипулируемых переменных.
i
- номер этапа из 1
(текущий контрольный интервал), чтобы p+1
(конец горизонта предсказания).
x
- вектор состояния.
u
- вектор входа.
dmv
- управляемый вектор переменной скорости (изменение относительно предыдущего контрольного интервала).
pv
- вектор параметров каскада.
Если UseMVRate
является false
, затем dmv
вход и Ceqdmv
выход должен быть пропущен.
Если Stages(i).ParameterLength
является 0
затем pv
вход должен быть пропущен.
В сводных данных
if UseMVRate is true if Stages(i).ParameterLength>0 [Ceqx,Ceqmv,Ceqdmv] = myEqConJacFunction(i,x,u,dmv,pv); else [Ceqx,Ceqmv,Ceqdmv] = myEqConJacFunction(i,x,u,dmv); end else if Stages(i).ParameterLength>0 [Ceqx,Ceqmv] = myEqConJacFunction(i,x,u,pv); else [Ceqx,Ceqmv] = myEqConJacFunction(i,x,u); end end
Обратите внимание, что вы также можете записать отдельные функции для отдельных этапов, пока их имя задано в Stages(i).EqConJacFcn
и что все функции имеют необходимое количество входов и выходов в необходимом порядке.
Для получения дополнительной информации смотрите Задать модель предсказания для нелинейного MPC.
IneqConFcn
- Функция ограничения неравенства на этапе i
Функция ограничения неравенства на этапе i
, (где i
находится в диапазоне от 1
на p+1
), заданный как указатель на строку, вектор символов или функцию.
Можно задать функцию ограничения неравенства каскада одним из следующих способов:
Имя функции в текущей рабочей папке или на пути MATLAB, заданное как строковый или символьный вектор
Stages(i).IneqConFcn = 'myIneqConFunction';
Указатель на локальную функцию или функцию, заданную в текущей рабочей папке или в пути MATLAB
Stages(i).IneqConFcn = @myIneqConFunction;
В самом общем случае, в котором UseMVRate true
, и то и другое Stages(i).ParameterLength
и Stages(i).SlackVariableLength
больше 0
Функция ограничения неравенства должна иметь следующие входные и выходные параметры:
C = myIneqConFunction(i,x,u,dmv,e,pv);
где
C
является вектором, выражающим ограничения неравенства для этапа i
. Для любого возможного решения задачи MPC, C
не должно быть положительным.
i
- номер этапа из 1
(текущий контрольный интервал), чтобы p+1
(конец горизонта предсказания).
x
- вектор состояния.
u
- вектор входа.
dmv
- управляемый вектор переменной скорости (изменение относительно предыдущего контрольного интервала).
e
- вектор переменной замедления каскада.
pv
- вектор параметров каскада.
Если UseMVRate
является false
, затем dmv
вход должен быть пропущен.
Если Stages(i).SlackVariableLength
является 0
затем e
вход должен быть пропущен.
Если Stages(i).ParameterLength
является 0
затем pv
вход должен быть пропущен.
В сводные данные:
if UseMVRate is true if Stages(i).SlackVariableLength>0 if Stages(i).ParameterLength>0 C = myIneqConFunction(i,x,u,dmv,e,pv); else C = myIneqConFunction(i,x,u,dmv,e); end else if Stages(i).ParameterLength>0 C = myIneqConFunction(i,x,u,dmv,pv); else C = myIneqConFunction(i,x,u,dmv); end end else if Stages(i).SlackVariableLength>0 if Stages(i).ParameterLength>0 C = myIneqConFunction(i,x,u,e,pv); else C = myIneqConFunction(i,x,u,e); end else if Stages(i).ParameterLength>0 C = myIneqConFunction(i,x,u,pv); else C = myIneqConFunction(i,x,u); end end end
Обратите внимание, что вы также можете записать отдельные функции для отдельных этапов, пока их имя задано в Stages(i).IneqConFcn
и что все функции имеют необходимое количество входов и выходов в необходимом порядке.
Для получения дополнительной информации смотрите Задать модель предсказания для нелинейного MPC.
IneqConJacFcn
- якобиан функции ограничения неравенства на стадии i
Якобиан функции ограничения неравенства на стадии i
, (где i
находится в диапазоне от 1
на p+1
), заданный как указатель на строку, вектор символов или функцию. Лучшую практику использовать якобиан всякий раз, когда они доступны, поскольку они улучшают эффективность оптимизации. Если вы не задаете Якобиан для заданной функции, решатель нелинейного программирования должен численно вычислить Якобиан.
Можно задать якобианскую функцию ограничения рабочей области одним из следующих способов:
Имя функции в текущей рабочей папке или на пути MATLAB, заданное как строковый или символьный вектор
Stages(i).IneqConJacFcn = 'myIneqConJacFunction';
Указатель на локальную функцию или функцию, заданную в текущей рабочей папке или в пути MATLAB
Stages(i).IneqConJacFcn = @myIneqConJacFunction;
В самом общем случае, в котором UseMVRate true
, и то и другое Stages(i).ParameterLength
и Stages(i).SlackVariableLength
больше 0
, якобианская функция стоимости этапа должна иметь следующие входные и выходные параметры:
[Cx,Cmv,Cdmv,Ce] = myEqConJacFunction(i,x,u,dmv,e,pv);
где
Cx
является якобианом функции ограничения неравенства для стадии i
, относительно вектора состояний x
. Это должна быть матрица с NC строками и Nx столбцами, где NC - количество ограничений неравенства каскадов и Nx количество состояний.
Cmv
является якобианом функции ограничения неравенства для стадии i
, относительно манипулируемого вектора переменной mv
. Это должна быть матрица с NC строками и Nmv столбцами, где NC - количество ограничений неравенства каскадов и Nmv количество манипулируемых переменных.
Cdmv
является якобианом функции ограничения неравенства для стадии i
, относительно манипулируемого изменения переменной (скорости) dmv
. Это должна быть матрица с NC строками и Nmv столбцами, где NC - количество ограничений неравенства каскадов и Nmv количество манипулируемых переменных.
Ce
является якобианом функции ограничения неравенства для стадии i
, относительно вектора переменной ослабления каскада e
. Это должна быть матрица с NC строками и Ne столбцами, где NC - количество ограничений неравенства каскада и Ne количество переменных замедления каскада.
i
- номер этапа из 1
(текущий контрольный интервал), чтобы p+1
(конец горизонта предсказания).
x
- вектор состояния.
u
- вектор входа.
dmv
- управляемый вектор переменной скорости (изменение относительно предыдущего контрольного интервала).
e
- вектор переменной замедления каскада.
pv
- вектор параметров каскада.
Если UseMVRate
является false
, затем dmv
вход и Cdmv
выход должен быть пропущен.
Если Stages(i).SlackVariableLength
является 0
затем e
вход и Ce
выход должен быть пропущен.
Если Stages(i).ParameterLength
является 0
затем pv
вход должен быть пропущен.
В сводные данные:
if UseMVRate is true if Stages(i).SlackVariableLength>0 if Stages(i).ParameterLength>0 [Cx,Cmv,Cdmv,Ce] = myIneqConJacFunction(i,x,u,dmv,e,pv); else [Cx,Cmv,Cdmv,Ce] = myIneqConJacFunction(i,x,u,dmv,e); end else if Stages(i).ParameterLength>0 [Cx,Cmv,Cdmv] = myIneqConJacFunction(i,x,u,dmv,pv); else [Cx,Cmv,Cdmv] = myIneqConJacFunction(i,x,u,dmv); end end else if Stages(i).SlackVariableLength>0 if Stages(i).ParameterLength>0 [Cx,Cmv,Ce] = myIneqConJacFunction(i,x,u,e,pv); else [Cx,Cmv,Ce] = myIneqConJacFunction(i,x,u,e); end else if Stages(i).ParameterLength>0 [Cx,Cmv] = myIneqConJacFunction(i,x,u,pv); else [Cx,Cmv] = myIneqConJacFunction(i,x,u); end end end
Обратите внимание, что вы также можете записать отдельные функции для отдельных этапов, пока их имя задано в Stages(i).IneqConFcn
и что все функции имеют необходимое количество входов и выходов в необходимом порядке.
Для получения дополнительной информации смотрите Задать модель предсказания для нелинейного MPC.
SlackVariableLength
- Длина вектора переменной slack каскада0
(по умолчанию) | неотрицательное целое числоДлина вектора переменной slack, используемой функциями cost и constraint на этапе i
, заданный как неотрицательное целое число. Можно использовать переменные slack для реализации мягких ограничений для заданного этапа, используя соответствующую IneqConFcn
и CostFcn
функций.
ParameterLength
- Длина вектора параметра0
(по умолчанию) | неотрицательное целое числоДлина вектора параметра, используемого функциями цены и ограничения на этапе i
, заданный как неотрицательное целое число. Если любой каскад использует параметры, это значение должно быть положительным, и, как следствие, все функции каскада должны иметь вектор параметра в качестве последнего входного параметра.
Optimization
- Пользовательские оптимизационные функции и решательПользовательские оптимизационные функции и решатель, заданные как структура со следующими полями.
CustomSolverFcn
- Пользовательский решатель нелинейного программирования[]
(по умолчанию) | строку | вектор символов | указатель на функциюПользовательская функция нелинейного решателя программирования, заданная как строка, вектор символов или указатель на функцию. Если у вас нет программного обеспечения Optimization Toolbox™, необходимо задать свой собственный пользовательский решатель нелинейного программирования. Вы можете задать свою пользовательскую функцию решателя одним из следующих способов:
Имя функции в текущей рабочей папке или на пути MATLAB, заданное как строковый или символьный вектор
Optimization.CustomSolverFcn = "myNLPSolver";
Указатель на функцию в текущей рабочей папке или на пути MATLAB
Optimization.CustomSolverFcn = @myNLPSolver;
Для получения дополнительной информации смотрите Сконфигурируйте решатель оптимизации для нелинейного MPC.
SolverOptions
- Опции решателяfmincon
| []
Опции решателя, заданные как объект опций для fmincon
или []
.
Если у вас есть программное обеспечение Optimization Toolbox, SolverOptions
содержит объект опции для fmincon
решатель.
Если у вас нет Optimization Toolbox, SolverOptions
является []
.
Для получения дополнительной информации смотрите Сконфигурируйте решатель оптимизации для нелинейного MPC.
UseSuboptimalSolution
- Флаг, указывающий, является ли неоптимальное решение приемлемымfalse
(по умолчанию) | true
Флаг, указывающий, является ли неоптимальное решение приемлемым, задается как логическое значение. Когда решатель нелинейного программирования достигает максимального количества итераций, не найдя решения (выходной флаг 0
), контроллер:
Замораживает значения СН, если UseSuboptimalSolution
является false
Применяет неоптимальное решение, найденное решателем после окончательной итерации, если UseSuboptimalSolution
является true
Чтобы задать максимальное количество итераций, используйте Optimization.SolverOptions.MaxIter
.
PerturbationRatio
- Коэффициент, используемый для вычисления размеров возмущений1e-6
(по умолчанию) | положительная скалярная величинаКоэффициент, используемый для вычисления размеров возмущений, применяемых к переменным принятия решений при использовании прямых конечных различий для оценки производных. Вектор размера возмущения для вектора переменной принятия решения z
является PerturbationRatio*max(abs(z),1)
. Значение по умолчанию для этого параметра является 1e-6. Если ваша модель предсказания жесткая, а ваши условия стоимости/ограничения чувствительны, используйте меньшее значение, такое как 1e-8.
nlmpcmove | Вычислите оптимальное действие управления для нелинейного контроллера MPC |
validateFcns | Исследуйте модель предсказания и пользовательские функции nlmpc или nlmpcMultistage объекты для потенциальных проблем |
getSimulationData | Создайте структуру данных, чтобы симулировать многоступенчатый контроллер MPC с nlmpcmove |
Создайте нелинейный многоступенчатый объект MPC с горизонтом предсказания 5
шаги, 2
состояния, и 1
управляемая переменная.
nlobj = nlmpcMultistage(5,2,1);
Создайте нелинейный многоступенчатый объект MPC с горизонтом предсказания 5
шаги, 2
состояния, и 2
входы, где первый вход является измеренными нарушениями порядка, а второй - манипулируемой переменной.
nlobj = nlmpcMultistage(5,2,'MV',2,'MD',1);
Создайте нелинейный многоступенчатый объект MPC с горизонтом предсказания 5
шаги, 2
состояния, и 2
входы, где первый является манипулированной переменной, а второй - неизмеренным нарушением порядка.
nlobj = nlmpcMultistage(5,2,'MV',1,'UD',2);
Создайте нелинейный многоступенчатый объект MPC с горизонтом предсказания 6
шаги, 3
состояния, и 4
входы, где первые два входных сигнала являются измеренными нарушениями порядка, третий является манипулированной переменной, а четвертый является неизмеренным нарушением порядка.
nlobj = nlmpcMultistage(6, 3, 'MV',3,'MD',[1 2],'UD',4);
Установите время дискретизации 2
секунд и отобразите nlobj
объект
nlobj.Ts = 2
nlobj = nlmpcMultistage with properties: Ts: 2 PredictionHorizon: 6 UseMVRate: 0 Dimensions: [1×1 struct] Model: [1×1 struct] States: [1×3 struct] ManipulatedVariables: [1×1 struct] MeasuredDisturbances: [1×2 struct] Stages: [1×7 struct] Optimization: [1×1 struct]
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.