Многоступенчатая модель Nonlinear прогнозирующий контроллер
Многоступенчатый нелинейный прогнозирующий контроллер модели вычисляет оптимальное управление, преодолевает горизонт предсказания p с помощью нелинейной модели предсказания. Этапы включают текущее время k и все шаги предсказания (от k +1 к k +p). Различная стоимость и ограничительные функции могут быть заданы на каждом этапе. Эти функции только используют информацию об объекте, такую как состояния и входные параметры, доступные на том этапе. Для получения дополнительной информации о нелинейном MPC смотрите Нелинейный MPC.
создает nlobj
= nlmpcMultistage(p
,nx
,nu
)nlmpcMultistage
объект с горизонтом предсказания p
, и чья модель предсказания имеет nx
состояния и nu
входные параметры, и где все входные параметры являются переменными, которыми управляют. Используйте этот синтаксис, если ваша модель не имеет никаких измеренных или неизмеренных входных параметров воздействия.
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
— Шаг расчета модели Prediction
(значение по умолчанию) | положительный конечный скалярШаг расчета модели Prediction в виде положительного конечного скаляра. Диспетчер использует модель дискретного времени с шагом расчета Ts
для предсказания. Если вы задаете модель предсказания непрерывного времени (Model.IsContinuousTime
true
), затем контроллер дискретизирует модель с помощью встроенного неявного метода трапеций с шагом расчета Ts
.
PredictionHorizon
— Горизонт предсказанияЭто свойство доступно только для чтения.
Горизонт предсказания продвигается в виде положительного целого числа только для чтения. Продукт PredictionHorizon
и Ts
время предсказания; то есть, как далеко контроллер изучает будущее.
UseMVRate
— Уровень мВ используется в проблеме MPCfalse
(значение по умолчанию) | true
Отметьте указание, используется ли скорость изменения переменных, которыми управляют, в качестве переменной решения в формулировке задачи. Установите UseMVRate
к true
если:
Необходимо задать трудно верхние или нижние границы на уровне мВ.
Уровень мВ появляется как термин в стоимости или ограничительной функции на любом этапе.
Необходимо реализовать перемещения блока (который можно сделать так путем установки RateMin
и RateMax
границы на соответствующих этапах, чтобы обнулить)
По умолчанию значением является false
, что означает, что скорость изменения переменных, которыми управляют, явным образом не появляется в формулировке вашей проблемы MPC.
Dimensions
— Модель Prediction размерная информацияЭто свойство доступно только для чтения.
Размерная информация модели Prediction, указанная, когда контроллер создается и хранится как структура со следующими полями.
NumberOfStates
— Количество состоянийЭто свойство доступно только для чтения.
Количество состояний в модели предсказания в виде положительного целого числа. Это значение соответствует nx
.
NumberOfInputs
— Количество состоянийЭто свойство доступно только для чтения.
Количество входных параметров в модели предсказания в виде положительного целого числа. Это значение соответствует любому nmv
или сумма длин mvIndex
, mdIndex
, и udIndex
.
MVIndex
— Переменные индексы, которыми управляют,Это свойство доступно только для чтения.
Переменные индексы, которыми управляют, для модели предсказания в виде вектора из положительных целых чисел. Это значение соответствует mvIndex
.
MDIndex
— Измеренные индексы воздействияЭто свойство доступно только для чтения.
Измеренные индексы воздействия для модели предсказания в виде вектора из положительных целых чисел. Это значение соответствует mdIndex
.
UDIndex
— Неизмеренные индексы воздействияЭто свойство доступно только для чтения.
Неизмеренные индексы воздействия для модели предсказания в виде вектора из положительных целых чисел. Это значение соответствует udIndex
.
Model
— Модель PredictionМодель Prediction в виде структуры со следующими полями.
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
— Длина вектора параметра
(значение по умолчанию) | неотрицательное целое числоДлина вектора параметра используется моделью предсказания в виде неотрицательного целого числа. Если функция состояния модели или ее якобиан требуют внешних параметров, устанавливают это значение к количеству скалярных необходимых параметров. Во времени выполнения необходимо затем обеспечить числовой вектор параметра, через целый горизонт предсказания, контроллеру.
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
(значение по умолчанию) | скаляр | векторМВ твердая нижняя граница в виде скаляра или вектора. По умолчанию этой нижней границей является -Inf
.
Чтобы использовать то же самое, связанное через горизонт предсказания, задайте скалярное значение.
Чтобы варьироваться связанное по горизонту предсказания со времени k ко времени k +p-1, задайте вектор из до значений p. Здесь, k является текущим временем, и p является горизонтом предсказания. Если вы задаете меньше, чем значения p, связанный финал используется для остающихся шагов горизонта предсказания.
Границы мВ всегда являются трудными ограничениями. Используйте ограничения неравенства этапа, чтобы реализовать мягкие границы (см. Этапы).
Max
— МВ твердая верхняя границаInf
(значение по умолчанию) | скаляр | векторМВ твердая верхняя граница в виде скаляра или вектора. По умолчанию этой верхней границей является Inf
.
Чтобы использовать то же самое, связанное через горизонт предсказания, задайте скалярное значение.
Чтобы варьироваться связанное по горизонту предсказания со времени k ко времени k +p-1, задайте вектор из до значений p. Здесь, k является текущим временем, и p является горизонтом предсказания. Если вы задаете меньше, чем значения p, связанный финал используется для остающихся шагов горизонта предсказания.
Границы мВ всегда являются трудными ограничениями. Используйте ограничения неравенства этапа, чтобы реализовать мягкие границы (см. Этапы).
RateMin
— Скорость изменения мВ твердая нижняя граница-Inf
(значение по умолчанию) | неположительный скаляр | векторСкорость изменения мВ твердая нижняя граница в виде неположительного скаляра или вектора. Скорость изменения мВ на этапе i задана как MV (i) - MV (i-1). По умолчанию этой нижней границей является -Inf
. Если UseMVRate является false
это значение проигнорировано.
Чтобы использовать то же самое, связанное через горизонт предсказания, задайте скалярное значение.
Чтобы варьироваться связанное по горизонту предсказания со времени k ко времени k +p-1, задайте вектор из до значений p. Здесь, k является текущим временем, и p является горизонтом предсказания. Если вы задаете меньше, чем значения p, связанный финал используется для остающихся шагов горизонта предсказания.
Границы уровня мВ всегда являются трудными ограничениями. Используйте ограничение неравенства этапа, чтобы реализовать мягкие границы (см. Этапы).
RateMax
— Скорость изменения мВ твердая верхняя границаInf
(значение по умолчанию) | неотрицательный скаляр | векторСкорость изменения мВ твердая верхняя граница в виде неотрицательного скаляра или вектора. Скорость изменения мВ на этапе i задана как MV (i) - MV (i-1). По умолчанию этой верхней границей является Inf
.
Чтобы использовать то же самое, связанное через горизонт предсказания, задайте скалярное значение. Если UseMVRate является false
это значение проигнорировано.
Чтобы варьироваться связанное по горизонту предсказания со времени k ко времени k +p-1, задайте вектор из до значений p. Здесь, k является текущим временем, и p является горизонтом предсказания. Если вы задаете меньше, чем значения p, связанный финал используется для остающихся шагов горизонта предсказания.
Границы Уровня мВ всегда являются трудными ограничениями. Используйте ограничение неравенства этапа, чтобы реализовать мягкие границы (см. Этапы).
Name
— Имя мВИмя мВ в виде строки или вектора символов. Именем мВ по умолчанию является "u#"
, где #
его входной индекс.
Units
— Модули мВ""
(значение по умолчанию) | представляет в виде строки | вектор символовМодули мВ в виде строки или вектора символов.
MeasuredDisturbances
— Измеренная информация о воздействииИнформация об измеренном воздействии (MD) в виде массива структур с элементами Nmd, где Nmd является количеством измеренных воздействий. Если ваша модель не имеет измеренных воздействий, то MeasuredDisturbances
[]
. Чтобы получить доступ к этому свойству, можно использовать псевдоним MD
вместо MeasuredDisturbances
.
Каждый элемент структуры имеет следующие поля.
Name
— Имя MDИмя MD в виде строки или вектора символов. Именем 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
Обратите внимание на то, что можно также записать отдельные функции для отдельных этапов, пока их имя задано in 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
Обратите внимание на то, что можно также записать отдельные функции для отдельных этапов, пока их имя задано in 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
Обратите внимание на то, что можно также записать отдельные функции для отдельных этапов, пока их имя задано in 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
Обратите внимание на то, что можно также записать отдельные функции для отдельных этапов, пока их имя задано in 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
mustBeNonpositive.
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
Обратите внимание на то, что можно также записать отдельные функции для отдельных этапов, пока их имя задано in 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
Обратите внимание на то, что можно также записать отдельные функции для отдельных этапов, пока их имя задано in Stages(i).IneqConFcn
и что все функции имеют необходимое количество вводов и выводов в необходимом порядке.
Для получения дополнительной информации смотрите, Задают Модель Предсказания для Нелинейного MPC.
SlackVariableLength
— Длина этапа ослабляет переменный вектор
(значение по умолчанию) | неотрицательное целое числоДлина слабого переменного вектора, используемого стоимостью и ограничением, функционирует на этапе i
В виде неотрицательного целого числа. Можно использовать слабые переменные, чтобы реализовать мягкие ограничения для данного этапа, с помощью соответствующего IneqConFcn
и CostFcn
функции.
ParameterLength
— Длина вектора параметра
(значение по умолчанию) | неотрицательное целое числоДлина вектора параметра, используемого стоимостью и ограничением, функционирует на этапе 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. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.