Written and maintained by CASRAI Editorial Board
Published
On this page
PyBOP is an open-source Python package for the parameterisation and optimisation of battery models. In practice it does two jobs with one set of machinery: it fits a model’s parameters to measured battery test data, and it searches for battery design parameters that maximise a target such as energy density under constraints. It is built on the PyBaMM modelling framework and is released under a BSD 3-Clause licence.
Definition and scope
The project describes itself as providing tools for the parameterisation and optimisation of battery models. Its documentation calls it a Python package dedicated to the optimisation and parameterisation of battery models, written for academic research, industry and general interest. The name stands for Python Battery Optimisation and Parameterisation. The accompanying paper, published in the Journal of Open Source Software (volume 10, issue 116, article 7874, doi:10.21105/joss.07874), is by Brady Planden, Nicola E. Courtier, Martin Robinson, Agriya Khetarpal, Ferran Brosa Planella and David A. Howey. The paper describes a user-friendly, object-oriented interface for optimising battery model parameters, aimed at students, engineers and researchers of varying expertise.
PyBOP is open-source software, and the repository names its original developers’ funder as the Faraday Institution, with further support listed from UKRI and from the Horizon Europe IntelLiGent consortium. The software paper itself went through the review process of the Journal of Open Source Software; it was submitted on 6 January 2025 and published on 3 December 2025.
What PyBOP is not: it is not a battery simulator in its own right (the electrochemical and equivalent-circuit models come from PyBaMM, or from models you define yourself), and it is not a cell-testing tool. It sits between measured data and a model, and its output is a set of parameter values or a design.
How PyBOP is used in practice
Parameter inference from test data
The paper frames deterministic parameterisation as an optimisation task: minimise a distance-based cost between the model output and the measured data. You choose a model, name the parameters to be identified and their bounds, supply measured data, choose a cost, and let an optimiser adjust the parameters until the cost is as small as it can get. Because the package works with both Bayesian and frequentist approaches, the same problem can instead be posed as sampling a posterior distribution, which returns a distribution over parameters rather than a single best-fit value.
Design optimisation
The second use is design optimisation under manufacturing and use constraints. The worked example in the paper maximises gravimetric energy density using a single-particle model with electrolyte (SPMe), subject to constraints on two geometric electrode parameters: the positive electrode thickness and the active material volume fraction. It uses the Nelder-Mead search. PyBOP performs maximisation by minimising the negative of the cost function, so a design target and a fitting error are handled by the same minimisation code.
Installation
The repository gives the install command as pip install pybop, recommended inside a virtual environment. The documentation has a Quick Start, an API reference and contributing guidance.
Models, optimisers and cost functions
The paper lists the following choices. The data table below sets the optimiser families against the algorithms the paper names in each; the lists that follow cover models and costs.
Battery models
The paper names the single-particle model (SPM), the single-particle model with electrolyte (SPMe), the Doyle-Fuller-Newman model (DFN), the many-particle model (MPM), the multi-species multi-reaction model (MSMR), the Weppner-Huggins model and the equivalent circuit model (ECM). PyBOP works with PyBaMM electrochemical and equivalent-circuit models, and with its own grouped-parameter models.
Cost functions
For fitting, the paper lists sum-squared error, root-mean-squared error, Minkowski and sum-of-power costs, a Gaussian log-likelihood and a maximum a posteriori cost. For design optimisation it lists volumetric and gravimetric energy density as targets.
Newer releases
The paper is a snapshot of an earlier release. A later Zenodo release, v26.3 of 5 March 2026, adds EP-BOLFI Bayesian optimisation and a CellTemperature lumped thermal model. Check the repository’s release notes for the version you install, since the options above may have changed.
Where this matters for labs and test programmes
A model fitted to lab data is only as useful as the data it came from and as reproducible as the record of how it was fitted. Three points follow directly from what the sources state.
- Cost choice is a modelling decision. Sum-squared error, RMSE and a Gaussian log-likelihood are different objectives. Record which one produced the reported parameters.
- Parameter sets can be shared. PyBOP supports the Battery Parameter Exchange (BPX) standard, cited in the paper as Korotkin et al. (2023), for exchanging parameter sets, and the paper says identified parameters are easily exportable to other packages. That makes a fitted set something a collaborator or a reviewer can load.
- Workflow limits exist. In the version of the paper described here, gradient-based optimisation and sampling methods were not available when using an impedance workflow. Check current documentation before planning impedance-based fitting around those methods.
The paper positions PyBOP as complementary to liionpack (for battery packs) and pybamm-eis (for impedance), rather than a replacement for them, and it reports no benchmark against other tools; this page therefore makes no speed or accuracy comparison. For wider context on cell chemistries, see the CASRAI guides on lithium-sulfur batteries and flow batteries.
A record to keep with every fitted parameter set
This checklist is editorial: it turns the choices the PyBOP paper says a user makes into the items a lab notebook or methods section should capture, so that someone else can repeat the fit.
- Model: which of SPM, SPMe, DFN, MPM, MSMR, Weppner-Huggins or ECM (or a grouped-parameter model) was fitted.
- Data: which measured test data the cost was computed against, and how it was prepared before fitting.
- Parameters and bounds: which parameters were free to change, and which were held fixed.
- Cost: sum-squared error, RMSE, Minkowski, sum-of-power, Gaussian log-likelihood or maximum a posteriori.
- Optimiser or sampler: the algorithm from the data table below, with its settings.
- Software versions: the PyBOP and PyBaMM versions, because the project publishes new releases and the supported options change between them.
- Exchange format: whether the result was exported as a BPX parameter set.
How PyBOP relates to PyBaMM
PyBaMM is the modelling framework PyBOP builds on. The paper’s stated aim is an interface that lets students, engineers and researchers of different experience levels optimise battery model parameters without writing the optimisation layer themselves. The division of labour is simple: PyBaMM provides the physics-based and equivalent-circuit models, while PyBOP supplies the cost functions, optimisers and samplers that adjust those models’ parameters against data or against a design target. Because identified parameters are easily exportable to other packages, a PyBOP fit does not lock the result into one tool.
The optimiser table below is useful when choosing between a point estimate and a posterior. Gradient-based, evolutionary and heuristic methods each return one set of parameter values, while the Bayesian samplers return many samples, from which a spread of plausible values can be read.
Common misunderstandings
PyBOP is not only a fitting tool
Parameter inference is one half. The same package performs design optimisation, such as maximising gravimetric energy density within electrode geometry constraints.
Optimisation is not the same as sampling
Optimisers return a best estimate; Bayesian samplers such as NUTS, Hamiltonian Monte Carlo, Haario-Bardenet adaptive Metropolis and the emcee hammer, mostly provided through PINTS, return samples from a posterior.
A good fit is not a validated model
A low cost value shows that the chosen model, parameters and data agree under the chosen cost. The sources do not claim more than that, and neither should a methods section.
Frequently asked questions
What is PyBOP?
An open-source Python package for the parameterisation and optimisation of battery models, built on PyBaMM and licensed under BSD 3-Clause.
What does PyBOP stand for?
Python Battery Optimisation and Parameterisation.
Who develops PyBOP?
The repository lists the Faraday Institution as funder of the original developers, with support from UKRI and the Horizon Europe IntelLiGent consortium. The JOSS paper authors are Planden, Courtier, Robinson, Khetarpal, Brosa Planella and Howey.
How do I install PyBOP?
The repository gives pip install pybop, preferably in a virtual environment.
Which models does PyBOP work with?
PyBaMM electrochemical and equivalent-circuit models, plus its own grouped-parameter models; the paper lists SPM, SPMe, DFN, MPM, MSMR, Weppner-Huggins and ECM.
How should PyBOP be cited?
The software paper is Planden et al., Journal of Open Source Software 10(116), 7874, doi:10.21105/joss.07874.
Sources
- PyBOP repository, github.com/pybop-team/PyBOP, read 14 November 2026.
- PyBOP documentation, pybop-docs.readthedocs.io, read 14 November 2026.
- Planden et al., PyBOP, Journal of Open Source Software 10(116), 7874, doi:10.21105/joss.07874, read 14 November 2026.
- Planden et al., PyBOP preprint, arXiv:2412.15859v1, read 14 November 2026.
Data: Optimiser families and algorithms named in the PyBOP paper
Compiled from the PyBOP JOSS paper and arXiv preprint (v1): the optimiser or sampler families PyBOP supports, the algorithms named in each, and whether each returns a point estimate or posterior samples.
Period covered: 2025.
| Family | Algorithms named in the paper | Output type |
|---|---|---|
| Gradient-based | AdamW, iRProp-, gradient descent, SciPy minimize | Point estimate |
| Evolutionary | CMA-ES, xNES, sNES, differential evolution | Point estimate |
| (Meta)heuristic | Particle swarm, Nelder-Mead, cuckoo search | Point estimate |
| Bayesian sampling | NUTS, Hamiltonian Monte Carlo, Haario-Bardenet, emcee hammer (mostly via PINTS) | Posterior samples |
Sources
- PyBOP preprint, arXiv:2412.15859v1 (accessed 2026-11-14)
- PyBOP, Journal of Open Source Software 10(116), 7874 (accessed 2026-11-14)
Compiled by CASRAI from the sources above. Free to reuse under CC BY 4.0 with attribution.







