Функции: внутренние компоненты 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
.