Документация Engee

Функции: внутренние компоненты PredictiveController

Применяемая в этом модуле методика прогнозирования основана в первую очередь на учебнике Мацеёвского (Maciejowski) [1].

ISBN 978-0201398236.

Создание контроллера

# ModelPredictiveControl.init_ΔUtoUFunction

init_ΔUtoU(model, Hp, Hc) -> S, T

Инициирует приращения обрабатываемых входов матрицами преобразования входов.

Преобразование входных приращений в обрабатываемые входы по вычисляется следующим образом:

# ModelPredictiveControl.init_predmatFunction

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.relaxUFunction

relaxU(model, C, C_umin, C_umax, S) -> A_Umin, A_Umax, S̃

Расширяет ограничения обрабатываемых входов с помощью ослабляющей переменной ϵ для смягчения.

Если обозначить входные приращения, расширяемые с помощью ослабляющей переменной, ], it returns the возвращает расширенную матрицу преобразования , аналогичную описываемой в init_ΔUtoU. Также возвращает матрицы для ограничений неравенства:

# ModelPredictiveControl.relaxΔUFunction

relaxΔU(
    model, C, C_Δumin, C_Δumax, ΔUmin, ΔUmax, N_Hc
) -> A_ΔŨmin, A_ΔŨmax, ΔŨmin, ΔŨmax, Ñ_Hc

Расширяет ограничения приращений входов с помощью ослабляющей переменной ϵ для смягчения.

Если обозначить входные приращения, расширяемые с помощью ослабляющей переменной, ], it returns the возвращает расширенные веса приращений входов (включающие ). Также возвращает расширенные ограничения и и матрицы для ограничений неравенства:

# ModelPredictiveControl.relaxŶFunction

relaxŶ(::LinModel, C, C_ymin, C_ymax, E) -> A_Ymin, A_Ymax, Ẽ

Расширяет ограничения прогноза для линейного выхода с помощью ослабляющей переменной ϵ для смягчения.

Если обозначить входные приращения, расширяемые с помощью ослабляющей переменной, ], возвращается матрица , присутствующая в уравнении прогнозирования линейной модели, и матрицы , и матриц для ограничений неравенства:

Возвращает пустые матрицы, если модель не относится к типу LinModel.

# ModelPredictiveControl.relaxterminalFunction

relaxterminal(::LinModel, C, c_x̂min, c_x̂max, ex̂) -> A_x̂min, A_x̂max, ẽx̂

Расширяет ограничения конечного состояния с помощью ослабляющей переменной ϵ для смягчения.

Если обозначить входные приращения, расширяемые с помощью ослабляющей переменной, ], возвращается матрица , присутствующая в уравнении конечного состояния , и матрицы для ограничений неравенства:

Возвращает пустые матрицы, если модель не относится к типу LinModel.

# ModelPredictiveControl.init_quadprogFunction

init_quadprog(model::LinModel, Ẽ, S, M_Hp, N_Hc, L_Hp) -> H̃, q̃, p

Инициализирует матрицу квадратичной программной оптимизации , и скалярную величину p для MPC.

Матрицы имеют общую квадратичную форму:

Если модель и веса линейные и инвариантные по времени (LTI), матрица Гессиана является постоянной:

Вектор и скалярная величина должны вычисляться повторно за каждый период управления (при инициализации нулевыми значениями метод initpred! вычисляет реальные значения). Величина не влияет на положение минимумов. Поэтому она бесполезна для оптимизации, но требуется для вычисления минимального значения.

Возвращает пустые матрицы, если model не относится к типу LinModel.

# ModelPredictiveControl.init_stochpredFunction

init_stochpred(estim::InternalModel, Hp) -> Ks, Ps

Инициализирует стохастические прогнозные матрицы для InternalModel.

Матрицы Ks и Ps определяются следующим образом:

Текущие стохастические выходы состоят из измеряемых выходов и неизмеряемых выходов . См. работу [^2].

Возвращает пустые матрицы, если estim не относится к типу InternalModel.

# ModelPredictiveControl.init_matconstraint_mpcFunction

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.


1. Maciejowski, J. 2000, Predictive control: with constraints, 1st ed., Prentice Hall,