Задайте ограничения для нелинейного 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).

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

Похожие темы

Для просмотра документации необходимо авторизоваться на сайте