Функции: внутренние компоненты StateEstimator
Расширенная модель
#
ModelPredictiveControl.f̂
— Function
f̂(estim::StateEstimator, model::SimModel, x̂, u, d)
Функция состояния расширенной модели.
В результате введения расширенного вектора состояний , как в augment_model
, функция возвращает следующее состояние расширенной модели, которое определяется следующим образом.
Используйте матрицы расширенной модели, если model
— это объект LinModel
.
f̂(::InternalModel, model::NonLinModel, x̂, u, d)
Функция состояния модели InternalModel
для NonLinModel
.
Вызывает model.f(x̂, u ,d)
, так как средство оценки не расширяет состояния.
#
ModelPredictiveControl.ĥ
— Function
ĥ(estim::StateEstimator, model::SimModel, x̂, d)
Выходная функция расширенной модели. Подробные сведения см. в описании f̂
.
Используйте матрицы расширенной модели, если model
— это объект LinModel
.
ĥ(::InternalModel, model::NonLinModel, x̂, d)
Выходная функция модели InternalModel
; вызывает model.h
.
Создание средства оценки
#
ModelPredictiveControl.init_estimstoch
— Function
init_estimstoch(model, i_ym, nint_u, nint_ym) -> As, Cs_u, Cs_y, nxs, nint_u, nint_ym
Начальные матрицы стохастической модели из спецификаций интегратора для оценки состояния.
Аргументы nint_u
и nint_ym
определяют то, сколько интеграторов добавляется в каждый обрабатываемый вход и измеряемый выход. Функция возвращает матрицы пространства состояний As
, Cs_u
и Cs_y
стохастической модели:
где — неизвестный белый шум с нулевым средним значением, а . Для оценки матрица не используется, поэтому она игнорируется. Функция init_integrators
создает матрицы пространства состояний.
#
ModelPredictiveControl.init_integrators
— Function
init_integrators(nint, ny, varname::String) -> A, C, nint
Вычисляет матрицы пространства состояний A, C
из спецификаций интегратора nint
.
Эта функция используется для инициализации стохастической части расширенной модели с целью разработки средств оценки состояний. Вектор nint
указывает, сколько интеграторов (последовательных) следует включить для каждого выхода. Аргумент должен иметь элемент ny
, кроме случая nint=0
, который не является псевдонимом ни для одного интегратора. Частному случаю одного интегратора на выход соответствуют A = I
и C = I
. При оценке матрица B
не используется, поэтому она игнорируется. Эта функция вызывается дважды:
-
для неизмеряемых возмущений на обрабатываемых входах ;
-
для неизмеряемых возмущений на измеряемых выходах .
#
ModelPredictiveControl.augment_model
— Function
augment_model(model::LinModel, As, Cs; verify_obsv=true) -> Â, B̂u, Ĉ, B̂d, D̂d
Расширяет матрицы пространства состояний LinModel
с помощью стохастических матриц As
и Cs
.
Если — это состояния model.x
, а — состояния, определенные в init_estimstoch
, определяется расширенный вектор состояний ]. Метод возвращает расширенные матрицы Â
, B̂u
, Ĉ
, B̂d
и D̂d
:
Если расширенная модель является ненаблюдаемой, а verify_obsv == true
, выдается ошибка.
Возвращает пустые матрицы, если model
не относится к типу LinModel
.
#
ModelPredictiveControl.init_ukf
— Function
init_ukf(model, nx̂, α, β, κ) -> nσ, γ, m̂, Ŝ
Вычисляет константы UnscentedKalmanFilter
исходя из и .
При элементах в векторе состояний и сигма-точках коэффициент масштабирования, применяемый к матрицам среднеквадратичных отклонений , имеет вид:
Весовой вектор для среднего значения и весовая матрица для ковариации имеют соответственно следующий вид:
Дополнительные сведения см. в описании update_estimate!(::UnscentedKalmanFilter)
.
#
ModelPredictiveControl.init_internalmodel
— Function
init_internalmodel(As, Bs, Cs, Ds) -> Âs, B̂s
Вычисляет матрицы преобразования стохастической модели Âs
и B̂s
для средства оценки InternalModel
.
As
, Bs
, Cs
и Ds
— это матрицы стохастической модели:
где — концептуальный неизвестный белый шум с нулевым средним значением. Его оптимальная оценка равна , что является ожидаемым значением. Таким образом, матрицы Âs
и B̂s
, которые преобразуют стохастическую оценку оптимальным образом:
с текущей оценкой стохастических выходов , состоящей из измеряемых и неизмеряемых выходов. См. работу [^1].
#
ModelPredictiveControl.init_predmat_mhe
— Function
init_predmat_mhe(
model::LinModel, He, i_ym, Â, B̂u, Ĉ, B̂d, D̂d
) -> E, F, G, J, ex̄, fx̄, Ex̂, Fx̂, Gx̂, Jx̂
Создает прогнозные матрицы MHE для объекта model
типа LinModel
.
При введении вектора ] с переменными решения оценочный шум датчика от момента времени до момента вычисляется следующим образом:
где и содержат соответственно обрабатываемые входы, измеряемые возмущения и измеряемые выходы от момента времени до . Метод возвращает аналогичные матрицы, но для оценочной погрешности в конечный момент:
Наконец, оценочные состояния от момента времени до описываются следующим уравнением:
Во всех этих уравнениях опущены рабочие точки .
Расширенная справка
С использованием расширенных матриц прогнозные матрицы для шума датчика вычисляются следующим образом (обратите внимание на знаки минуса после знаков равенства):
Для оценочной погрешности в конечный момент:
И для оценочных состояний:
Все эти матрицы усекаются при
Возвращает пустые матрицы, если model
не относится к типу LinModel
, кроме ex̄
.
#
ModelPredictiveControl.relaxarrival
— Function
relaxarrival(
model::SimModel, C, c_x̂min, c_x̂max, x̂min, x̂max, ex̄
) -> A_x̃min, A_x̃max, x̃min, x̃max, ẽx̄
Расширяет ограничения конечного состояния с помощью ослабляющей переменной ϵ для смягчения MHE.
Если обозначить переменную решения MHE, расширяемую с помощью ослабляющей переменной
#
ModelPredictiveControl.relaxX̂
— Function
relaxX̂(model::SimModel, C, C_x̂min, C_x̂max, Ex̂) -> A_X̂min, A_X̂max, Ẽx̂
Расширяет ограничения оценочного состояния с помощью ослабляющей переменной ϵ для смягчения MHE.
Если обозначить переменную решения MHE, расширяемую с помощью ослабляющей переменной
Возвращает пустые матрицы, если модель не относится к типу LinModel
.
#
ModelPredictiveControl.relaxŴ
— Function
relaxŴ(model::SimModel, C, C_ŵmin, C_ŵmax, nx̂) -> A_Ŵmin, A_Ŵmax
Расширяет ограничения оценочного шума процесса с помощью ослабляющей переменной ϵ для смягчения MHE.
Если обозначить переменную решения MHE, расширяемую с помощью ослабляющей переменной
#
ModelPredictiveControl.relaxV̂
— Function
relaxV̂(model::SimModel, C, C_v̂min, C_v̂max, E) -> A_V̂min, A_V̂max, Ẽ
Расширяет ограничения оценочного шума датчика с помощью ослабляющей переменной ϵ для смягчения MHE.
Если обозначить переменную решения MHE, расширяемую с помощью ослабляющей переменной
Возвращает пустые матрицы, если модель не относится к типу LinModel
.
#
ModelPredictiveControl.init_matconstraint_mhe
— Function
init_matconstraint_mhe(model::LinModel,
i_x̃min, i_x̃max, i_X̂min, i_X̂max, i_Ŵmin, i_Ŵmax, i_V̂min, i_V̂max, args...
) -> i_b, i_g, A
Инициализирует матрицы i_b
, i_g
и A
для линейных ограничений неравенства MHE.
Линейные и нелинейные ограничения неравенства определяются соответственно следующим образом:
i_b
— это вектор BitVector
, включающий индексы i_g
— это похожий вектор, но для индексов model
относится к типу LinModel
). Этот метод также возвращает args
) . В этом случае аргументы args
должны содержать все матрицы ограничений неравенства: A_x̃min, A_x̃max, A_X̂min, A_X̂max, A_Ŵmin, A_Ŵmax, A_V̂min, A_V̂max
.
Инициализирует i_b, A
без ограничений состояния и шум датчика, если model
не относится к типу LinModel
.
Обновление квадратичной оптимизации
#
ModelPredictiveControl.initpred!
— Method
initpred!(estim::MovingHorizonEstimator, model::LinModel) -> nothing
Инициализирует матрицы квадратичной оптимизации F, fx̄, H̃, q̃, p
для MovingHorizonEstimator
.
Определение векторов init_predmat_mhe
. Также инициализирует целевую функцию estim.optim
, выраженную в общей квадратичной форме:
где
#
ModelPredictiveControl.linconstraint!
— Method
linconstraint!(estim::MovingHorizonEstimator, model::LinModel)
Задает вектор b
для ограничений неравенства линейной модели (
Кроме того, инициализирует вектор init_predmat_mhe
.
Вычисление оценочного выхода
#
ModelPredictiveControl.evalŷ
— Function
evalŷ(estim::StateEstimator, _ , d) -> ŷ
Вычисляет выход ŷ
оценки StateEstimator
на основе измеряемого возмущения d
и estim.x̂
.
Второй аргумент игнорируется во всех случаях, кроме модели InternalModel
.
evalŷ(estim::InternalModel, ym, d) -> ŷ
Возвращает выход ŷ
модели InternalModel
на основе текущих измеряемых выходов ym
и распределения d
.
Средству оценки InternalModel
требуются текущие измеряемые выходы
Удаление рабочих точек
#
ModelPredictiveControl.remove_op!
— Function
remove_op!(estim::StateEstimator, u, ym, d) -> u0, ym0, d0
Удаляет рабочие точки на входах u
, измеряемых выходах ym
и в возмущениях d
.
Сохраняет текущие входы без рабочих точек u0
в estim.lastu0
. Это поле используется для вычисления PredictiveController
.
Обновление оценки
Все эти методы предполагают, что в аргументах |
и d
рабочие точки уже удалены. Строго говоря, согласно нотации setop!
аргументы должны называться u0
, ym0
и d0
. Элемент 0
опускается для упрощения записи.
#
ModelPredictiveControl.update_estimate!
— Function
update_estimate!(estim::SteadyKalmanFilter, u, ym, d)
Обновляет оценку estim.x̂
с использованием текущих входов u
, измеренных выходов ym
и распределения d
. SteadyKalmanFilter
выполняет обновление с использованием предварительно вычисленного коэффициента усиления Калмана
update_estimate!(estim::KalmanFilter, u, ym, d)
Обновляет состояние estim.x̂
и оценочную ковариацию погрешности estim.P̂
фильтра KalmanFilter
.
Реализует динамический фильтр Калмана в форме предиктора (наблюдателя):
на основе модели процесса, описанной в SteadyKalmanFilter
. Нотация
update_estimate!(estim::UnscentedKalmanFilter, u, ym, d)
Обновляет состояние estim.x̂
и оценочную ковариацию estim.P̂
фильтра UnscentedKalmanFilter
.
Реализует сигма-точечный фильтр Калмана в форме предиктора (наблюдателя) на основе обобщенного сигма-точечного преобразования link:Simon, D. 2006, Chapter 14: The unscented Kalman filter в Optimal State Estimation: Kalman, H∞, and Nonlinear Approaches", John Wiley & Sons, p. 433–459, https://doi.org/10.1002/0470045345.ch14, ISBN9780470045343.[{caret}3]. В описании init_ukf
приводится определение констант
Если
с использованием нижнего треугольного множителя cholesky
для вычисления
update_estimate!(estim::ExtendedKalmanFilter, u, ym, d=empty(estim.x̂))
Обновляет состояние estim.x̂
и ковариацию estim.P̂
фильтра ExtendedKalmanFilter
.
Уравнения аналогичны update_estimate!(::KalmanFilter)
, но с заменами
ForwardDiff.jacobian
автоматически вычисляет якобианы:
Матрица
update_estimate!(estim::Luenberger, u, ym, d=empty(estim.x̂))
То же, что и update_estimate!(::SteadyKalmanFilter)
, но с использованием Luenberger
.
update_estimate!(estim::MovingHorizonEstimator, u, ym, d)
Обновляет состояние estim.x̂
объекта MovingHorizonEstimator
.
Задача оптимизации MovingHorizonEstimator
решается в каждый дискретный момент времени update_estimate!(::ExtendedKalmanFilter)
или KalmanFilter
для LinModel
.
update_estimate!(estim::InternalModel, u, ym, d=empty(estim.x̂)) -> x̂d
Обновляет оценку estim.x̂
, x̂d
и x̂s
с использованием текущих входов u
, измеренных выходов ym
и распределения d
. InternalModel
обновляет детерминированную (x̂d
) и стохастическую (x̂s
) оценки следующим образом.
Это средство оценки не расширяет вектор состояний, поэтому init_internalmodel
.
Инициация оценки
Строго говоря, и в этом случае аргументы должны называться |
#
ModelPredictiveControl.init_estimate!
— Function
init_estimate!(estim::StateEstimator, model::LinModel, u, ym, d)
Инициализирует оценку estim.x̂
с использованием решения в установившемся состоянии, если model
относится к типу LinModel
.
При использовании аргументов u
, ym
и d
задача установившегося состояния с ограничением неравенства
Здесь estim.Ĉ, estim.D̂d
, соответствующие измеряемым выходам
init_estimate!(estim::StateEstimator, model::SimModel, _ , _ , _ )
Оставляет оценку estim.x̂
без изменений, если model
не относится к типу LinModel
.
init_estimate!(estim::InternalModel, model::LinModel, u, ym, d)
Инициализирует оценку estim.x̂
, x̂d
и x̂s
в установившемся состоянии для моделей InternalModel
.
Детерминированные оценки estim.x̂d
начинаются в установившемся состоянии с использованием аргументов u
и d
:
При использовании аргумента ym
и текущей оценки стохастических выходов
Это средство оценки не расширяет вектор состояний, поэтому init_internalmodel
.