Когда вы создаете нелинейный контроллер MPC с помощью nlmpc
можно задать любое из следующих ограничений:
Стандартные линейные ограничения на состояния, выходы, управляемые переменные и управляемые переменные скорости изменения
Пользовательские ограничения равенства, заданные как линейные или нелинейные функции состояний системы, входов и выходов
Пользовательские ограничения неравенства, заданные как линейные или нелинейные функции состояний системы, входов и выходов
Контроллер оптимизирует свои движения управления, чтобы удовлетворить всем этим ограничениям; то есть пользовательские ограничения дополняют стандартные линейные ограничения.
Чтобы улучшить вычислительную эффективность, можно также задать аналитических якобианов для пользовательских ограничений равенств и неравенств.
Путем определения пользовательских ограничений равенства или неравенства, можно, например:
Требуйте, чтобы объект достиг целевого состояния в конце горизонта предсказания
Требуйте совокупного потребления ресурсов, чтобы оставаться в заданных пределах
Прежде чем симулировать ваш контроллер, лучшая практика проверить ваши пользовательские функции, включая ограничительные функции и их якобианцы, используя validateFcns
команда.
Линейные контроллеры MPC имеют свойства для определения пользовательских ограничений на линейные комбинации входов и выходов, как обсуждается в Ограничениях на линейные комбинации входов и выходов. Эти свойства недоступны для нелинейных контроллеров MPC. Вместо этого вы реализуете такие ограничения в пользовательских функциях равенства или неравенства.
В следующей таблице показаны стандартные линейные ограничения, поддерживаемые нелинейными контроллерами MPC. Для каждого из этих ограничений можно задать одну границу, которая применяется ко всему горизонту предсказания, или можно изменить каждое ограничение по горизонту предсказания. Для получения дополнительной информации об установке свойств линейного ограничения контроллера см. nlmpc
.
Ограничение | Свойство контроллера | Смягчение ограничений |
---|---|---|
Нижние ограничения по i состояний
| States(i).Min > -Inf | Не применяется. Границы состояний всегда жесткие. |
Верхние границы состояния i | States(i).Max < Inf | Не применяется. Границы состояний всегда жесткие. |
Нижние границы выходной переменной i | OutputVariables(i).Min > -Inf |
По умолчанию:
1 |
Верхние границы выходной переменной i | OutputVariables(i).Max < Inf |
По умолчанию:
1 |
Нижние границы управляемых переменных i | ManipulatedVariables(i).Min > -Inf |
По умолчанию:
0 |
Верхние границы управляемой переменной i | ManipulatedVariables(i).Max < Inf |
По умолчанию:
0 |
Нижние границы управляемых переменных i скорость изменения | ManipulatedVariables(i).RateMin > -Inf |
По умолчанию:
0 |
Нижние границы управляемых переменных i скорость изменения | ManipulatedVariables(i).RateMax < Inf |
По умолчанию:
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 | Вход | Дополнительные сигналы, заданные как структура со следующими полями:
| ||||||||||||||||||||||||||
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.
В целом:
Все ограничения равенства жесткие.
Чтобы задать ограничения мягкого неравенства, используйте входной параметр переменной slack, e
. Для получения дополнительной информации о смягчении ограничений в MPC, см. «Смягчение ограничений».
Ограничения равенства должны быть непрерывными и иметь непрерывные первые производные относительно переменных решения.
Можно задать пользовательские ограничения, которые применяются ко всему горизонту предсказания. Для примера предположим, что вы хотите удовлетворить следующим ограничениям неравенства на горизонте предсказания, где u 1 является первой манипулированной переменной:
Чтобы определить значения ограничений на горизонте предсказания, используйте:
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);
Ваши ограниченные якобианские функции должны иметь одну из следующих сигнатур.
Если ваш контроллер не использует дополнительные параметры:
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 на основе X от второй строки до строки p + 1, игнорируя первую строку. |
Gmv | Якобиан ограничений равенства или неравенства относительно манипулируемых переменных траекторий, возвращенный как p -by- Nmv -by- Nc массив, где и MV (j) является j-м индексом MV Поскольку контроллер усиливает |
Ge | Якобиан ограничений неравенства относительно переменной ослабления, e , возвращенный как вектор-строка длины Nc, где |
Чтобы использовать выходную переменную Якобианов в ваших ограничительных якобианских функциях, необходимо сначала вывести их из состояния и входных параметров с помощью Якобиана выходной функции модели предсказания, как задано в 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 является первой манипулированной переменной.
Чтобы вычислить якобиан относительно траекторий состояний, используйте:
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)
.