Многоступенчатый контроллер прогнозирования нелинейной модели
Многоступенчатый контроллер прогнозирования нелинейной модели вычисляет оптимальные управляющие перемещения по горизонту прогнозирования 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 - Время выборки модели прогнозирования1 (по умолчанию) | положительный конечный скалярВремя выборки модели прогнозирования, указанное как положительный конечный скаляр. Контроллер использует модель дискретного времени с временем выборки Ts для прогнозирования. Если задана модель прогнозирования непрерывного времени (Model.IsContinuousTime является true), то контроллер дискретизирует модель, используя встроенное неявное трапециевидное правило с временем выборки Ts.
PredictionHorizon - Горизонт прогнозированияЭто свойство доступно только для чтения.
Шаги горизонта прогнозирования, заданные как положительное целое число только для чтения. Продукт PredictionHorizon и Ts - время прогнозирования; то есть насколько контроллер смотрит в будущее.
UseMVRate - Скорость СН, используемая при решении проблемы ПДКfalse (по умолчанию) | trueФлаг, указывающий, используется ли скорость изменения обрабатываемых переменных в качестве переменной решения в формулировке задачи. Набор UseMVRate кому true если:
Необходимо указать жесткие верхние или нижние границы на скорости среднего напряжения.
Ставка среднего напряжения отображается как термин в функции затрат или ограничений на любом этапе.
Необходимо реализовать перемещения блоков (что можно сделать, установив RateMin и RateMax границы на соответствующих этапах до нуля)
По умолчанию используется значение false, что означает, что скорость изменения манипулируемых переменных не появляется явно в формулировке вашей проблемы MPC.
Dimensions - Прогнозная информация о размерах моделиЭто свойство доступно только для чтения.
Информация о размерах модели прогнозирования, заданная при создании контроллера и сохраненная в виде структуры со следующими полями.
NumberOfStates - Количество состоянийЭто свойство доступно только для чтения.
Число состояний в модели прогнозирования, указанное как положительное целое число. Это значение соответствует nx.
NumberOfInputs - Количество состоянийЭто свойство доступно только для чтения.
Число входов в модели прогнозирования, указанное как положительное целое число. Это значение соответствует либо nmv или сумма длин mvIndex, mdIndex, и udIndex.
MVIndex - Манипулируемые индексы переменныхЭто свойство доступно только для чтения.
Манипулируемые индексы переменных для модели прогнозирования, заданные как вектор положительных целых чисел. Это значение соответствует mvIndex.
MDIndex - Измеренные показатели возмущенийЭто свойство доступно только для чтения.
Измеренные индексы возмущений для модели прогнозирования, определенные как вектор положительных целых чисел. Это значение соответствует mdIndex.
UDIndex - Неизмеренные индексы возмущенийЭто свойство доступно только для чтения.
Неизмеренные индексы возмущений для модели прогнозирования, определенные как вектор положительных целых чисел. Это значение соответствует udIndex.
Model - Модель прогнозированияМодель прогнозирования, заданная как структура со следующими полями.
StateFcn - Функция состоянияФункция состояния, заданная как строка, символьный вектор или дескриптор функции. Для модели непрерывного прогнозирования, StateFcn - производная от состояния. Для модели дискретного прогнозирования, StateFcn - функция обновления состояния.
Если функция состояния выполняется непрерывно, контроллер автоматически дискретизирует модель с помощью неявного трапециевидного правила. Этот метод может обрабатывать умеренно жесткие модели, и его точность прогнозирования зависит от времени выборки контроллера Ts; то есть большое время выборки приводит к неточному прогнозированию.
Если метод дискретизации по умолчанию не обеспечивает удовлетворительное прогнозирование для приложения, можно указать собственную модель дискретного прогнозирования, использующую другой метод, например правило Euler многоступенчатого прямого режима.
Можно указать функцию состояния одним из следующих способов:
Имя функции в текущей рабочей папке или в пути 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 true, то 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 - Скорость изменения MV, жесткая нижняя граница-Inf (по умолчанию) | неположительный скаляр | векторMV скорость изменения жесткой нижней границы, заданная как непозволительный скаляр или вектор. Скорость изменения СН на стадии i определяется как СН (i) - СН (i-1). По умолчанию эта нижняя граница равна-Inf. Если UseMVRate имеет значение false это значение игнорируется.
Чтобы использовать ту же границу по горизонту прогнозирования, укажите скалярное значение.
Для изменения границы по горизонту прогнозирования от времени k до времени k + p-1 укажите вектор до p значений. Здесь k - текущее время, а p - горизонт прогнозирования. Если указано меньше значений p, конечная граница используется для оставшихся шагов горизонта прогнозирования.
Границы скорости среднего напряжения всегда являются жесткими ограничениями. Используйте ограничение неравенства стадий для реализации мягких границ (см. Этапы).
RateMax - Скорость изменения среднего напряжения, жесткая верхняя границаInf (по умолчанию) | неотрицательный скаляр | векторMV скорость изменения жесткой верхней границы, заданной как неотрицательный скаляр или вектор. Скорость изменения СН на стадии i определяется как СН (i) - СН (i-1). По умолчанию эта верхняя граница равнаInf.
Чтобы использовать ту же границу по горизонту прогнозирования, укажите скалярное значение. Если UseMVRate имеет значение false это значение игнорируется.
Для изменения границы по горизонту прогнозирования от времени k до времени k + p-1 укажите вектор до p значений. Здесь k - текущее время, а p - горизонт прогнозирования. Если указано меньше значений p, конечная граница используется для оставшихся шагов горизонта прогнозирования.
Ограничения скорости среднего напряжения всегда являются жесткими ограничениями. Используйте ограничение неравенства стадий для реализации мягких границ (см. Этапы).
Name - Наименование СНИмя MV, указанное как строковый или символьный вектор. Имя MV по умолчанию: "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Обратите внимание, что можно также писать отдельные функции для отдельных этапов, если их имя указано в 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. При любом выполнимом решении проблемы ПДК возвращается 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) не поддерживается.
Рекомендуется использовать якобинцев всякий раз, когда они доступны, поскольку они повышают эффективность оптимизации. Если якобиан для данной функции не указан, решатель нелинейного программирования должен численно вычислить якобиан.
Можно задать функцию Якобиана (Jacobian) ограничения равенства ступеней одним из следующих способов.
Имя функции в текущей рабочей папке или в пути 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. Для любого возможного решения проблемы ПДК, 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. Она должна быть матрицей с ЧПУ-строками и столбцами Nx, где NC - число ограничений неравенства стадий и Nx - число состояний.
Cmv является якобианом функции ограничения неравенства для этапа i, по отношению к управляемому вектору переменной mv. Она должна быть матрицей с ЧПУ-строками и столбцами Nmv, где NC - количество зависимостей неравенства стадий, а Nmv - количество манипулируемых переменных.
Cdmv является якобианом функции ограничения неравенства для этапа i, в отношении манипулируемого переменного изменения (скорость) dmv. Она должна быть матрицей с ЧПУ-строками и столбцами Nmv, где NC - количество зависимостей неравенства стадий, а Nmv - количество манипулируемых переменных.
Ce является якобианом функции ограничения неравенства для этапа i, относительно вектора переменной слабости стадии e. Она должна быть матрицей с ЧПУ-строками и столбцами 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 - Длина вектора переменной слабости ступени0 (по умолчанию) | неотрицательное целое числоДлина переменного вектора ослабления, используемого функциями затрат и ограничений на этапе i, указанное как неотрицательное целое число. Переменные слабости можно использовать для реализации мягких ограничений для данной стадии, используя соответствующие 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 решатель.
Если панель инструментов оптимизации отсутствует, 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. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.