Cycle ageing objective

Objectives for fitting the data generated by a cycle ageing experiment.

class ionworkspipeline.objectives.CycleAgeing(data_input, options=None, callbacks=None, custom_parameters=None, constraints=None, penalties=None, parameters=None)

Objective for fitting summary variables to cycling data.

Parameters

data_inputstr or dict

The data to use for the fit, see FittingObjective.

optionsdict, optional

A dictionary of options to pass to the objective.

  • model: :class:pybamm.BaseModel

    The model to fit. No default is provided, but this option is required (a model must be passed in).

  • experiment: pybamm.Experiment, “from data”, or DataLoader

    The experiment to use for the simulation. No default is provided, but this option is required (an experiment must be passed in). If set to the string “from data”, the experiment is generated automatically from the step information in the data via ionworksdata.DataLoader.generate_experiment(); this requires data_input to be an ionworksdata.DataLoader (or a dict whose “data” entry is a DataLoader) with steps. If set to a ionworksdata.DataLoader, the experiment is generated from that loader’s steps instead — useful when the fitted data (e.g. a per-cycle summary table) is a different object from the measurement that defines the protocol. Generation happens lazily when the objective is built (at the start of a fit), so step data is only loaded at that point.

  • objective variables: list of strings

    The variables to fit. No default is provided, but this option is required (a list of variables must be passed in). The variables must be a subset of the keys in the data.

  • metrics: dict of str to BaseMetric

    A dictionary mapping variable names to metric objects that extract values from the simulation solution. Each metric should be created with .by_cycle() to evaluate across cycles. The cycles will be set automatically from the data. Default metrics are provided for “LLI [%]”, “LAM_ne [%]”, and “LAM_pe [%]”. When every metric reads only per-step first/last values (the defaults, or any First/Last .by_cycle() metric), solver_kwargs["store_first_last"] defaults to True so the auto-built solver stores only step endpoints — much more memory-light for long cycling solves. Pass store_first_last explicitly in solver_kwargs to override.

  • simulation_kwargs: dict

    Keyword arguments to pass to the simulation (iwp.Simulation). May include solver_kwargs to tune the auto-built solver (e.g. {"options": {"compile": True}} to enable compilation), ignored if an explicit solver is also provided. May also include solve_kwargs forwarded to the runtime solve regardless of the solver; save_at_cycles is derived automatically from the metrics and a value passed here is ignored with a warning (the metrics’ cycles must be kept). experiment_model_mode defaults to "unified" (a single switching model for the whole experiment, much cheaper for repeated cycling) whenever an experiment is supplied; pass it explicitly here to override. Default is None.

callbackslist of callable, optional

A class with methods that get called at various points during the datafit process

custom_parametersdict, optional

A dictionary of custom parameters to use for the objective. Deprecated, use parameters instead.

constraintslist[Constraint], optional

A list of equality and inequality constraints to apply to the objective.

penaltieslist[Penalty], optional

A list of penalties to apply to the objective.

parametersdict or pybamm.ParameterValues, optional

Objective-specific parameter values merged into the global parameter values before fitting. Default is None.

Extends: ionworkspipeline.data_fits.objectives.fitting_objective.SimulationObjective

build(parameter_values)

Build the objective.

Parameters

parameter_valuespybamm.ParameterValues

The parameter values to use for the objective.

classmethod default_options() dict[str, Any]

Return the default options for the CycleAgeing objective.

default_validation_plot_types: list[str] | None = ['model data', 'error']

Default list of validation plot type names for this objective.

Subclasses that support validation should override. Return None to use the pipeline fallback (e.g. ["model data", "error"]); return [] for no plots.

prepare_validation_results(results: dict, summary_stats: list) tuple[list[dict[str, float]], dict[str, float]]

Prepare validation results for CycleAgeing objective.

Parameters

resultsdict

The raw results from running the objective (keys = variable names, values = arrays per cycle).

summary_statslist

List of summary statistic cost functions to compute.

Returns

tuple[list[dict[str, float]], dict[str, float]]

A tuple of (computed_statistics, validation_result) where computed_statistics is a list of dictionaries with computed metric names and values, and validation_result is a dictionary of validation data (Cycle number and per-variable model/data).