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

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

Выходная функция расширенной модели. Подробные сведения см. в описании .

Используйте матрицы расширенной модели, если model — это объект LinModel.

ĥ(::InternalModel, model::NonLinModel, x̂, d)

Выходная функция модели InternalModel; вызывает model.h.

Релаксация ограничений

Создание средства оценки

# ModelPredictiveControl.init_estimstochFunction

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_integratorsFunction

init_integrators(nint, ny, varname::String) -> A, C, nint

Вычисляет матрицы пространства состояний A, C из спецификаций интегратора nint.

Эта функция используется для инициализации стохастической части расширенной модели с целью разработки средств оценки состояний. Вектор nint указывает, сколько интеграторов (последовательных) следует включить для каждого выхода. Аргумент должен иметь элемент ny, кроме случая nint=0, который не является псевдонимом ни для одного интегратора. Частному случаю одного интегратора на выход соответствуют A = I и C = I. При оценке матрица B не используется, поэтому она игнорируется. Эта функция вызывается дважды:

  1. для неизмеряемых возмущений на обрабатываемых входах ;

  2. для неизмеряемых возмущений на измеряемых выходах .

# ModelPredictiveControl.augment_modelFunction

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_ukfFunction

init_ukf(model, nx̂, α, β, κ) -> nσ, γ, m̂, Ŝ

Вычисляет константы UnscentedKalmanFilter исходя из и .

При элементах в векторе состояний и сигма-точках коэффициент масштабирования, применяемый к матрицам среднеквадратичных отклонений , имеет вид:

Весовой вектор для среднего значения и весовая матрица для ковариации имеют соответственно следующий вид:

Дополнительные сведения см. в описании update_estimate!(::UnscentedKalmanFilter).

# ModelPredictiveControl.init_internalmodelFunction

init_internalmodel(As, Bs, Cs, Ds) -> Âs, B̂s

Вычисляет матрицы преобразования стохастической модели Âs и B̂s для средства оценки InternalModel.

As, Bs, Cs и Ds — это матрицы стохастической модели:

где  — концептуальный неизвестный белый шум с нулевым средним значением. Его оптимальная оценка равна , что является ожидаемым значением. Таким образом, матрицы Âs и B̂s, которые преобразуют стохастическую оценку оптимальным образом:

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

# ModelPredictiveControl.init_predmat_mheFunction

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

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_mheFunction

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 для ограничений неравенства линейной модели ( ) MHE.

Кроме того, инициализирует вектор для ограничений состояния; см. описание 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.

Обновление оценки

Все эти методы предполагают, что в аргументах u, ym

и 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. Нотация относится к состоянию на текущий момент времени , оцененному за последний период управления . Подробные сведения см. в работе link:Boyd S., Lecture 8: The Kalman Filter (Winter 2008-09) [course slides], EE363: Linear Dynamical Systems, https://web.stanford.edu/class/ee363/lectures/kf.pdf.[^2].

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.

Инициация оценки

Строго говоря, и в этом случае аргументы должны называться u0, ym0 и d0.

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