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

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

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

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

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

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

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

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

  • Требуйте, чтобы объект достиг целевого состояния в конце горизонта предсказания

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

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

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

Стандартные линейные ограничения

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

ОграничениеСвойство контроллераСмягчение ограничений
Нижние ограничения по i состоянийStates(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) -by - Nx массив. Первая строка 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.

В целом:

  • Все ограничения равенства жесткие.

  • Чтобы задать ограничения мягкого неравенства, используйте входной параметр переменной slack, e. Для получения дополнительной информации о смягчении ограничений в MPC, см. «Смягчение ограничений».

  • Ограничения равенства должны быть непрерывными и иметь непрерывные первые производные относительно переменных решения.

Можно задать пользовательские ограничения, которые применяются ко всему горизонту предсказания. Для примера предположим, что вы хотите удовлетворить следующим ограничениям неравенства на горизонте предсказания, где u 1 является первой манипулированной переменной:

2x123x2100u1250

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

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

Ваши ограниченные якобианские функции должны иметь одну из следующих сигнатур.

  • Если ваш контроллер не использует дополнительные параметры:

    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

Чтобы использовать выходную переменную Якобианов в ваших ограничительных якобианских функциях, необходимо сначала вывести их из состояния и входных параметров с помощью Якобиана выходной функции модели предсказания, как задано в Jacobian.OutputFcn свойство контроллера. Для примера вычислить выход переменную якобианов 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

Поскольку выходные функции модели предсказания не поддерживают прямое сквозное соединение от входов до выходов, выходная функция Якобиан содержит частные производные относительно только состояний в X. Для получения дополнительной информации о выходной функции Jacobian, см., Задайте модель предсказания для нелинейного MPC.

Чтобы найти якобийцев, вычислите частные производные ограничительных функций относительно траекторий состояний, манипулируемых переменных траекторий и переменной ослабления. Для примера предположим, что ваша функция ограничения является следующей, где u 1 является первой манипулированной переменной.

2x123x2100u1250

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

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

В этом случае производная относительно переменной slack Ge = zeros(20,1).

См. также

Похожие темы