Все прогнозирующие контроллеры в этом модуле используют средство оценки состояния для вычисления прогнозов. Средство оценки LinMPC по умолчанию — SteadyKalmanFilter, а для NonLinMPC с нелинейными моделями — an UnscentedKalmanFilter. Для более простых и классических вариантов также доступна структура InternalModel. По умолчанию она предполагает, что текущая оценка несоответствия модели является постоянной во времени (такой же подход, как при динамическом матричном управлении, DMC).
Согласно принятым правилам для временных рядов (и матриц) используются заглавные буквы, а для
прогнозов (и оценок состояния) — циркумфлексы.
Если быть точнее, в -й период управления векторы, охватывающие будущие измеренные возмущения , выходы модели и уставки по горизонту прогнозирования , определяются следующим образом.
Векторы для обрабатываемого входа смещаются на один временной шаг:
Определение приращения обрабатываемого входа в виде , the control horizon налагает условие при . По этой причине соответствующий вектор усекается до :
PredictiveController
#ModelPredictiveControl.PredictiveController — Type
Абстрактный супертип всех прогнозирующих контроллеров.
(mpc::PredictiveController)(ry, d=[]; kwargs...) -> u
Функтор, позволяющий использовать вызываемый объект PredictiveController как псевдоним для moveinput!.
Создает линейный прогнозирующий контроллер на основе объекта model типа LinModel.
Контроллер минимизирует следующую целевую функцию в каждый дискретный момент времени :
в который весовые матрицы по умолчанию повторяются или раз:
Также поддерживаются динамические веса по горизонтам. включает входные приращения от до , вектор , прогнозы на выходах от до , и вектор , обрабатываемые входы от до . Ослабляющая переменная ослабляет ограничения, как описано в документации по setconstraint!. Подробные правила см. в расширенной справке.
Этот метод использует средство оценки состояния по умолчанию SteadyKalmanFilter с аргументами по умолчанию.
Аргументы
model::LinModel: модель, используемая для прогнозов контроллера и оценок состояния.
Hp=10+nk: горизонт прогнозирования ; nk — это число задержек в model.
Hc=2: горизонт управления .
Mwt=fill(1.0,model.ny): главная диагональ весовой матрицы (вектора) .
Nwt=fill(0.1,model.nu): главная диагональ весовой матрицы (вектора) .
Lwt=fill(0.0,model.nu): главная диагональ весовой матрицы (вектора) .
Cwt=1e5: вес ослабляющей переменной (скалярная величина); Cwt=Inf используется только для жестких ограничений.
optim=JuMP.Model(OSQP.MathOptInterfaceOSQP.Optimizer): квадратичный оптимизатор, используемый в прогнозирующем контроллере; предоставляется как модель JuMP.Model (по умолчанию применяется оптимизатор OSQP).
Дополнительные именованные аргументы передаются в конструктор SteadyKalmanFilter.
Примеры
julia> model = LinModel([tf(3, [30, 1]); tf(-2, [5, 1])], 4);
julia> mpc = LinMPC(model, Mwt=[0, 1], Nwt=[0.5], Hp=30, Hc=1)
LinMPC controller with a sample time Ts = 4.0 s, OSQP optimizer, SteadyKalmanFilter estimator and:
30 prediction steps Hp
1 control steps Hc
1 manipulated inputs u (0 integrating states)
4 estimated states x̂
2 measured outputs ym (2 integrating states)
0 unmeasured outputs yu
0 measured disturbances d
Расширенная справка
Уставки обрабатываемых входов не так распространены, однако они могут быть полезны для очень активных систем, когда nu > ny (например, если приоритет должен отдаваться решениям с меньшими затратами). Значение Lwt по умолчанию подразумевает, что эта возможность отключена.
В целевой функции приняты следующие обозначения переменных:
ПЕРЕМЕННАЯ
ОПИСАНИЕ
РАЗМЕР
горизонт прогнозирования (целое число)
()
горизонт управления (целое число)
()
приращения обрабатываемых входов по
(nu*Hc,)
прогнозируемые выходы по
(ny*Hp,)
обрабатываемые входы по
(nu*Hp,)
уставки прогнозируемых выходов по
(ny*Hp,)
уставки прогнозируемых обрабатываемых входов по
(nu*Hp,)
веса отслеживания уставки выхода по
(ny*Hp, ny*Hp)
веса приращений обрабатываемых входов по
(nu*Hc, nu*Hc)
веса отслеживания уставок обрабатываемых входов по
Создает явный линейный прогнозирующий контроллер на основе объекта model типа LinModel.
Контроллер минимизирует следующую целевую функцию в каждый дискретный момент времени :
Определения переменных см. в описании LinMPC. Этот контроллер не поддерживает ограничения, но вычислительные затраты крайне низкие (деление массивов), поэтому он подходит для ситуаций, когда требуется очень малое время дискретизации. Именованные аргументы идентичны LinMPC за исключением того, что не поддерживаются аргументы Cwt и optim.
Этот метод использует средство оценки состояния по умолчанию SteadyKalmanFilter с аргументами по умолчанию.
Примеры
julia> model = LinModel([tf(3, [30, 1]); tf(-2, [5, 1])], 4);
julia> mpc = ExplicitMPC(model, Mwt=[0, 1], Nwt=[0.5], Hp=30, Hc=1)
ExplicitMPC controller with a sample time Ts = 4.0 s, SteadyKalmanFilter estimator and:
30 prediction steps Hp
1 control steps Hc
1 manipulated inputs u (0 integrating states)
4 estimated states x̂
2 measured outputs ym (2 integrating states)
0 unmeasured outputs yu
0 measured disturbances d
Создает нелинейный прогнозирующий контроллер на основе объекта model типа SimModel.
Поддерживаются как NonLinModel, так и LinModel (см. расширенную справку). Контроллер минимизирует следующую целевую функцию в каждый дискретный момент времени :
Определения переменных см. в описании LinMPC. Пользовательская экономичная функция может накладывать штраф на решения с высокими затратами. Если присвоить всем весам, кроме , значение 0, создается чистый экономичный прогнозирующий контроллер модели (EMPC). Аргументами являются обрабатываемые входы, прогнозируемые выходы и измеряемые возмущения от до включительно:
так как при предполагается, что или . Вектор включает в себя прогнозируемое измеряемое возмущение по .
Если какие-либо из трех аргументов не нужны, их можно заменить _ (см. значение JE по умолчанию ниже).
Этот метод использует средство оценки состояния по умолчанию:
Cwt=1e5: вес ослабляющей переменной (скалярная величина); Cwt=Inf используется только для жестких ограничений.
Ewt=0.0: вес затрат (скалярная величина).
JE=(_,_,_)->0.0: экономичная функция .
optim=JuMP.Model(Ipopt.Optimizer): нелинейный оптимизатор, используемый в прогнозирующем контроллере; предоставляется как модель JuMP.Model (по умолчанию применяется оптимизатор Ipopt).
julia> model = NonLinModel((x,u,_)->0.5x+u, (x,_)->2x, 10.0, 1, 1, 1);
julia> mpc = NonLinMPC(model, Hp=20, Hc=1, Cwt=1e6)
NonLinMPC controller with a sample time Ts = 10.0 s, Ipopt optimizer, UnscentedKalmanFilter estimator and:
20 prediction steps Hp
1 control steps Hc
1 manipulated inputs u (0 integrating states)
2 estimated states x̂
1 measured outputs ym (1 integrating states)
0 unmeasured outputs yu
0 measured disturbances d
Расширенная справка
Контроллеры NonLinMPC на основе LinModel вычисляют прогнозы посредством матричной алгебры вместо цикла for. Эта возможность может ускорить оптимизацию, особенно при обработке ограничений, и, насколько известно автору, недоступна в других пакетах.
Для оптимизации применяются возможности автоматического дифференцирования JuMP. С их помощью вычисляются производные цели и ограничений. Оптимизаторы обычно лучше работают с точными производными, которые получаются при автоматическом дифференцировании. Однако функции NonLinModelf и h должны быть совместимы с этой возможностью. В разделе Автоматическое дифференцирование описываются распространенные ошибки, которые допускают при написании этих функций.
Обратите внимание, что если Cwt≠Inf, атрибут nlp_scaling_max_gradient оптимизатора Ipopt устанавливается в значение 10/Cwt (если это значение еще не задано) с целью масштабирования небольших значений .
moveinput!(mpc::PredictiveController, ry=mpc.estim.model.yop, d=[]; <keyword args>) -> u
Вычисляет оптимальное значение обрабатываемого входа u для текущего периода управления.
Решает задачу оптимизации mpcPredictiveController и возвращает результаты . Согласно принципу удаляющегося горизонта алгоритм отбрасывает оптимальные будущие обрабатываемые входы Обратите внимание, что этот метод изменяет внутренние данные mpc, но не изменяет состояния mpc.estim. Вызовите updatestate!(mpc, u, ym, d), чтобы обновить оценки состояний mpc.