exponenta event banner

Задание ограничений для нелинейного MPC

При создании нелинейного MPC-контроллера с помощью nlmpc можно определить любое из следующих ограничений:

  • Стандартные линейные ограничения на состояния, выходы, управляемые переменные и управляемые переменные скорости изменения

  • Пользовательские ограничения равенства, заданные как линейные или нелинейные функции состояний, входов и выходов системы

  • Пользовательские ограничения неравенства, заданные как линейные или нелинейные функции состояний, входов и выходов системы

Контроллер оптимизирует свои движения управления для удовлетворения всех этих ограничений; то есть пользовательские зависимости дополняют стандартные линейные зависимости.

Для повышения вычислительной эффективности можно также задать аналитические якобинцы для пользовательских ограничений равенства и неравенства.

Задавая пользовательские ограничения равенства или неравенства, можно, например:

  • требовать, чтобы завод достиг целевого состояния в конце горизонта прогнозирования;

  • Требовать, чтобы совокупное потребление ресурсов оставалось в заданных пределах

Перед моделированием контроллера рекомендуется проверить пользовательские функции, включая функции ограничения и их якобинцы, с помощью validateFcns команда.

Линейные контроллеры MPC имеют свойства для определения пользовательских ограничений на линейные комбинации входов и выходов, как описано в разделе Ограничения на линейные комбинации входов и выходов. Эти свойства недоступны для нелинейных контроллеров MPC. Вместо этого такие ограничения реализуются в пользовательских функциях ограничения равенства или неравенства.

Стандартные линейные зависимости

В следующей таблице приведены стандартные линейные ограничения, поддерживаемые нелинейными контроллерами MPC. Для каждого из этих ограничений можно указать одну границу, которая применяется по всему горизонту прогнозирования, или можно изменить каждое ограничение по горизонту прогнозирования. Дополнительные сведения о настройке свойств линейных ограничений контроллера см. в разделе nlmpc.

ОграничениеСвойство контроллераСмягчение зависимостей
Нижние границы состояния iStates(i).Min > -InfНеприменимо. Границы состояний всегда трудны.
Верхние границы состояния iStates(i).Max < InfНеприменимо. Границы состояний всегда трудны.
Нижние границы выходной переменной iOutputVariables(i).Min > -Inf

OutputVariables(i).MinECR > 0

По умолчанию: 1 (мягкий)

Верхние границы выходной переменной iOutputVariables(i).Max < Inf

OutputVariables(i).MaxECR > 0

По умолчанию: 1 (мягкий)

Нижние границы управляемой переменной iManipulatedVariables(i).Min > -Inf

ManipulatedVariables(i).MinECR > 0

По умолчанию: 0 (жесткий)

Верхние границы управляемой переменной iManipulatedVariables(i).Max < Inf

ManipulatedVariables(i).MaxECR > 0

По умолчанию: 0 (жесткий)

Нижние границы управляемой переменной i скорость измененияManipulatedVariables(i).RateMin > -Inf

ManipulatedVariables(i).RateMinECR > 0

По умолчанию: 0 (жесткий)

Нижние границы управляемой переменной i скорость измененияManipulatedVariables(i).RateMax < Inf

ManipulatedVariables(i).RateMaxECR > 0

По умолчанию: 0 (жесткий)

Пользовательские ограничения

Можно задать пользовательские ограничения равенства и неравенства для нелинейного контроллера 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Вход

Дополнительные сигналы, указанные как структура со следующими полями:

ОбластьОписание
TsВремя выборки модели прогнозирования, как определено в Ts свойство контроллера
CurrentStatesТекущие состояния модели прогнозирования, как указано в x входной аргумент nlmpcmove
LastMVПеремещения СН, используемые в предыдущем управлении, как указано в lastmv входной аргумент nlmpcmove интервал
ReferencesСсылочные значения для выходов установки, как указано в ref входной аргумент nlmpcmove
MVTargetУправляемые переменные цели, как указано в MVTarget свойство nlmpcmoveopt объект
PredictionHorizonГоризонт прогнозирования, как определено в PredictionHorizon свойство контроллера
NumOfStatesКоличество состояний, как определено в Dimensions.NumberOfStates свойство контроллера
NumOfOutputsКоличество выходов, как определено в Dimensions.NumberOfOutputs свойство контроллера
NumOfInputsКоличество входов, как определено в Dimensions.NumberOfInputs свойство контроллера
MVIndexИндексы манипулируемых переменных, как определено в Dimensions.MVIndex свойство контроллера
MDIndexИзмеренные показатели возмущений, определенные в Dimensions.MDIndex свойство контроллера
UDIndexНеизмеренные индексы возмущений, как определено в Dimensions.UDIndex свойство контроллера
paramsВход

Дополнительные параметры, указанные как список, разделенный запятыми (например, p1,p2,p3). Те же параметры передаются в модель прогнозирования, пользовательскую функцию затрат и пользовательские функции ограничений контроллера. Например, если функция состояния использует только параметр p1, функции ограничения используют только параметр p2, и функция затрат использует только параметр p3, то все три параметра передаются всем этим функциям.

Если в модели используются дополнительные параметры, необходимо указать количество параметров с помощью Model.NumberOfParameters.

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 - первая управляемая переменная:

2x12−3x2−10≤0u12−5≤0

Чтобы определить значения ограничений по всему горизонту прогнозирования, используйте:

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 меньше или равно нулю.

Кроме того, можно определить ограничения, которые применяются на определенных шагах горизонта прогнозирования. Например, предположим, что необходимо, чтобы состояние завода третьего порядка было следующим:

x1=5x2 =−3x3=0

Чтобы задать эти значения состояния в качестве ограничений только на заключительном шаге горизонта прогнозирования, используйте:

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, где G (i, j, l) =∂c (l )/ ∂X (i + 1, j). ВычислитьG на основе X из второй строки в строку p + 1, игнорируя первую строку.
Gmv

Якобиан ограничений равенства или неравенства относительно манипулируемых переменных траекторий, возвращаемых в виде массива p-by Nmv-by-Nc, где Gmv (i, j, l) =∂c (l )/ ∂U (i, MV (j)) и MV (j) является j-м индексом MV вdata.MVIndex.

Так как контроллер заставляет U(p+1,:) равняться U(p,:), если используются ограничения U(p+1,:), необходимо включить влияние обоих U(p,:) и U(p+1,:) в якобиане для U(p,:).

GeЯкобян ограничений неравенства по отношению к переменной слабости, e, возвращается в виде вектора строки длиной Nc, где Ge (l) =∂c (l )/ ∂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 - первая управляемая переменная.

2x12−3x2−10≤0u12−5≤0

Для вычисления якобиана относительно траекторий состояния используйте:

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).

См. также

Связанные темы