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

Pass Inputs dictionary #359

Merged
merged 31 commits into from
Jul 4, 2024
Merged
Show file tree
Hide file tree
Changes from 16 commits
Commits
Show all changes
31 commits
Select commit Hold shift + click to select a range
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
5b1d093
Merge branch 'develop' into 358-passing-inputs
BradyPlanden Jun 28, 2024
5fc94d8
fix: restore ValueError on incorrect parameter __getitem__
BradyPlanden Jun 28, 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
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
Original file line number Diff line number Diff line change
Expand Up @@ -1641,7 +1641,7 @@
"source": [
"optim = pybop.PSO(cost, max_unchanged_iterations=55, threshold=1e-6)\n",
"x, final_cost = optim.run()\n",
"print(\"Initial parameters:\", cost.x0)\n",
"print(\"Initial parameters:\", optim.x0)\n",
"print(\"Estimated parameters:\", x)"
]
},
Expand Down Expand Up @@ -1679,7 +1679,7 @@
}
],
"source": [
"pybop.quick_plot(problem, parameter_values=x, title=\"Optimised Comparison\");"
"pybop.quick_plot(problem, inputs=x, title=\"Optimised Comparison\");"
]
},
{
Expand Down Expand Up @@ -1850,7 +1850,7 @@
}
],
"source": [
"pybop.quick_plot(problem, parameter_values=x, title=\"Parameter Extrapolation\");"
"pybop.quick_plot(problem, inputs=x, title=\"Parameter Extrapolation\");"
]
},
{
Expand Down
4 changes: 2 additions & 2 deletions examples/notebooks/equivalent_circuit_identification.ipynb
Original file line number Diff line number Diff line change
Expand Up @@ -419,7 +419,7 @@
"source": [
"optim = pybop.CMAES(cost, max_iterations=300)\n",
"x, final_cost = optim.run()\n",
"print(\"Initial parameters:\", cost.x0)\n",
"print(\"Initial parameters:\", optim.x0)\n",
"print(\"Estimated parameters:\", x)"
]
},
Expand Down Expand Up @@ -457,7 +457,7 @@
}
],
"source": [
"pybop.quick_plot(problem, parameter_values=x, title=\"Optimised Comparison\");"
"pybop.quick_plot(problem, inputs=x, title=\"Optimised Comparison\");"
]
},
{
Expand Down
4 changes: 1 addition & 3 deletions examples/notebooks/multi_model_identification.ipynb
Original file line number Diff line number Diff line change
Expand Up @@ -3904,9 +3904,7 @@
],
"source": [
"for optim, x in zip(optims, xs):\n",
" pybop.quick_plot(\n",
" optim.cost.problem, parameter_values=x, title=optim.cost.problem.model.name\n",
" )"
" pybop.quick_plot(optim.cost.problem, inputs=x, title=optim.cost.problem.model.name)"
]
},
{
Expand Down
2 changes: 1 addition & 1 deletion examples/notebooks/multi_optimiser_identification.ipynb
Original file line number Diff line number Diff line change
Expand Up @@ -599,7 +599,7 @@
],
"source": [
"for optim, x in zip(optims, xs):\n",
" pybop.quick_plot(optim.cost.problem, parameter_values=x, title=optim.name())"
" pybop.quick_plot(optim.cost.problem, inputs=x, title=optim.name())"
]
},
{
Expand Down
4 changes: 2 additions & 2 deletions examples/notebooks/optimiser_calibration.ipynb
Original file line number Diff line number Diff line change
Expand Up @@ -404,7 +404,7 @@
}
],
"source": [
"pybop.quick_plot(problem, parameter_values=x, title=\"Optimised Comparison\");"
"pybop.quick_plot(problem, inputs=x, title=\"Optimised Comparison\");"
]
},
{
Expand Down Expand Up @@ -723,7 +723,7 @@
"source": [
"optim = pybop.GradientDescent(cost, sigma0=0.0115)\n",
"x, final_cost = optim.run()\n",
"pybop.quick_plot(problem, parameter_values=x, title=\"Optimised Comparison\");"
"pybop.quick_plot(problem, inputs=x, title=\"Optimised Comparison\");"
]
},
{
Expand Down
4 changes: 2 additions & 2 deletions examples/notebooks/pouch_cell_identification.ipynb
Original file line number Diff line number Diff line change
Expand Up @@ -517,7 +517,7 @@
}
],
"source": [
"pybop.quick_plot(problem, parameter_values=x, title=\"Optimised Comparison\");"
"pybop.quick_plot(problem, inputs=x, title=\"Optimised Comparison\");"
]
},
{
Expand Down Expand Up @@ -1539,7 +1539,7 @@
}
],
"source": [
"sol = problem.evaluate(x)\n",
"sol = problem.evaluate(parameters.as_dict(x))\n",
"\n",
"go.Figure(\n",
" [\n",
Expand Down
2 changes: 1 addition & 1 deletion examples/notebooks/spm_AdamW.ipynb
Original file line number Diff line number Diff line change
Expand Up @@ -437,7 +437,7 @@
}
],
"source": [
"pybop.quick_plot(problem, parameter_values=x, title=\"Optimised Comparison\");"
"pybop.quick_plot(problem, inputs=x, title=\"Optimised Comparison\");"
]
},
{
Expand Down
4 changes: 2 additions & 2 deletions examples/notebooks/spm_electrode_design.ipynb
Original file line number Diff line number Diff line change
Expand Up @@ -277,7 +277,7 @@
"source": [
"x, final_cost = optim.run()\n",
"print(\"Estimated parameters:\", x)\n",
"print(f\"Initial gravimetric energy density: {-cost(cost.x0):.2f} Wh.kg-1\")\n",
"print(f\"Initial gravimetric energy density: {-cost(optim.x0):.2f} Wh.kg-1\")\n",
"print(f\"Optimised gravimetric energy density: {-final_cost:.2f} Wh.kg-1\")"
]
},
Expand Down Expand Up @@ -329,7 +329,7 @@
"source": [
"if cost.update_capacity:\n",
" problem._model.approximate_capacity(x)\n",
"pybop.quick_plot(problem, parameter_values=x, title=\"Optimised Comparison\");"
"pybop.quick_plot(problem, inputs=x, title=\"Optimised Comparison\");"
]
},
{
Expand Down
2 changes: 1 addition & 1 deletion examples/scripts/BPX_spm.py
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,7 @@
print("Estimated parameters:", x)

# Plot the timeseries output
pybop.quick_plot(problem, parameter_values=x, title="Optimised Comparison")
pybop.quick_plot(problem, inputs=x, title="Optimised Comparison")

# Plot convergence
pybop.plot_convergence(optim)
Expand Down
2 changes: 1 addition & 1 deletion examples/scripts/ecm_CMAES.py
Original file line number Diff line number Diff line change
Expand Up @@ -89,7 +89,7 @@
pybop.plot_dataset(dataset)

# Plot the timeseries output
pybop.quick_plot(problem, parameter_values=x, title="Optimised Comparison")
pybop.quick_plot(problem, inputs=x, title="Optimised Comparison")

# Plot convergence
pybop.plot_convergence(optim)
Expand Down
9 changes: 5 additions & 4 deletions examples/scripts/exp_UKF.py
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,8 @@
sigma = 1e-2
t_eval = np.linspace(0, 20, 10)
model.parameters = parameters
values = model.predict(t_eval=t_eval, inputs=parameters.true_value())
true_inputs = parameters.as_dict("true")
values = model.predict(t_eval=t_eval, inputs=true_inputs)
values = values["2y"].data
corrupt_values = values + np.random.normal(0, sigma, len(t_eval))

Expand All @@ -41,7 +42,7 @@
model.build(parameters=parameters)
simulator = pybop.Observer(parameters, model, signal=["2y"])
simulator._time_data = t_eval
measurements = simulator.evaluate(parameters.true_value())
measurements = simulator.evaluate(true_inputs)

# Verification step: Compare by plotting
go = pybop.PlotlyManager().go
Expand Down Expand Up @@ -84,7 +85,7 @@
)

