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