Default Configurations

The ensemble size is generally not determinable in advance. However there are several rules of thumb for calibrating a parameter vector $\theta$ that can be used as a starting point.

Parameter dimensionEnsemble size
$\mathrm{dim}(\theta)\leq 10$$N_{\mathrm{ens}} \geq 10 \cdot \mathrm{dim}(\theta)$
$10 \leq \mathrm{dim}(\theta)\leq 100$$N_{\mathrm{ens}} = 100$
$100\leq \mathrm{dim}(\theta)$$N_{\mathrm{ens}} = 100$ and SEC
for the `Unscented` process

UKI and UTKI always create an ensemble size proportional to $\mathrm{dim}(\theta)$. It is not configurable by the user, and is retrievable from an EnsembleKalmanProcess object ekp using get_N_ens(ekp).

Quick links!

  • What does scheduler = ... do? See here.
  • What does localization_method = ... do? See here. and our example
  • What does failure_handler_method = ... do? See here
  • What does accelerator = ... do? See here, and our examples

Prebuilt defaults

Defaults have been chosen for the methodology based on prior experience. The configurations can be revealed by adding the keyword

EnsembleKalmanProcess(..., verbose = true)

To use the defaults, one constructs an Ensemble Kalman Process with

EnsembleKalmanProcess(initial_parameters, observation, process)

and the following configurations (listed below) will be automatically created depending on the process type chosen, they are listed as keyword arguments that will be automatically added into EnsembleKalmanProcess() on creation.

Please see the relevant documentation pages for each configurable if you wish to modify them.

process <: Inversion

Process documentation here

scheduler = DataMisfitController(terminate_at = 1)
localization_method = Localizers.SECNice()
failure_handler_method = SampleSuccGauss()
accelerator = NesterovAccelerator()

process <: TransformInversion

Process documentation here

scheduler = DataMisfitController(terminate_at = 1)
localization_method = Localizers.NoLocalization()
failure_handler_method = SampleSuccGauss()
accelerator = DefaultAccelerator()

process <: SparseInversion

Process documentation here

scheduler = DefaultScheduler()
localization_method = Localizers.SECNice()
failure_handler_method = SampleSuccGauss()
accelerator = DefaultAccelerator()

process <: GaussNewtonInversion

Process documentation here

scheduler = DataMisfitController(terminate_at = 1)
localization_method = Localizers.SECNice()
failure_handler_method = SampleSuccGauss()
accelerator = NesterovAccelerator()

process <: Sampler

Process documentation here

scheduler = EKSStableScheduler(1.0, eps())
localization_method = Localizers.NoLocalization()
failure_handler_method = IgnoreFailures()
accelerator = DefaultAccelerator()

process <: Unscented

Process documentation here

scheduler = DataMisfitController(terminate_at = 1)
localization_method = Localizers.NoLocalization()
failure_handler_method = SampleSuccGauss()
accelerator = DefaultAccelerator()

process <: TransformUnscented

Process documentation here

scheduler = DataMisfitController(terminate_at = 1)
localization_method = Localizers.NoLocalization()
failure_handler_method = SampleSuccGauss()
accelerator = DefaultAccelerator()

"Vanilla" settings: How to turn off features

As the defaults now implement recent features. The following snippet shows how one can use keyword arguments to construct an EKP with no additional features or variants.

EnsembleKalmanProcess(
    initial_parameters,
    observation,
    process,
    scheduler = DefaultScheduler(1), # constant timestep size 1
    localization_method = Localizers.NoLocalization(), # no localization
    failure_handler_method = IgnoreFailures(), # no failure handling
    accelerator = DefaultAccelerator(), # no acceleration
)
Note

You will need to call the Localizers module via

using EnsembleKalmanProcesses.Localizers

to get the localization_method structures