При создании нелинейного MPC-контроллера с помощью nlmpc можно определить любое из следующих ограничений:
Стандартные линейные ограничения на состояния, выходы, управляемые переменные и управляемые переменные скорости изменения
Пользовательские ограничения равенства, заданные как линейные или нелинейные функции состояний, входов и выходов системы
Пользовательские ограничения неравенства, заданные как линейные или нелинейные функции состояний, входов и выходов системы
Контроллер оптимизирует свои движения управления для удовлетворения всех этих ограничений; то есть пользовательские зависимости дополняют стандартные линейные зависимости.
Для повышения вычислительной эффективности можно также задать аналитические якобинцы для пользовательских ограничений равенства и неравенства.
Задавая пользовательские ограничения равенства или неравенства, можно, например:
требовать, чтобы завод достиг целевого состояния в конце горизонта прогнозирования;
Требовать, чтобы совокупное потребление ресурсов оставалось в заданных пределах
Перед моделированием контроллера рекомендуется проверить пользовательские функции, включая функции ограничения и их якобинцы, с помощью validateFcns команда.
Линейные контроллеры MPC имеют свойства для определения пользовательских ограничений на линейные комбинации входов и выходов, как описано в разделе Ограничения на линейные комбинации входов и выходов. Эти свойства недоступны для нелинейных контроллеров MPC. Вместо этого такие ограничения реализуются в пользовательских функциях ограничения равенства или неравенства.
В следующей таблице приведены стандартные линейные ограничения, поддерживаемые нелинейными контроллерами MPC. Для каждого из этих ограничений можно указать одну границу, которая применяется по всему горизонту прогнозирования, или можно изменить каждое ограничение по горизонту прогнозирования. Дополнительные сведения о настройке свойств линейных ограничений контроллера см. в разделе nlmpc.
| Ограничение | Свойство контроллера | Смягчение зависимостей |
|---|---|---|
Нижние границы состояния i | States(i).Min > -Inf | Неприменимо. Границы состояний всегда трудны. |
Верхние границы состояния i | States(i).Max < Inf | Неприменимо. Границы состояний всегда трудны. |
Нижние границы выходной переменной i | OutputVariables(i).Min > -Inf |
По умолчанию:
|
Верхние границы выходной переменной i | OutputVariables(i).Max < Inf |
По умолчанию:
|
Нижние границы управляемой переменной i | ManipulatedVariables(i).Min > -Inf |
По умолчанию:
|
Верхние границы управляемой переменной i | ManipulatedVariables(i).Max < Inf |
По умолчанию:
|
Нижние границы управляемой переменной i скорость изменения | ManipulatedVariables(i).RateMin > -Inf |
По умолчанию:
|
Нижние границы управляемой переменной i скорость изменения | ManipulatedVariables(i).RateMax < Inf |
По умолчанию:
|
Можно задать пользовательские ограничения равенства и неравенства для нелинейного контроллера MPC. Чтобы настроить нелинейный контроллер MPC на использование пользовательских ограничений равенства или неравенства, установите его Optimization.CustomEqConFcn или Optimization.CustomIneqConFcn соответственно. Для этого задайте пользовательские функции в качестве одной из следующих.
Имя функции в текущей рабочей папке или в пути MATLAB ®, указанное как вектор строки или символа
Optimization.CustomEqConFcn = "myEqConFunction"; Optimization.CustomIneqConFcn = "myIneqConFunction";
Обращаться к функции в текущей рабочей папке или по пути MATLAB
Optimization.CustomEqConFcn = @myEqConFunction; Optimization.CustomIneqConFcn = @myIneqConFunction;
Анонимная функция
Optimization.CustomEqConFcn = ... @(X,U,data,params) myEqConFunction(X,U,data,params); Optimization.CustomIneqConFcn = ... @(X,U,e,data,params) myIneqConFunction(X,U,e,data,params);
Функции ограничения должны иметь одну из следующих сигнатур.
Если контроллер не использует дополнительные параметры:
function ceq = myEqConFunction(X,U,data) function cineq = myIneqConFunction(X,U,e,data)
Если контроллер использует параметры. Здесь, params представляет собой список параметров, разделенных запятыми:
function ceq = myEqConFunction(X,U,data,params) function cineq = myIneqConFunction(X,U,e,data,params)
В этой таблице описываются входы и выходы этих функций, где:
Nx - число состояний, равное Dimensions.NumberOfStates свойства контроллера.
Nu - количество входов, включая все манипулируемые переменные, измеренные возмущения и неизмеренные возмущения, и равно Dimensions.NumberOfInputs свойства контроллера.
Nceq - количество ограничений равенства.
Ncineq - это число ограничений неравенства.
p - горизонт прогнозирования.
k - текущее время.
| Аргумент | Ввод/вывод | Описание | ||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
X | Вход | Траектория состояния от времени k до времени k + p, заданная как массив (p + 1) -byNx. Первая строкаX содержит значения текущего состояния, что означает, что решатель не использует значения в X(1,:) в качестве переменных принятия решения во время оптимизации. | ||||||||||||||||||||||||||
U | Вход | Входная траектория от времени k до времени k + p, заданная как массив (p + 1) -by-Nu. Последняя строкаU всегда является дубликатом предыдущей строки; то есть U(end,:) = U(end-1,:). Поэтому значения в последней строке U не являются независимыми переменными принятия решений во время оптимизации. | ||||||||||||||||||||||||||
e | Вход | Переменная ослабления для смягчения ограничения, заданная как положительный скаляр. Поскольку все ограничения равенства являются трудными, этот входной аргумент применяется только к функции ограничения неравенства. | ||||||||||||||||||||||||||
data | Вход | Дополнительные сигналы, указанные как структура со следующими полями:
| ||||||||||||||||||||||||||
params | Вход | Дополнительные параметры, указанные как список, разделенный запятыми (например, Если в модели используются дополнительные параметры, необходимо указать количество параметров с помощью | ||||||||||||||||||||||||||
ceq | Продукция | Вычисленные значения ограничений равенства, возвращаемые в виде вектора столбца длиной Nceq. Ограничение равенства выполняется, когда соответствующий выход равен 0. | ||||||||||||||||||||||||||
cineq | Продукция | Вычисленные значения ограничений неравенства, возвращаемые в виде вектора столбца длины Ncineq. Ограничение неравенства выполняется, когда соответствующий выход меньше или равен 0. |
Чтобы использовать значения выходных переменных в функциях ограничения, необходимо сначала вывести их из состояния и входных аргументов с помощью функции вывода модели прогнозирования, как указано в Model.OutputFcn свойства контроллера. Например, для вычисления выходной траектории Y время от времени k до времени k + p, используйте:
p = data.PredictionHorizon; for i=1:p+1 Y(i,:) = myOutputFunction(X(i,:)',U(i,:)',params)'; end
Дополнительные сведения о функции вывода модели прогнозирования см. в разделе Указание модели прогнозирования для нелинейного MPC.
В целом:
Все ограничения равенства трудны.
Чтобы определить мягкие ограничения неравенства, используйте входной аргумент переменной слабости, e. Дополнительные сведения о смягчении ограничений в MPC см. в разделе Смягчение ограничений.
Ограничения равенства должны быть непрерывными и иметь непрерывные первые производные в отношении переменных принятия решений.
Можно определить пользовательские ограничения, которые применяются на всем горизонте прогнозирования. Например, предположим, что необходимо выполнить следующие ограничения неравенства на горизонте прогнозирования, где u1 - первая управляемая переменная:
Чтобы определить значения ограничений по всему горизонту прогнозирования, используйте:
p = data.PredictionHorizon;
U1 = U(1:p,data.MVIndex(1));
X1 = X(2:p+1,1);
X2 = X(2:p+1,2);
cineq = [2*X1.^2 - 3*X2 - 10;
U1.^2 - 5];Применение этих двух ограничений к шагам горизонта p прогнозирования создает вектор столбца с ограничениями неравенства 2 * p. Эти ограничения неравенства удовлетворяются, когда соответствующий элемент cineq меньше или равно нулю.
Кроме того, можно определить ограничения, которые применяются на определенных шагах горизонта прогнозирования. Например, предположим, что необходимо, чтобы состояние завода третьего порядка было следующим:
Чтобы задать эти значения состояния в качестве ограничений только на заключительном шаге горизонта прогнозирования, используйте:
ceq = [X(p+1,1) - 5;
X(p+1,2) + 3;
X(p+1,3)];Эти ограничения равенства удовлетворяются, когда соответствующий элемент ceq равно нулю.
Для относительно простых ограничений можно задать функцию ограничения с помощью анонимного дескриптора функции. Например, чтобы указать анонимную функцию, которая реализует ограничения равенства, используйте:
Optimization.CustomEqConFcn = @(X,U,data) [X(p+1,1) - 5; X(p+1,2) + 3; X(p+1,3)];
Для повышения эффективности вычислений рекомендуется указывать аналитические якобинцы для пользовательских функций ограничения. Если якобинцы не указаны, контроллер вычисляет якобинцы с помощью численного возмущения.
Чтобы задать якобиан для ваших функций ограничения равенства или неравенства, задайте соответствующие Jacobian.CustomEqConFcn или Jacobian.CustomIneqConFcn одного из следующих свойств контроллера.
Имя функции в текущей рабочей папке или в пути MATLAB, указанное как вектор строки или символа
Jacobian.CustomEqConFcn = "myEqConJacobian"; Jacobian.CustomIneqConFcn = "myIneqConJacobian";
Обращаться к функции в текущей рабочей папке или по пути MATLAB
Jacobian.CustomEqConFcn = @myEqConJacobian; Jacobian.CustomIneqConFcn = @myIneqConJacobian;
Анонимная функция
Jacobian.CustomEqConFcn = @(X,U,data,params) myEqConJacobian(X,U,data,params); Jacobian.CustomInqConFcn = @(X,U,e,data,params) myIneqConJacobian(X,U,e,data,params);
Функции Jacobian ограничения должны иметь одну из следующих сигнатур.
Если контроллер не использует дополнительные параметры:
function [Geq,Gmv] = myEqConJacobian(X,U,data) function [Geq,Gmv,Ge] = myIneqConJacobian(X,U,e,data)
Если контроллер использует параметры. Здесь, params представляет собой список параметров, разделенных запятыми:
function [Geq,Gmv] = myEqConJacobian(X,U,data,params) function [Geq,Gmv,Ge] = myIneqConJacobian(X,U,e,data,params)
Входные аргументы якобианских функций ограничения совпадают с входами их соответствующих пользовательских функций ограничения. В этой таблице описаны выходные данные функций Якобиана, где:
Nx - число состояний, равное Dimensions.NumberOfStates свойства контроллера.
Nmv - количество манипулируемых переменных.
Nc - количество ограничений (ограничений равенства или неравенства в зависимости от функции ограничения).
p - горизонт прогнозирования.
| Аргумент | Описание |
|---|---|
G | Якобиан ограничений равенства или неравенства относительно траекторий состояния, возвращенный в виде массива p-by Nx-by-Nc, где (i + 1, j). ВычислитьG на основе X из второй строки в строку p + 1, игнорируя первую строку. |
Gmv | Якобиан ограничений равенства или неравенства относительно манипулируемых переменных траекторий, возвращаемых в виде массива p-by Nmv-by-Nc, где i, MV (j)) и MV (j) является j-м индексом MV в Так как контроллер заставляет |
Ge | Якобян ограничений неравенства по отношению к переменной слабости, e, возвращается в виде вектора строки длиной Nc, где )/ ∂e |
Чтобы использовать выходную переменную Jacobians в функциях Jacobian ограничения, необходимо сначала вывести их из состояния и входных аргументов, используя Jacobian функции вывода модели прогнозирования, как указано в Jacobian.OutputFcn свойства контроллера. Например, для вычисления выходной переменной Jacobians Yjacob время от времени k до времени k + p, используйте:
p = data.PredictionHorizon; for i=1:p+1 Y(i,:) = myOutputFunction(X(i,:)',U(i,:)',params)'; end for i=1:p+1 Yjacob(i,:) = myOutputJacobian(X(i,:)',U(i,:)',params)'; end
Поскольку функции вывода модели прогнозирования не поддерживают прямой проход от входов к выходам, функция Jacobian вывода содержит частные производные относительно только состояний в X. Дополнительные сведения о функции вывода Jacobian см. в разделе Указание модели прогнозирования для нелинейного MPC.
Чтобы найти якобинцев, вычислите частные производные функций ограничения по отношению к траекториям состояний, управляемым траекториям переменных и переменной ослабления. Например, предположим, что функция ограничения выглядит следующим образом, где u1 - первая управляемая переменная.
Для вычисления якобиана относительно траекторий состояния используйте:
Nx = data.NumOfStates; Nc = 2*p; G = zeros(p,Nx,Nc); G(1:p,2,1:p) = diag(2*X1 - 3);
Для вычисления якобиана относительно изменяемых траекторий используйте:
Nmv = length(data.MVIndex); Gmv = zeros(p,Nmv,Nc); Gmv(1:p,1,p+1:2*p) = diag(2*u(1:p,data.MVIndex(1)));
В этом случае производной по отношению к переменной слабости является Ge = zeros(20,1).