Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Updates to likelihoods, bug fix GaussianLogLikelihood class #338

Merged
merged 93 commits into from
Jul 5, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
93 commits
Select commit Hold shift + click to select a range
31c8865
fix: Enables GaussLogLikelihood with optimisers, adds testing, defaul…
BradyPlanden Jun 2, 2024
7070e7c
Add changelog entry, add arg for bounds std, align sigma->sigma0 acro…
BradyPlanden Jun 3, 2024
9c1ca44
tests: updates incorrect sigma0 values
BradyPlanden Jun 5, 2024
f3fa4bd
Merge branch 'develop' into gauss-log-like-fixes
BradyPlanden Jun 5, 2024
9ab99da
adds x0 / bounds within BaseCost and BaseOptimiser for GaussLogLikeli…
BradyPlanden Jun 5, 2024
5df3210
tests: Add skip for Adam + GaussLogLikelihood SPM integration test
BradyPlanden Jun 6, 2024
7c4f000
Merge branch 'develop', tune spm_param tests
BradyPlanden Jun 6, 2024
832c8a2
tests: up coverage
BradyPlanden Jun 6, 2024
cd69359
Merge branch 'develop' into gauss-log-like-fixes
BradyPlanden Jun 6, 2024
dd985c2
refactor: change sigma0 attr logic on GaussLogLikelihoodKnownSigma, a…
BradyPlanden Jun 6, 2024
34b05b3
Suggestions from review
BradyPlanden Jun 7, 2024
a4b5907
Apply remainder suggestions from code review
BradyPlanden Jun 7, 2024
5ac5d0d
fix: imports List for type-hints
BradyPlanden Jun 7, 2024
e65d51b
tests: up coverage, add sigma0 to BaseLikelihood
BradyPlanden Jun 7, 2024
7095049
Add fit_keys and sigma as a Parameter
NicolaCourtier Jun 7, 2024
7e4cc7f
Update CMAES x0 check
NicolaCourtier Jun 7, 2024
8833c00
Add plot2d warning if not 2 parameters
NicolaCourtier Jun 7, 2024
23847e4
Fix integration tests' get_data
NicolaCourtier Jun 7, 2024
22301e6
Update exp_UKF example
NicolaCourtier Jun 7, 2024
341ad54
Fix case with sigma length 1
NicolaCourtier Jun 7, 2024
ff9ce43
Reset parameters not None checks
NicolaCourtier Jun 7, 2024
3641a47
Fix sigma2 in GLLKnownSigma
NicolaCourtier Jun 7, 2024
59f09b1
Update dsigma_scale
NicolaCourtier Jun 7, 2024
76371ed
style: pre-commit fixes
pre-commit-ci[bot] Jun 7, 2024
f20c942
Merge branch 'develop' into gauss-log-like-fixes
BradyPlanden Jun 10, 2024
88b936c
Fix GaussianLogLikelihoodKnownSigma
NicolaCourtier Jun 10, 2024
57d1768
Update plot2d for wrong number of parameters
NicolaCourtier Jun 10, 2024
fa3a70b
Fix classify_and_update_parameters
NicolaCourtier Jun 10, 2024
d2a6b5e
Add get_initial_value
NicolaCourtier Jun 10, 2024
e3251ca
Update sigma setting and tests
NicolaCourtier Jun 10, 2024
52ff78d
style: pre-commit fixes
pre-commit-ci[bot] Jun 10, 2024
1e6d149
Merge branch 'gauss-log-like-fixes' into 338b-gauss-loglikelihood
NicolaCourtier Jun 10, 2024
21f44a6
Update optim trace for >2 parameters
NicolaCourtier Jun 10, 2024
6793c3d
Add test_scipy_minimize_invalid_x0
NicolaCourtier Jun 10, 2024
c173c69
Add log prior gradient
NicolaCourtier Jun 10, 2024
dfdc0c5
Add optimiser.parameters, remove problem.x0
NicolaCourtier Jun 11, 2024
3315cc0
Update integration tests
NicolaCourtier Jun 11, 2024
20b7822
Pass inputs instead of x
NicolaCourtier Jun 11, 2024
51e8c7c
Specify inputs as Inputs
NicolaCourtier Jun 12, 2024
2b92ea9
Update notebooks
NicolaCourtier Jun 12, 2024
9121833
Add initial and true options to as_dict
NicolaCourtier Jun 12, 2024
c6553f4
Reset notebook versions
NicolaCourtier Jun 12, 2024
fed62f6
Update parameter_values to inputs
NicolaCourtier Jun 12, 2024
799122a
Update notebooks
NicolaCourtier Jun 12, 2024
07e90ad
Add parameters tests
NicolaCourtier Jun 13, 2024
63dd1f4
Add quick_plot test
NicolaCourtier Jun 13, 2024
6bcb155
Add test_no_optimisation_parameters
NicolaCourtier Jun 13, 2024
e402e38
Add test_error_in_cost_calculation
NicolaCourtier Jun 13, 2024
2adbdce
Add parameters.verify
NicolaCourtier Jun 13, 2024
10df0d2
Fix change to base_model
NicolaCourtier Jun 13, 2024
467f1f4
Add more base_model tests
NicolaCourtier Jun 13, 2024
c2f4ec4
Merge branch 'develop' into gauss-log-like-fixes
NicolaCourtier Jun 13, 2024
d6645cd
Merge branch '358-passing-inputs' into 338b-gauss-loglikelihood
NicolaCourtier Jun 13, 2024
a8ee7cb
Update base_cost.py
NicolaCourtier Jun 13, 2024
10314d7
Merge branch 'gauss-log-like-fixes' into 338b-gauss-loglikelihood
NicolaCourtier Jun 13, 2024
d3c4f1b
Remove fit_keys
NicolaCourtier Jun 13, 2024
e6d359a
Update base_model.py
NicolaCourtier Jun 13, 2024
85788dd
Replace store_optimised_parameters with update
NicolaCourtier Jun 14, 2024
17c44ef
Update value() output to ndarray
NicolaCourtier Jun 14, 2024
6d2776a
Update likelihood inputs
NicolaCourtier Jun 14, 2024
e0421a5
Merge branch 'develop' into gauss-log-like-fixes
BradyPlanden Jun 18, 2024
0148bec
Merge branch 'gauss-log-like-fixes' into 338b-gauss-loglikelihood
NicolaCourtier Jun 19, 2024
ae29165
style: pre-commit fixes
pre-commit-ci[bot] Jun 19, 2024
0e75c8f
Re-implement get item check
NicolaCourtier Jun 19, 2024
5c99037
Merge pull request #352 from pybop-team/338b-gauss-loglikelihood
BradyPlanden Jun 28, 2024
5b1d093
Merge branch 'develop' into 358-passing-inputs
BradyPlanden Jun 28, 2024
5fc94d8
fix: restore ValueError on incorrect parameter __getitem__
BradyPlanden Jun 28, 2024
ec1b881
Merge branch '358-passing-inputs' into gauss-log-like-fixes
BradyPlanden Jun 28, 2024
765e703
fix: likelihood powers as floats, bugfix outdated Adam logic conditio…
BradyPlanden Jun 28, 2024
3fcf0c8
refactor: default dsigma_scale update, changes to GaussLogLikelihood …
BradyPlanden Jun 28, 2024
5b614fe
feat: improve robustness of MAP prior grad approximate
BradyPlanden Jun 28, 2024
f2eb406
refactor: MAP finite difference gradient
BradyPlanden Jun 28, 2024
d98181c
tests: refactor optimiser construction, add asserts for sigma identif…
BradyPlanden Jun 29, 2024
20362c9
test: add test for sampling parameter initial value
BradyPlanden Jul 1, 2024
6b54415
refactor: GaussLogLikelihood __init__, revert temporary test workaround
BradyPlanden Jul 1, 2024
300c6c7
Apply suggestions from code review
NicolaCourtier Jul 3, 2024
0cad055
style: pre-commit fixes
pre-commit-ci[bot] Jul 3, 2024
b39fe15
Merge branch 'develop' into 358-passing-inputs
NicolaCourtier Jul 3, 2024
6b815a9
Import Union and Inputs
NicolaCourtier Jul 3, 2024
1331a8f
Move Inputs definition to parameter.py
NicolaCourtier Jul 3, 2024
d6120c8
Retrieve x0 from SciPyDE
NicolaCourtier Jul 3, 2024
a02257a
Add test for evaluate(List)
NicolaCourtier Jul 3, 2024
6e9ad43
Refactor as suggested
NicolaCourtier Jul 3, 2024
301d4c7
style: pre-commit fixes
pre-commit-ci[bot] Jul 3, 2024
a2c91cf
Remove duplicate line
NicolaCourtier Jul 3, 2024
9949478
Change quick_plot inputs to problem_inputs
NicolaCourtier Jul 3, 2024
8d09998
Merge branch 'develop' into 358-passing-inputs
NicolaCourtier Jul 4, 2024
a9f73df
Remove duplicate lines
NicolaCourtier Jul 4, 2024
7fe761c
Merge branch '358-passing-inputs' into gauss-log-like-fixes
BradyPlanden Jul 4, 2024
f49ea70
fix: incorrect dimensions self._dl, tweak settings integration tests
BradyPlanden Jul 4, 2024
b209048
Merge branch 'develop' into gauss-log-like-fixes
BradyPlanden Jul 4, 2024
1f33081
tests: updt to GaussLogLikelihood sigma0 values
BradyPlanden Jul 4, 2024
ee73c2b
fixes from code review, user output for boundaries
BradyPlanden Jul 5, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@

