Skip to content

Decomposed Gaussian Processes for parameter estimation #972

Description

@derek-slack

Feature description

I have created a methodology utilizing decomposed GPs to estimate parameters. The creation of a GP parameter in PyBop is shown as follows:

GP_options = {'Number of terms':5,'Constant mean':8,'div_arg':[[1,2],[0,2]], 'exp':False}

GP_param_neg = pybop.FoKLGP(
    "Positive electrode exchange-current density [A.m-2]",
    parameter_values=parameter_values, options=GP_options, 
    twoway=True)

new_parameters = GP_param_neg.get_parameter_values()

The rest of the workflow stays the same from here.

Motivation

Parameters are non-linear functions of the state of the cell. Utilizing decomposed GPs for model fitting is a way to capture the changes in the parameters with these state changes in ways predicting them as a constant might not be able to.

Decomposed GPs are easily implemented within PyBOPs workflow. The decomposition of the kernel function is precomputed, and only the weights of each basis function need to be sampled to evaluate a GP. These weights are created to be PyBOP.Gaussian() parameters.

Possible implementation

I have created an initial working implementation and an example scripts. The GPs showed the same accuracy as PyBOP models in experimental and simulated data sets. It was accurately able to recreate the general behavior of the Positive electrode exchange-current density [A.m-2] parameter in the Chen2020 parameter set.

Additional context

I just wanted to showcase the functionality added, see if there was any interest on PyBOP's end to further develop this implementation
https://github.com/derek-slack/PyBOP-GP-Parameter-Estimation

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions