From 0bf300903644814ed92653f9800a796406e21f84 Mon Sep 17 00:00:00 2001 From: Grimm Date: Thu, 22 Aug 2024 12:01:24 +0100 Subject: [PATCH 1/5] Create creating_a_model.ipynb Create a simple script to create a model --- examples/notebooks/creating_a_model.ipynb | 109 ++++++++++++++++++++++ 1 file changed, 109 insertions(+) create mode 100644 examples/notebooks/creating_a_model.ipynb diff --git a/examples/notebooks/creating_a_model.ipynb b/examples/notebooks/creating_a_model.ipynb new file mode 100644 index 00000000..a2ac0a0f --- /dev/null +++ b/examples/notebooks/creating_a_model.ipynb @@ -0,0 +1,109 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": { + "id": "expmkveO04pw" + }, + "source": [ + "## Creating a Model\n", + "\n", + "In this notebook, we create a single particle model. This is achieved using a predefined data set introduced in Marquis et al. [[1]](https://doi.org/10.1149/1945-7111/abbce4) \n", + "\n", + "### Setting up the Environment\n", + "\n", + "Before we begin, we need to ensure that we have all the necessary tools. We will install PyBOP and upgrade dependencies:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "X87NUGPW04py", + "outputId": "0d785b07-7cff-4aeb-e60a-4ff5a669afbf" + }, + "outputs": [], + "source": [ + "%pip install --upgrade pip ipywidgets -q\n", + "%pip install pybop -q" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "jAvD5fk104p0" + }, + "source": [ + "### Importing Libraries\n", + "\n", + "With the environment set up, we can now import PyBOP:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "SQdt4brD04p1" + }, + "outputs": [], + "source": [ + "import pybop" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "5XU-dMtU04p2" + }, + "source": [ + "## Generating Synthetic Data\n", + "\n", + "To demonstrate parameter estimation, we first need some data. We will generate synthetic data using a forward model, which requires defining a parameter set and the model itself.\n", + "\n", + "### Defining Parameters and Model\n", + "\n", + "We start by creating an example parameter set and then instantiate the single-particle model (SPM):" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "parameter_set = pybop.ParameterSet.pybamm(\"Marquis2019\")\n", + "\n", + "model = pybop.lithium_ion.SPM(\n", + " parameter_set=parameter_set\n", + ")" + ] + } + ], + "metadata": { + "colab": { + "provenance": [] + }, + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.11.9" + } + }, + "nbformat": 4, + "nbformat_minor": 4 +} From 723767358321a9c9e1272d9028f87fd9580c5d3d Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Thu, 22 Aug 2024 11:08:55 +0000 Subject: [PATCH 2/5] style: pre-commit fixes --- examples/notebooks/creating_a_model.ipynb | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/examples/notebooks/creating_a_model.ipynb b/examples/notebooks/creating_a_model.ipynb index a2ac0a0f..39eebf37 100644 --- a/examples/notebooks/creating_a_model.ipynb +++ b/examples/notebooks/creating_a_model.ipynb @@ -76,9 +76,7 @@ "source": [ "parameter_set = pybop.ParameterSet.pybamm(\"Marquis2019\")\n", "\n", - "model = pybop.lithium_ion.SPM(\n", - " parameter_set=parameter_set\n", - ")" + "model = pybop.lithium_ion.SPM(parameter_set=parameter_set)" ] } ], From f580fc85c712f09edd0cd4a23f7af612bd18f5ac Mon Sep 17 00:00:00 2001 From: Grimm Date: Mon, 2 Sep 2024 14:48:05 +0100 Subject: [PATCH 3/5] Update creating_a_model.ipynb added the possibility to look at the discharge voltage curve of the model. --- examples/notebooks/creating_a_model.ipynb | 59 +++++++++++++++++++++-- 1 file changed, 54 insertions(+), 5 deletions(-) diff --git a/examples/notebooks/creating_a_model.ipynb b/examples/notebooks/creating_a_model.ipynb index a2ac0a0f..7bab1a09 100644 --- a/examples/notebooks/creating_a_model.ipynb +++ b/examples/notebooks/creating_a_model.ipynb @@ -17,7 +17,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 5, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -25,7 +25,16 @@ "id": "X87NUGPW04py", "outputId": "0d785b07-7cff-4aeb-e60a-4ff5a669afbf" }, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Note: you may need to restart the kernel to use updated packages.\n", + "Note: you may need to restart the kernel to use updated packages.\n" + ] + } + ], "source": [ "%pip install --upgrade pip ipywidgets -q\n", "%pip install pybop -q" @@ -44,7 +53,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 6, "metadata": { "id": "SQdt4brD04p1" }, @@ -70,7 +79,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 7, "metadata": {}, "outputs": [], "source": [ @@ -80,6 +89,46 @@ " parameter_set=parameter_set\n", ")" ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Testing the Model\n", + "Having the model, we can now have a look at its voltage discharge curve to verify that it is working. The discharge curve is evaluated on the time interval specified by t_eval. " + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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kY4dO/L999/z3nvvGT2gX7p0iSVLljBgwIBSH2bvBX9/fywsLNi0aROvvvrqbcvXq1cPtVpNYmJiud/8N23alKNHj+Ln51fi+gYNGqDT6YiOjjY0N7qZmVnhLN9lvc2+Ob7Vq1cbPfDu2LEDa2vrYklNEZVKxcCBA5k/fz5qtZo+ffpgaflf53wzM7Nix27atCkrVqzAxcUFGxub28ZV3tgsLCzo2bMnS5Ys4dSpUwQEBNCsWTOj4x4/frzUa3k7O3fuNDy437hxgxMnThiartWrV49t27YZld+xYwcBAQGGmozSrkVZ97c8ynOPr1+/TlxcHHPmzOHJJ58EKBavKJk0NxJCCFFpmjZtirmlOZkpmcXWZZQxoZoo26xZs8jNzaVTp05s2bKFc+fOERkZSceOHfHw8ChzVKF7wdzcnA8//JCRI0camgzt3LmTefPmlVje2tqaESNG8N5777FgwQLi4+M5cOAA3333HQsWLChxmw8//JB///2Xt956i5iYGE6ePMm6det45513gMKRbwYOHMigQYNYu3YtZ86cISoqipUrVwJQq1YtFAoF69ev5+rVq2RklN45fsiQIZw7d4533nmHY8eO8euvv/LZZ5/x/vvvF+uPcLNXX32Vf/75hz///LNYUyNvb28OHTrE8ePHuXbtGvn5+YSGhuLk5ET37t3ZunUrZ86cITo6mmHDhpXarKm8sYWGhvL777/z008/0a9fP6N9jBkzhoULFzJ27FiOHj1KXFwcK1as4NNPPy313G42fvx4Nm3axJEjRwgLC8PJyclQqzV8+HA2bdrEhAkTOHHiBAsWLGDWrFmMGDHC6Fps2bKFCxcucO3aNeD297c8XFxcsLCwIDIyksuXL5OamlqsTNEoUj/88AOnTp3in3/+4f333y/3MR5lkiQIIYSoNNOmTWPn6Z00f755sXVpupKHkxS35+/vz969e/H19aV37974+vry2muv0bZtW/79919DJ937afTo0QwfPpwxY8YQGBhI7969y2wrPmHCBMaMGcOkSZMIDAykU6dO/Pbbb4b24bdq2LAh0dHRnDx5kieffJImTZowevRo3N3/m7QvPDycF154gSFDhlC3bl0GDx5sGELTw8ODcePG8dFHH+Hq6lps1JybeXh48Mcff7B7924aNWrEG2+8wSuvvHLbh2h/f39atmxJnTp1eOyx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VM7IkSP11Vdf6eeffy7zu3nz5um2225T+/btTagMwPWMkAAAqHaBXoHKu5CnwoJC2748N3cTK6o5/vSnPykkJEQLFiyw25+bm6vly5dr5MiRWrlypVq3bi1vb29FRETo3XffrfD5IiIiJEn9+/eXxWKxbaempqpv375q0KCB/Pz81LFjR3355Zd2x548eVJ9+vSRj4+Pbr75Zi1ZsqTMpUwZGRl67LHHFBISooCAAHXr1k3fffddVXQFACciJAAAql2rlq301r1v6Zcjv9j25bpQSMjJyanwcfHixUq3zcvLq1RbR3h4eGjo0KFasGCBDOO3RehWrFihS5cuKTY2Vg8++KAGDRqkvXv3aurUqXrppZfKhIpiu3fvliTNnz9fJ0+etG1nZ2fr3nvv1ZdffqmkpCT16tVLcXFxSk9Ptx07dOhQnThxQvHx8Vq5cqX+/ve/68yZM7bfG4ahPn366NSpU1q3bp0SExPVvn17de/eXb/+ar/qNgDX5mF2AQCA65+fn58kKftstlQ02ZFy3Vzne6ri+spz77336j//+Y9tOyQkRLm5ueW27dKli+Lj423bEREROnv2bJl2JT/sV8aIESP09ttvKz4+Xl27dpVUdKnRgAEDNGPGDHXv3l0vvfSSJKlFixZKSUnR22+/reHDh5d5rvr160uSgoKCFBoaatvftm1btW3b1rb92muvafXq1Vq7dq2efPJJHThwQF9++aV2796tmJgYSdLcuXPVvHlz2zGbN2/W3r17debMGXl7e0uS3nnnHa1Zs0affvqpHnvsMYfeNwDzuM4ZGgBw3SpeUC3rbJZtX57FrGpqnlatWqlTp06aN2+epKJLgxISEjRixAjt379fnTt3tmvfuXNn/fjjjyosLCzv6cqVk5Oj5557TlFRUQoKCpKfn58OHDhgG0k4ePCgPDw87O5/iIyMVJ06dWzbiYmJys7OVt26deXn52d7pKWlKTU19fd0AQAnYyQBAFDtbrrpJkmuGxKys7Mr/J27u/1lUSUvrynNrdToyJEjR35XXSWNHDlSTz75pGbPnq358+erSZMm6t69uwzDkMVi35mOjlRI0oQJE7Rhwwa98847ioyMlI+Pjx544AFdunTpis9Zcr/ValVYWJjdaEqxoKAgh2sCYB5CAgCg2pUXEnLl+AfZ6uLr62t626t58MEHNX78eC1ZskQLFy7Uo48+KovFoqioKG3bts2u7Y4dO9SiRYsyAaeYp6dnmVGGhIQEDR8+XP3795dUFJxKhpxWrVqpoKBASUlJ6tChgyTpp59+0oULF2xt2rdvr1OnTsnDw8N2QzSAmonLjQAA1a68y41yjcpfCoOi+yYGDhyoyZMn68SJE7b7DZ555hlt2rRJr776qg4dOqSFCxfqww8/1LPPPlvhc0VERGjTpk06deqUzp8/L6no0qFVq1YpOTlZ3333nR5++GFZrVbbMa1atVKPHj302GOPadeuXUpKStJjjz0mHx8f20hGjx49FBsbq379+mnDhg06cuSIduzYoRdffFF79uypvs4BUOUICQCAalfu5UYiJDhq5MiROn/+vHr06KHGjRtLKvr2/l//+peWLVumW2+9VS+//LJeeeWVcm9aLvbuu+9q48aNatSokdq1aydJeu+991SnTh116tRJcXFx6tWrV5n1FxYtWqQGDRrorrvuUv/+/fXoo4/K399ftWrVklS0SNu6det01113acSIEWrRooUGDRqkI0eOqEGDBtXTKQCqBZcbAQCqXfPmzdU7rrdy6v42/WeutcDEimqm2NjYcu8NuP/++3X//fdXeFzpeyPi4uIUFxdnty8iIkJfffWV3b6xY8fabYeFhWndunW27WPHjunMmTOKjIy07fP399esWbM0a9asq74fAK7LoZGEOXPmKDo6WgEBAQoICFBsbKw+//zzCttv27ZNnTt3Vt26deXj46NWrVrpvffe+91FAwBqltatW2vVqlXq9lg3274CWXXZ4jprJeDqvvrqK61du1ZpaWnasWOHBg0apIiICN11111mlwagijk0khAeHq4333zT9o3BwoUL1bdvXyUlJal169Zl2vv6+urJJ59UdHS0fH19tW3bNo0ePVq+vr7MlQwAN5haHrXk6eapy9bLtn25nt4KvFT+mgNwPZcvX9bkyZN1+PBh+fv7q1OnTlq8eLE8PT3NLg1AFXMoJJQemnz99dc1Z84c7dy5s9yQ0K5dO9u1jlLRUOaqVauUkJBASACAG4xhGHLLc9NlXZand9GHyjwPQkJN0qtXL/Xq1cvsMgA4wTXfuFxYWKhly5YpJydHsbGxlTomKSlJO3bsUJcuXa7YLj8/X5mZmXYPAEDNFhsbq0ldJyktMc22L9edW+MAwBU5fHbeu3evYmNjdfHi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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/plain": [ + "(
, )" + ] + }, + "execution_count": 15, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "t_eval = [0, 3700]\n", + "solution = model.predict([],t_eval)\n", + "solution.plot_voltage_components()" + ] } ], "metadata": { @@ -101,7 +150,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.11.9" + "version": "3.11.5" } }, "nbformat": 4, From 990fc04b0c515de4f3ec199851dfe19c4fc52776 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Mon, 2 Sep 2024 13:48:36 +0000 Subject: [PATCH 4/5] style: pre-commit fixes --- examples/notebooks/creating_a_model.ipynb | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/examples/notebooks/creating_a_model.ipynb b/examples/notebooks/creating_a_model.ipynb index 9394286d..7c781e90 100644 --- a/examples/notebooks/creating_a_model.ipynb +++ b/examples/notebooks/creating_a_model.ipynb @@ -17,7 +17,7 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": null, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -53,7 +53,7 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": null, "metadata": { "id": "SQdt4brD04p1" }, @@ -79,7 +79,7 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -98,7 +98,7 @@ }, { "cell_type": "code", - "execution_count": 15, + "execution_count": null, "metadata": {}, "outputs": [ { @@ -117,14 +117,14 @@ "(
, )" ] }, - "execution_count": 15, + "execution_count": null, "metadata": {}, "output_type": "execute_result" } ], "source": [ "t_eval = [0, 3700]\n", - "solution = model.predict([],t_eval)\n", + "solution = model.predict([], t_eval)\n", "solution.plot_voltage_components()" ] } From 3eef641f815615549fb5c0719dd7e033afd18183 Mon Sep 17 00:00:00 2001 From: Brady Planden Date: Mon, 9 Sep 2024 11:04:09 +0100 Subject: [PATCH 5/5] examples: updates to creating_a_model.ipynb --- examples/notebooks/creating_a_model.ipynb | 54 +++++++++-------------- 1 file changed, 20 insertions(+), 34 deletions(-) diff --git a/examples/notebooks/creating_a_model.ipynb b/examples/notebooks/creating_a_model.ipynb index 7c781e90..2dfe66af 100644 --- a/examples/notebooks/creating_a_model.ipynb +++ b/examples/notebooks/creating_a_model.ipynb @@ -8,11 +8,9 @@ "source": [ "## Creating a Model\n", "\n", - "In this notebook, we create a single particle model. This is achieved using a predefined data set introduced in Marquis et al. [[1]](https://doi.org/10.1149/1945-7111/abbce4) \n", + "In this notebook, we create and solve a single particle model (SPM). This is achieved using a predefined parameter set introduced in Marquis et al. [[1]](https://doi.org/10.1149/1945-7111/abbce4) \n", "\n", - "### Setting up the Environment\n", - "\n", - "Before we begin, we need to ensure that we have all the necessary tools. We will install PyBOP and upgrade dependencies:" + "Before we begin, we need to ensure that we have all the necessary tools. We will install PyBOP and upgrade dependencies." ] }, { @@ -37,29 +35,11 @@ ], "source": [ "%pip install --upgrade pip ipywidgets -q\n", - "%pip install pybop -q" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "jAvD5fk104p0" - }, - "source": [ - "### Importing Libraries\n", + "%pip install pybop -q\n", "\n", - "With the environment set up, we can now import PyBOP:" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "SQdt4brD04p1" - }, - "outputs": [], - "source": [ - "import pybop" + "import pybop\n", + "\n", + "pybop.PlotlyManager().pio.renderers.default = \"notebook_connected\"" ] }, { @@ -68,13 +48,11 @@ "id": "5XU-dMtU04p2" }, "source": [ - "## Generating Synthetic Data\n", - "\n", - "To demonstrate parameter estimation, we first need some data. We will generate synthetic data using a forward model, which requires defining a parameter set and the model itself.\n", + "## Creating a Model\n", "\n", - "### Defining Parameters and Model\n", + "PyBOP offers the both forward emperical and physics-based forward models. These are provided by PyBaMM, with PyBOP adding wrappers on the underlying classes to reduce complexity and improve stability with parameter inference and design optimisation. Likewise, PyBOP provides a light wrapper on the PyBaMM parameter sets, with user-defined parameters available through the same `pybop.ParameterSet` class.\n", "\n", - "We start by creating an example parameter set and then instantiate the single-particle model (SPM):" + "Let's construct the parameter set and then the single-particle model (SPM):" ] }, { @@ -84,16 +62,22 @@ "outputs": [], "source": [ "parameter_set = pybop.ParameterSet.pybamm(\"Marquis2019\")\n", - "\n", "model = pybop.lithium_ion.SPM(parameter_set=parameter_set)" ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now that the model is constructed with the Maquis parameter set, we can use the `model.predict` method as a light wrapper on the `PyBaMM.Simulation` class. This is the recommended way to generate synthetic data, but not for parameter inference as the performance cost of constructing the `Simulation` class is high. For parameter inference, `model.simulate` and `model.simulateS1` offer a performant way to solve the forward model with and without sensitivities respectively." + ] + }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Testing the Model\n", - "Having the model, we can now have a look at its voltage discharge curve to verify that it is working. The discharge curve is evaluated on the time interval specified by t_eval. " + "Having constructed the model, we can now have a look at its voltage discharge curve to verify that it is working. The discharge curve is evaluated on the time interval specified by `t_eval`. `model.predict` returns the `PyBaMM.solution` object with all of its functionality. As we are only working with the forward model, PyBaMM plotting methods will be used; however, when performing parameter inference or design optimisation, PyBOP plotting methods are recommended." ] }, { @@ -124,7 +108,9 @@ ], "source": [ "t_eval = [0, 3700]\n", - "solution = model.predict([], t_eval)\n", + "solution = model.predict([], t_eval) # No inputs i.e []\n", + "\n", + "# Plot with PyBaMM\n", "solution.plot_voltage_components()" ] }