## Bug Fixes

- [#338](https://github.com/pybop-team/PyBOP/pull/338) - Fixes GaussianLogLikelihood class, adds integration tests, updates non-bounded parameter implementation by applying bounds from priors and `boundary_multiplier` argument. Bugfixes to CMAES construction.
- [#339](https://github.com/pybop-team/PyBOP/issues/339) - Updates the calculation of the cyclable lithium capacity in the spme_max_energy example.
- [#387](https://github.com/pybop-team/PyBOP/issues/387) - Adds keys to ParameterSet and updates ECM OCV check.
- [#380](https://github.com/pybop-team/PyBOP/pull/380) - Restore self._boundaries construction for `pybop.PSO`
Expand Down
24 changes: 14 additions & 10 deletions examples/scripts/spm_MAP.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,16 @@

import pybop

# Define model
# Construct and update initial parameter values
parameter_set = pybop.ParameterSet.pybamm("Chen2020")
parameter_set.update(
{
"Negative electrode active material volume fraction": 0.63,
"Positive electrode active material volume fraction": 0.51,
}
)

# Define model
model = pybop.lithium_ion.SPM(parameter_set=parameter_set)

# Fitting parameters
Expand All @@ -12,21 +20,16 @@
"Negative electrode active material volume fraction",
prior=pybop.Gaussian(0.6, 0.05),
bounds=[0.5, 0.8],
true_value=parameter_set["Negative electrode active material volume fraction"],
),
pybop.Parameter(
"Positive electrode active material volume fraction",
prior=pybop.Gaussian(0.48, 0.05),
bounds=[0.4, 0.7],
true_value=parameter_set["Positive electrode active material volume fraction"],
),
)

# Set initial parameter values
parameter_set.update(
{
"Negative electrode active material volume fraction": 0.63,
"Positive electrode active material volume fraction": 0.51,
}
)
# Generate data
sigma = 0.005
t_eval = np.arange(0, 900, 3)
Expand All @@ -44,8 +47,8 @@

# Generate problem, cost function, and optimisation class
problem = pybop.FittingProblem(model, parameters, dataset)
cost = pybop.MAP(problem, pybop.GaussianLogLikelihoodKnownSigma)
optim = pybop.CMAES(
cost = pybop.MAP(problem, pybop.GaussianLogLikelihoodKnownSigma, sigma0=sigma)
optim = pybop.AdamW(
cost,
max_unchanged_iterations=20,
min_iterations=20,
Expand All @@ -54,6 +57,7 @@

# Run the optimisation
x, final_cost = optim.run()
print("True parameters:", parameters.true_value())
print("Estimated parameters:", x)

# Plot the timeseries output
Expand Down
7 changes: 3 additions & 4 deletions examples/scripts/spm_MLE.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,6 @@
pybop.Parameter(
"Positive electrode active material volume fraction",
prior=pybop.Gaussian(0.48, 0.05),
bounds=[0.4, 0.7],
),
)

Expand Down Expand Up @@ -44,8 +43,8 @@

# Generate problem, cost function, and optimisation class
problem = pybop.FittingProblem(model, parameters, dataset)
likelihood = pybop.GaussianLogLikelihoodKnownSigma(problem, sigma=[0.03, 0.03])
optim = pybop.CMAES(
likelihood = pybop.GaussianLogLikelihoodKnownSigma(problem, sigma0=sigma)
optim = pybop.IRPropMin(
likelihood,
max_unchanged_iterations=20,
min_iterations=20,
Expand All @@ -57,7 +56,7 @@
print("Estimated parameters:", x)

# Plot the timeseries output
pybop.quick_plot(problem, problem_inputs=x[0:2], title="Optimised Comparison")
pybop.quick_plot(problem, problem_inputs=x, title="Optimised Comparison")

# Plot convergence
pybop.plot_convergence(optim)
Expand Down
2 changes: 1 addition & 1 deletion pybop/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -86,7 +86,6 @@
RootMeanSquaredError,
SumSquaredError,
ObserverCost,
MAP,
)
from .costs.design_costs import (
DesignCost,
Expand All @@ -97,6 +96,7 @@
BaseLikelihood,
GaussianLogLikelihood,
GaussianLogLikelihoodKnownSigma,
MAP,
)

#
Expand Down
Loading
Loading