# Verification step: Find the maximum likelihood estimate given the true parameters
estimation = observer.evaluate(parameters.true_value())
estimation = observer.evaluate(true_inputs)

# Verification step: Add the estimate to the plot
line4 = go.Scatter(
Expand All @@ -102,7 +103,7 @@
print("Estimated parameters:", x)

# Plot the timeseries output (requires model that returns Voltage)
pybop.quick_plot(observer, parameter_values=x, title="Optimised Comparison")
pybop.quick_plot(observer, inputs=x, title="Optimised Comparison")

# Plot convergence
pybop.plot_convergence(optim)
Expand Down
2 changes: 1 addition & 1 deletion examples/scripts/gitt.py
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,7 @@
print("Estimated parameters:", x)

# Plot the timeseries output
pybop.quick_plot(problem, parameter_values=x, title="Optimised Comparison")
pybop.quick_plot(problem, inputs=x, title="Optimised Comparison")

# Plot convergence
pybop.plot_convergence(optim)
Expand Down
2 changes: 1 addition & 1 deletion examples/scripts/spm_AdamW.py
Original file line number Diff line number Diff line change
Expand Up @@ -68,7 +68,7 @@ def noise(sigma):
print("Estimated parameters:", x)

# Plot the timeseries output
pybop.quick_plot(problem, parameter_values=x, title="Optimised Comparison")
pybop.quick_plot(problem, inputs=x, title="Optimised Comparison")

# Plot convergence
pybop.plot_convergence(optim)
Expand Down
2 changes: 1 addition & 1 deletion examples/scripts/spm_CMAES.py
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,7 @@
pybop.plot_dataset(dataset)

# Plot the timeseries output
pybop.quick_plot(problem, parameter_values=x, title="Optimised Comparison")
pybop.quick_plot(problem, inputs=x, title="Optimised Comparison")

# Plot convergence
pybop.plot_convergence(optim)
Expand Down
2 changes: 1 addition & 1 deletion examples/scripts/spm_IRPropMin.py
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@
print("Estimated parameters:", x)

# Plot the timeseries output
pybop.quick_plot(problem, parameter_values=x, title="Optimised Comparison")
pybop.quick_plot(problem, inputs=x, title="Optimised Comparison")

# Plot convergence
pybop.plot_convergence(optim)
Expand Down
2 changes: 1 addition & 1 deletion examples/scripts/spm_MAP.py
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,7 @@
print("Estimated parameters:", x)

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

# Plot convergence
pybop.plot_convergence(optim)
Expand Down
2 changes: 1 addition & 1 deletion examples/scripts/spm_MLE.py
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,7 @@
print("Estimated parameters:", x)

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

# Plot convergence
pybop.plot_convergence(optim)
Expand Down
2 changes: 1 addition & 1 deletion examples/scripts/spm_NelderMead.py
Original file line number Diff line number Diff line change
Expand Up @@ -68,7 +68,7 @@ def noise(sigma):
print("Estimated parameters:", x)

# Plot the timeseries output
pybop.quick_plot(problem, parameter_values=x, title="Optimised Comparison")
pybop.quick_plot(problem, inputs=x, title="Optimised Comparison")

# Plot convergence
pybop.plot_convergence(optim)
Expand Down
2 changes: 1 addition & 1 deletion examples/scripts/spm_SNES.py
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@
print("Estimated parameters:", x)

# Plot the timeseries output
pybop.quick_plot(problem, parameter_values=x, title="Optimised Comparison")
pybop.quick_plot(problem, inputs=x, title="Optimised Comparison")

# Plot convergence
pybop.plot_convergence(optim)
Expand Down
2 changes: 1 addition & 1 deletion examples/scripts/spm_UKF.py
Original file line number Diff line number Diff line change
Expand Up @@ -68,7 +68,7 @@
print("Estimated parameters:", x)

# Plot the timeseries output (requires model that returns Voltage)
pybop.quick_plot(observer, parameter_values=x, title="Optimised Comparison")
pybop.quick_plot(observer, inputs=x, title="Optimised Comparison")

# # Plot convergence
# pybop.plot_convergence(optim)
Expand Down
2 changes: 1 addition & 1 deletion examples/scripts/spm_XNES.py
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@
print("Estimated parameters:", x)

# Plot the timeseries output
pybop.quick_plot(problem, parameter_values=x, title="Optimised Comparison")
pybop.quick_plot(problem, inputs=x, title="Optimised Comparison")

# Plot convergence
pybop.plot_convergence(optim)
Expand Down
2 changes: 1 addition & 1 deletion examples/scripts/spm_descent.py
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,7 @@
print("Estimated parameters:", x)

# Plot the timeseries output
pybop.quick_plot(problem, parameter_values=x, title="Optimised Comparison")
pybop.quick_plot(problem, inputs=x, title="Optimised Comparison")

# Plot convergence
pybop.plot_convergence(optim)
Expand Down
2 changes: 1 addition & 1 deletion examples/scripts/spm_pso.py
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@
print("Estimated parameters:", x)

# Plot the timeseries output
pybop.quick_plot(problem, parameter_values=x, title="Optimised Comparison")
pybop.quick_plot(problem, inputs=x, title="Optimised Comparison")

# Plot convergence
pybop.plot_convergence(optim)
Expand Down
2 changes: 1 addition & 1 deletion examples/scripts/spm_scipymin.py
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@
print("Estimated parameters:", x)

# Plot the timeseries output
pybop.quick_plot(problem, parameter_values=x, title="Optimised Comparison")
pybop.quick_plot(problem, inputs=x, title="Optimised Comparison")

# Plot convergence
pybop.plot_convergence(optim)
Expand Down
6 changes: 3 additions & 3 deletions examples/scripts/spme_max_energy.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@
# NOTE: This script can be easily adjusted to consider the volumetric
# (instead of gravimetric) energy density by changing the line which
# defines the cost and changing the output to:
# print(f"Initial volumetric energy density: {cost(cost.x0):.2f} Wh.m-3")
# print(f"Initial volumetric energy density: {cost(optim.x0):.2f} Wh.m-3")
# print(f"Optimised volumetric energy density: {final_cost:.2f} Wh.m-3")

# Define parameter set and model
Expand Down Expand Up @@ -54,13 +54,13 @@
# Run optimisation
x, final_cost = optim.run()
print("Estimated parameters:", x)
print(f"Initial gravimetric energy density: {cost(cost.x0):.2f} Wh.kg-1")
print(f"Initial gravimetric energy density: {cost(optim.x0):.2f} Wh.kg-1")
print(f"Optimised gravimetric energy density: {final_cost:.2f} Wh.kg-1")

# Plot the timeseries output
if cost.update_capacity:
problem._model.approximate_capacity(x)
pybop.quick_plot(problem, parameter_values=x, title="Optimised Comparison")
pybop.quick_plot(problem, inputs=x, title="Optimised Comparison")

# Plot the cost landscape with optimisation path
if len(x) == 2:
Expand Down
9 changes: 4 additions & 5 deletions examples/standalone/cost.py
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@ def __init__(self, problem=None):
)
self.x0 = self.parameters.initial_value()

def _evaluate(self, x, grad=None):
def _evaluate(self, inputs, grad=None):
"""
Calculate the cost for a given parameter value.

Expand All @@ -52,9 +52,8 @@ def _evaluate(self, x, grad=None):

Parameters
----------
x : array-like
A one-element array containing the parameter value for which to
evaluate the cost.
inputs : Dict
The parameters for which to evaluate the cost.
grad : array-like, optional
Unused parameter, present for compatibility with gradient-based
optimizers.
Expand All @@ -65,4 +64,4 @@ def _evaluate(self, x, grad=None):
The calculated cost value for the given parameter.
"""

return x[0] ** 2 + 42
return inputs["x"] ** 2 + 42
Loading
Loading