PyBOP provides tools for the parameterisation and optimisation of battery models, using both Bayesian and frequentist approaches, with example workflows to assist the user. PyBOP can be used to parameterise various battery models, including the electrochemical and equivalent circuit models available in PyBaMM.
📌 PyBOP v25.10 presents a major restructure of PyBOP's base classes. We move from setting up
a model, problem, cost, then optimiser to defining a simulator, cost, problem, and then optimiser. A pybop.pybamm.Simulator is designed to simulate a
pybamm.BaseModel. Optimisation parameters can be passed through a pybamm.ParameterValues class.
To understand how to update your use of PyBOP, please take a look at the example notebooks and scripts.
Within your virtual environment, install PyBOP:
pip install pybopTo install the most recent state of PyBOP, install from the develop branch,
pip install git+https://github.com/pybop-team/PyBOP.git@developTo install a previous version of PyBOP, use the following template and replace the version number:
pip install pybop==v24.3To check that PyBOP is installed correctly, run one of the examples in the following section. For a development installation, see the Contribution Guide. More installation information is available in our documentation and the extended installation instructions for PyBaMM.
PyBOP has two intended uses:
-
Parameter inference from battery test data.
-
Design optimisation under battery manufacturing/use constraints.
These include a wide variety of optimisation problems that require careful consideration due to the choice of battery model, data availability and/or the choice of design parameters.
Please take inspiration from the following journal articles which show how PyBOP is being used for research:
- "Physics-based battery model parametrisation from impedance data" by Hallemans et al. (2025) with open-source code and data
- "Transport limitations in single-crystal NCM cathode electrodes" by Jackowska et al. (2025) with open-source code and original data
Explore our example notebooks for hands-on demonstrations:
- Getting started with gradient-based optimisation
- Estimating ECM parameters from a HPPC pulse
- Identifying ECM parameters with nonlinear constraints
- Parameter identification for a spatial pouch cell model
- Energy-based electrode design optimisation
Find additional script-based examples in the examples directory:
- Getting started with SciPy minimize
- Estimating diffusivity from GITT data
- Maximum a Posteriori parameter identification
- Using electrochemical impedance spectroscopy (EIS) data
- Getting started with MCMC samplers
In addition to the models available in PyBaMM, PyBOP currently hosts some grouped-parameter versions of common battery models which are purpose-built for parameter esimation and can be found under models.
PyBOP aims to foster a broad consortium of developers and users, building on and learning from the success of the PyBaMM community. Our values are:
-
Inclusivity and fairness (those who wish to contribute may do so, and their input is appropriately recognised)
-
Interoperability (modularity for maximum impact and inclusivity)
-
User-friendliness (putting user requirements first via user-assistance & workflows)
PyBOP is released under the BSD 3-Clause License.
We would like to thank all contributors to PyBOP. Contributions are welcome! See CONTRIBUTING.md for ways to get started.
The original PyBOP developers were supported by research funding from the Faraday Institution, UK Research and Innovation, and Horizon Europe IntelLiGent Consortium.