Функции: внутренние компоненты PredictiveController
Применяемая в этом модуле методика прогнозирования основана в первую очередь на учебнике Мацеёвского (Maciejowski) [1].
ISBN 978-0201398236.
Создание контроллера
#
ModelPredictiveControl.init_ΔUtoU — Function
init_ΔUtoU(model, Hp, Hc) -> S, T
Инициирует приращения обрабатываемых входов матрицами преобразования входов.
Преобразование входных приращений в обрабатываемые входы по вычисляется следующим образом:
#
ModelPredictiveControl.init_predmat — Function
init_predmat(estim, ::LinModel, Hp, Hc) -> E, G, J, K, V, ex̂, fx̂, gx̂, jx̂, kx̂, vx̂
Создает прогнозные матрицы для объекта model типа LinModel.
Прогнозы линейной модели вычисляются следующим образом:
где прогнозируемые выходы и измеряемые возмущения берутся за to . Input increments are from to . The vector is the state estimated at the last период управления. Этот метод также вычисляет аналогичные матрицы, но для прогнозируемых конечных состояний в :
Рабочие точки в , и в приведенных выше уравнениях опускаются.
Расширенная справка
С использованием расширенных матриц <!---$\mathbf{Â, B̂_u, Ĉ, B̂_d, D̂_d}$-→ в estim и функции прогнозные матрицы вычисляются по формуле:
Для терминальных ограничений матрицы вычисляются с помощью функции
Возвращает пустые матрицы, если model не относится к типу LinModel.
#
ModelPredictiveControl.relaxU — Function
relaxU(model, C, C_umin, C_umax, S) -> A_Umin, A_Umax, S̃
Расширяет ограничения обрабатываемых входов с помощью ослабляющей переменной ϵ для смягчения.
Если обозначить входные приращения, расширяемые с помощью ослабляющей переменной, init_ΔUtoU. Также возвращает матрицы
#
ModelPredictiveControl.relaxΔU — Function
relaxΔU(
model, C, C_Δumin, C_Δumax, ΔUmin, ΔUmax, N_Hc
) -> A_ΔŨmin, A_ΔŨmax, ΔŨmin, ΔŨmax, Ñ_Hc
Расширяет ограничения приращений входов с помощью ослабляющей переменной ϵ для смягчения.
Если обозначить входные приращения, расширяемые с помощью ослабляющей переменной,
#
ModelPredictiveControl.relaxŶ — Function
relaxŶ(::LinModel, C, C_ymin, C_ymax, E) -> A_Ymin, A_Ymax, Ẽ
Расширяет ограничения прогноза для линейного выхода с помощью ослабляющей переменной ϵ для смягчения.
Если обозначить входные приращения, расширяемые с помощью ослабляющей переменной,
Возвращает пустые матрицы, если модель не относится к типу LinModel.
#
ModelPredictiveControl.relaxterminal — Function
relaxterminal(::LinModel, C, c_x̂min, c_x̂max, ex̂) -> A_x̂min, A_x̂max, ẽx̂
Расширяет ограничения конечного состояния с помощью ослабляющей переменной ϵ для смягчения.
Если обозначить входные приращения, расширяемые с помощью ослабляющей переменной,
Возвращает пустые матрицы, если модель не относится к типу LinModel.
#
ModelPredictiveControl.init_quadprog — Function
init_quadprog(model::LinModel, Ẽ, S, M_Hp, N_Hc, L_Hp) -> H̃, q̃, p
Инициализирует матрицу квадратичной программной оптимизации H̃, q̃ и скалярную величину p для MPC.
Матрицы имеют общую квадратичную форму:
Если модель и веса линейные и инвариантные по времени (LTI), матрица Гессиана является постоянной:
Вектор initpred! вычисляет реальные значения). Величина
Возвращает пустые матрицы, если model не относится к типу LinModel.
#
ModelPredictiveControl.init_stochpred — Function
init_stochpred(estim::InternalModel, Hp) -> Ks, Ps
Инициализирует стохастические прогнозные матрицы для InternalModel.
Матрицы Ks и Ps определяются следующим образом:
Текущие стохастические выходы
Возвращает пустые матрицы, если estim не относится к типу InternalModel.
#
ModelPredictiveControl.init_matconstraint_mpc — Function
init_matconstraint_mpc(model::LinModel,
i_Umin, i_Umax, i_ΔŨmin, i_ΔŨmax, i_Ymin, i_Ymax, i_x̂min, i_x̂max, args...
) -> i_b, i_g, A
Инициирует матрицы i_b, i_g и A для линейных и нелинейных ограничений неравенства.
Линейные и нелинейные ограничения неравенства определяются соответственно следующим образом:
i_b — это вектор BitVector, включающий индексы i_g — это похожий вектор, но для индексов model относится к типу LinModel). Этот метод также возвращает args). В этом случае аргументы args должны содержать все матрицы ограничений неравенства: A_Umin, A_Umax, A_ΔŨmin, A_ΔŨmax, A_Ymin, A_Ymax, A_x̂min, A_x̂max.
Инициирует i_b, A без выходов и терминальных ограничений, если model не относится к типу LinModel.
Обновление квадратичной оптимизации
#
ModelPredictiveControl.initpred! — Method
initpred!(mpc, model::LinModel, d, ym, D̂, R̂y, R̂u) -> nothing
Инициирует прогнозные матрицы линейной модели F, q̃, p и текущий оценочный выход ŷ.
Определение матриц см. в описании init_predmat и init_quadprog. Они вычисляются следующим образом:
#
ModelPredictiveControl.linconstraint! — Method
linconstraint!(mpc::PredictiveController, model::LinModel)
Задает вектор b для ограничений неравенства линейной модели (
Кроме того, инициирует вектор init_predmat.
Решение задачи оптимизации
#
ModelPredictiveControl.optim_objective! — Function
optim_objective!(mpc::PredictiveController) -> ΔŨ
Оптимизирует целевую функцию mpc PredictiveController и возвращает решение ΔŨ.
Если такая возможность поддерживается mpc.optim, выполняет мягкий запуск решателя при следующих условиях:
где JuMP.optimize!(mpc.optim) и извлекает решение. В случае неудачной оптимизации в конце REPL выводится сообщение журнала @error и возвращается значение мягкого запуска.
optim_objective!(mpc::ExplicitMPC) -> ΔŨ
Решает задачу оптимизации для ExplicitMPC аналитически.
Решение имеет вид init_quadprog.