Ensemble Kalman Inversion (EKI)#

The EKI workflows provide single- and multi-fidelity ensemble Kalman inversion utilities for parameter inference problems. Both workflows are derivative-free with respect to the forward model, support concurrent sample evaluation, and write restart files that can be used to resume long-running solves.

Single-fidelity EKI updates a parameter ensemble with Kalman-style covariance estimates formed from forward-model QoIs. Multi-fidelity EKI preserves the same high-fidelity inverse target while augmenting the update with a surrogate-based control-variate correction built from shared FOM/ROM samples and additional ROM-only samples.

For more detailed algorithmic background, see the function-level API documentation for the single- and multi-fidelity drivers below.

Single-fidelity EKI#

romtools.workflows.inverse.eki_drivers.run_eki(model, parameter_space, observations, observations_covariance, parameter_mins=None, parameter_maxes=None, absolute_work_dir=None, ensemble_size=30, initial_step_size=0.05, regularization_parameter=0.0001, step_size_growth_factor=1.25, step_size_decay_factor=2.0, max_step_size_decrease_trys=5, relaxation_parameter=1.05, error_norm_tolerance=1e-05, delta_params_tolerance=0.001, rejuvenation_strategy='none', rejuvenation_interval=5, rejuvenation_inflation=1.1, rejuvenation_prior_weight=0.0025, max_rejuvenations=3, rejuvenation_cooldown=10, max_iterations=50, random_seed=1, evaluation_concurrency=1, restart_file=None, dispatcher=None, *, bounded_parameter_handling='clip', transform_interior_margin=0.0, transform_map='sigmoid', absolute_eki_directory=None)[source]

Run EKI with historical clipping or an unconstrained bound transform.

Parameters:
  • model (QoiModel)

  • parameter_space (ParameterSpace)

  • observations (ndarray)

  • observations_covariance (ndarray)

  • parameter_mins (ndarray)

  • parameter_maxes (ndarray)

  • absolute_work_dir (str)

  • ensemble_size (int)

  • initial_step_size (float)

  • regularization_parameter (float)

  • step_size_growth_factor (float)

  • step_size_decay_factor (float)

  • max_step_size_decrease_trys (int)

  • relaxation_parameter (float)

  • error_norm_tolerance (float)

  • delta_params_tolerance (float)

  • rejuvenation_strategy (str)

  • rejuvenation_interval (int)

  • rejuvenation_inflation (float)

  • rejuvenation_prior_weight (float)

  • max_rejuvenations (int)

  • rejuvenation_cooldown (int)

  • max_iterations (int)

  • random_seed (int)

  • dispatcher (BaseDispatcher | None)

  • bounded_parameter_handling (str)

  • transform_interior_margin (float)

  • transform_map (str)

  • absolute_eki_directory (str)

Multi-fidelity EKI#

romtools.workflows.inverse.mf_eki_drivers.run_mf_eki(model, rom_model_builder, parameter_space, observations, observations_covariance, parameter_mins=None, parameter_maxes=None, absolute_work_dir=None, fom_ensemble_size=10, rom_extra_ensemble_size=30, rom_tolerance=0.005, use_updated_rom_in_update_on_rebuild=True, initial_step_size=0.1, regularization_parameter=0.0001, step_size_growth_factor=1.25, step_size_decay_factor=2.0, max_step_size_decrease_trys=5, relaxation_parameter=1.05, error_norm_tolerance=1e-05, delta_params_tolerance=0.001, rejuvenation_strategy='none', rejuvenation_interval=5, rejuvenation_inflation=1.1, rejuvenation_prior_weight=0.0025, max_rejuvenations=3, rejuvenation_cooldown=10, max_rom_training_history=1, rom_substep_start_iteration=0, rom_substep_end_iteration=None, num_rom_substeps=0, max_iterations=50, random_seed=1, fom_evaluation_concurrency=1, rom_evaluation_concurrency=1, restart_file=None, dispatcher=None, *, bounded_parameter_handling='clip', transform_interior_margin=0.0, transform_map='sigmoid', absolute_eki_directory=None)[source]

Run MF-EKI with historical clipping or an unconstrained bound transform.

Parameters:
  • model (QoiModel)

  • rom_model_builder (QoiModelBuilderWithTrainingData)

  • parameter_space (ParameterSpace)

  • observations (ndarray)

  • observations_covariance (ndarray)

  • parameter_mins (ndarray)

  • parameter_maxes (ndarray)

  • absolute_work_dir (str)

  • fom_ensemble_size (int)

  • rom_tolerance (float)

  • use_updated_rom_in_update_on_rebuild (bool)

  • initial_step_size (float)

  • regularization_parameter (float)

  • step_size_growth_factor (float)

  • step_size_decay_factor (float)

  • max_step_size_decrease_trys (int)

  • relaxation_parameter (float)

  • error_norm_tolerance (float)

  • delta_params_tolerance (float)

  • rejuvenation_strategy (str)

  • rejuvenation_interval (int)

  • rejuvenation_inflation (float)

  • rejuvenation_prior_weight (float)

  • max_rejuvenations (int)

  • rejuvenation_cooldown (int)

  • max_rom_training_history (int)

  • rom_substep_start_iteration (int)

  • rom_substep_end_iteration (int | None)

  • num_rom_substeps (int)

  • max_iterations (int)

  • random_seed (int)

  • fom_evaluation_concurrency (int)

  • rom_evaluation_concurrency (int)

  • restart_file (str)

  • dispatcher (BaseDispatcher | None)

  • bounded_parameter_handling (str)

  • transform_interior_margin (float)

  • transform_map (str)

  • absolute_eki_directory (str)