Когда вы создаете нелинейный контроллер MPC, использующий объект nlmpc
, можно задать любое из следующих ограничений:
Стандартные линейные ограничения на состояния, выходные параметры, управляли переменными и управляли плавающими курсами изменения
Пользовательские ограничения равенства, заданные как линейные или нелинейные функции системы, утверждают, вводят, и выходные параметры
Пользовательские ограничения неравенства, заданные как линейные или нелинейные функции системы, утверждают, вводят, и выходные параметры
Диспетчер оптимизирует его перемещения управления, чтобы удовлетворить все эти ограничения; то есть, пользовательские ограничения добавляют стандартные линейные ограничения.
Чтобы повысить вычислительную эффективность, можно также задать аналитические Якобианы для пользовательского равенства и ограничений неравенства.
Путем определения пользовательского равенства или ограничений неравенства, вы можете, например:
Потребуйте, чтобы объект достиг целевого состояния в конце горизонта прогноза
Потребуйте, чтобы совокупное потребление ресурсов осталось в заданных пределах
Прежде, чем моделировать ваш контроллер, это - лучшая практика подтвердить ваши пользовательские функции, включая ограничительные функции и их Якобианы, с помощью команды validateFcns
.
У линейных контроллеров MPC есть свойства для определения пользовательских ограничений на линейные комбинации вводов и выводов, как обсуждено в Ограничениях на Линейные комбинации Вводов и выводов. Эти свойства не доступны нелинейным контроллерам MPC. Вместо этого вы реализуете такие ограничения в своем пользовательском равенстве или функциях ограничения неравенства.
Следующая таблица показывает стандартные линейные ограничения, поддержанные нелинейными контроллерами MPC. Для каждого из этих ограничений можно указать, что сингл связал, который применяется через целый горизонт прогноза, или можно отличаться каждое ограничение по горизонту прогноза. Для получения дополнительной информации об установке контроллера линейные ограничительные свойства смотрите nlmpc
.
Ограничение | Свойство контроллера | Ограничительное смягчение |
---|---|---|
Нижние границы на i состояния | States(i).Min > -Inf | Не применяется. Границы состояния всегда тверды. |
Верхние границы на i состояния | States(i).Max < Inf | Не применяется. Границы состояния всегда тверды. |
Нижние границы на выходной переменной i | OutputVariables(i).Min > -Inf |
Значение по умолчанию:
(мягкий) |
Верхние границы на выходной переменной i | OutputVariables(i).Max < Inf |
Значение по умолчанию:
(мягкий) |
Нижние границы на переменной i , которой управляют, | ManipulatedVariables(i).Min > -Inf |
Значение по умолчанию:
|
Верхние границы на переменной i , которой управляют, | ManipulatedVariables(i).Max < Inf |
Значение по умолчанию:
|
Нижние границы на скорости изменения переменной i , которой управляют, | ManipulatedVariables(i).RateMin > -Inf |
Значение по умолчанию:
|
Нижние границы на скорости изменения переменной i , которой управляют, | ManipulatedVariables(i).RateMax < Inf |
Значение по умолчанию:
|
Можно задать пользовательское равенство и ограничения неравенства для нелинейного контроллера 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.
В целом:
Все ограничения равенства трудны.
Чтобы задать мягкие ограничения неравенства, используйте слабый аргумент ввода переменной, 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 th индекс мВ в Поскольку контроллер обеспечивает |
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
. Для получения дополнительной информации о якобиане выходной функции смотрите, Задают Модель Прогноза для Нелинейного 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)));
В этом случае производной относительно слабой переменной является Ge = zeros(20,1)
.