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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

OutputVariables(i).MinECR > 0

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

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

OutputVariables(i).MaxECR > 0

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

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

ManipulatedVariables(i).MinECR > 0

Значение по умолчанию: 0 (трудно)

Верхние границы на переменной i, которой управляют,ManipulatedVariables(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Шаг расчета модели Prediction, как задано в свойстве 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, смотрите, что Ограничение Смягчается.

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

Можно задать пользовательские ограничения, которые применяются через целый горизонт прогноза. Например, предположите, что вы хотите удовлетворить следующие ограничения неравенства через горизонт прогноза, где 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 th индекс мВ в 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. Для получения дополнительной информации о якобиане выходной функции смотрите, Задают Модель Прогноза для Нелинейного 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)));

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

Смотрите также

Похожие темы