{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Circuit Generation" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "In this notebook, we demonstrate how to generate a pool of equivalent circuit models from electrochemical impedance spectroscopy (EIS) measurements that best fit the data." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Set up the environment" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "AutoEIS relies on `EquivalentCircuits.jl` package to perform the EIS analysis. The package is not written in Python, so we need to install it first. AutoEIS ships with `julia_helpers` module that helps to install and manage Julia dependencies with minimal user interaction. For convenience, installing Julia and the required packages is done automatically when you import `autoeis` for the first time. If you have Julia installed already (discoverable in system PATH), it'll get detected and used, otherwise, it'll be installed automatically." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", "\n", "Note\n", "\n", "If this is the first time you're importing AutoEIS, executing the next cell will take a while, outputting a lot of logs. Re-run the cell to get rid of the logs.\n", "\n", "
" ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "execution": { "iopub.execute_input": "2025-08-25T23:17:13.935200Z", "iopub.status.busy": "2025-08-25T23:17:13.935028Z", "iopub.status.idle": "2025-08-25T23:17:15.793989Z", "shell.execute_reply": "2025-08-25T23:17:15.793311Z" } }, "outputs": [], "source": [ "import matplotlib.pyplot as plt\n", "\n", "import autoeis as ae\n", "\n", "ae.visualization.set_plot_style()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Load EIS data" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Once the environment is set up, we can load the EIS data. You can use [`pyimpspec`](https://vyrjana.github.io/pyimpspec/guide_data.html) to load EIS data from a variety of popular formats. Eventually, AutoEIS requires two arrays: `Z` and `freq`. `Z` is a complex impedance array, and `freq` is a frequency array. Both arrays must be 1D and have the same length. The impedance array must be in Ohms, and the frequency array must be in Hz.\n", "\n", "For convenience, we provide a function `load_test_dataset()` in `autoeis.io` to load a test dataset. The function returns a tuple of `freq` and `Z`." ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "execution": { "iopub.execute_input": "2025-08-25T23:17:15.798079Z", "iopub.status.busy": "2025-08-25T23:17:15.796947Z", "iopub.status.idle": "2025-08-25T23:17:15.839292Z", "shell.execute_reply": "2025-08-25T23:17:15.838695Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\u001b[2;36m[23:17:15]\u001b[0m\u001b[2;36m \u001b[0m\u001b[33mWARNING \u001b[0m \u001b[1;36m10\u001b[0m% of data filtered out. \n" ] } ], "source": [ "freq, Z = ae.io.load_test_dataset(preprocess=True)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", "\n", "Note\n", "\n", "If your EIS data is stored as text, you can easily load them using `numpy.loadtxt`. See NumPy's documentation for more details.\n", "\n", "
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Let's take a look at the test dataset before we proceed:" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "execution": { "iopub.execute_input": "2025-08-25T23:17:15.841336Z", "iopub.status.busy": "2025-08-25T23:17:15.841214Z", "iopub.status.idle": "2025-08-25T23:17:16.201787Z", "shell.execute_reply": "2025-08-25T23:17:16.199899Z" } }, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "ae.visualization.plot_impedance_combo(freq, Z);" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Generate equivalent circuits\n", "\n", "Now that we have loaded the EIS data, we can generate a pool of candidate equivalent circuits using the `generate_equivalent_circuits` function. The function takes the impedance data and frequency as input and returns a list of equivalent circuits. It also takes many optional arguments to control the circuit generation process. The most important ones are:\n", "\n", "- `iters`: Number of circuits to generate.\n", "- `complexity`: Maximum number of elements in a circuit.\n", "- `terminals`: Type of circuit components to use (e.g., R, C, L, or P).\n", "- `parallel`: Whether to run the circuit generation in parallel.\n", "- `tol`: Tolerance for accepting a circuit as a good fit.\n", "- `seed`: Random seed for reproducibility.\n", "\n", "The function uses a gene expression programming (GEP) algorithm to generate the circuits. The GEP algorithm is a genetic algorithm that evolves circuits by combining and mutating genes. The algorithm starts with a population of random circuits and evolves them over many generations to find the best circuits that fit the data. The following parameters control the GEP algorithm:\n", "\n", "- `generations`: Number of generations to run the genetic algorithm.\n", "- `population_size`: Number of circuits in the population for\n", "\n", "The default values for these parameters are usually good enough for most cases. However, you can adjust them to get better results (e.g., increase both arguments if you're not satisfied with the generated circuits, or decrease them if you want to speed up the process)." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", "\n", "Reproducibility\n", "\n", "Since the circuit generation process is stochastic, you may get different results each time you run the function. To get reproducible results, you can set the random seed using the `seed` argument. That said, a successful circuit generation process should yield similar results after enough iterations, even with different seeds.\n", "\n", "
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", "\n", "Runtime\n", "\n", "Circuit generation is a lengthy process. It may take one minute per iteration on a modern CPU. We recommend generating at least 50 circuits to get a good pool of candidate circuits, which may take about an hour.\n", "\n", "
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", "\n", "Note\n", "\n", "By default, `terminals` is set to `\"RLP\"`, i.e., the algorithm searches for circuits with resistors, inductors, and constant-phase elements. You can add capacitors by setting `terminals=\"RCLP\"`, but since a capacitor is a special case of a constant-phase element, it's not necessary, and it makes the search less efficient.\n", "\n", "
" ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "execution": { "iopub.execute_input": "2025-08-25T23:17:16.205864Z", "iopub.status.busy": "2025-08-25T23:17:16.205679Z", "iopub.status.idle": "2025-08-25T23:32:23.337909Z", "shell.execute_reply": "2025-08-25T23:32:23.335826Z" } }, "outputs": [ { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "b30dad2e1d404089932a22756eccb82a", "version_major": 2, "version_minor": 0 }, "text/plain": [ "Generating Candidate ECMs: 0%| | 0/24 [00:00\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
circuitstringParameters
0[P1-R2-P3,R4]{'P1w': 1000000000.0, 'P1n': 0.999918833803624...
1[P1,R2]-[[[P3,R4],L5],R6]{'P1w': 1.9864878871165917e-06, 'P1n': 0.93501...
2R1-[P2,[P3-R4,P5-R6]]{'R1': 139.14150285865222, 'P2w': 1.9868429856...
\n", "" ], "text/plain": [ " circuitstring \\\n", "0 [P1-R2-P3,R4] \n", "1 [P1,R2]-[[[P3,R4],L5],R6] \n", "2 R1-[P2,[P3-R4,P5-R6]] \n", "\n", " Parameters \n", "0 {'P1w': 1000000000.0, 'P1n': 0.999918833803624... \n", "1 {'P1w': 1.9864878871165917e-06, 'P1n': 0.93501... \n", "2 {'R1': 139.14150285865222, 'P2w': 1.9868429856... " ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "kwargs = {\n", " \"iters\": 24,\n", " \"complexity\": 12,\n", " \"population_size\": 100,\n", " \"generations\": 30,\n", " \"terminals\": \"RLP\",\n", " \"tol\": 1e-2,\n", " \"parallel\": True,\n", "}\n", "circuits_unfiltered = ae.core.generate_equivalent_circuits(freq, Z, **kwargs)\n", "circuits_unfiltered" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", "\n", "Convergence\n", "\n", "The Circuit generation algorithm is sensitive to the `tol` parameter, meaning that the order of magnitude of the `tol` needs to be proportional to the order of magnitude of the impedance data. There's no one-size-fits-all value for `tol`, and we're trying to make the algorithm `tol`-agnostic in future releases. For now, we've hacked a heuristic that internally scales the `tol` based on the impedance data. Nevertheless, you may still need to adjust the `tol` if you end up with no circuits (increase `tol`) or too many circuits (decrease `tol`). The default value is `1e-2`. When increasing or decreasing `tol`, try doubling or halving the value to see if it helps.\n", "\n", "
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Filter candidate equivalent circuits\n", "\n", "Note that all these circuits generated by the GEP process probably fit the data well, but they may not be physically meaningful. Therefore, we need to filter them to find the ones that are most plausible. AutoEIS uses \"statistical plausibility\" as a proxy for gauging \"physical plausibility\". To this end, AutoEIS provides a function to filter the candidate circuits based on some heuristics (read our [paper](https://doi.org/10.1149/1945-7111/aceab2) for the exact steps and the supporting rationale)." ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "execution": { "iopub.execute_input": "2025-08-25T23:32:23.353633Z", "iopub.status.busy": "2025-08-25T23:32:23.353224Z", "iopub.status.idle": "2025-08-25T23:32:23.654214Z", "shell.execute_reply": "2025-08-25T23:32:23.652966Z" } }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
circuitstringParameters
0R1-[P2,[P3-R4,P5-R6]]{'R1': 139.14150285865222, 'P2w': 1.9868429856...
\n", "
" ], "text/plain": [ " circuitstring Parameters\n", "0 R1-[P2,[P3-R4,P5-R6]] {'R1': 139.14150285865222, 'P2w': 1.9868429856..." ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "circuits = ae.core.filter_implausible_circuits(circuits_unfiltered)\n", "circuits" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Let's see how well the generated circuits fit the data. You can either use the parameters' values at the end of the GEP process (stored in the `circuits` dataframe), or use `fit_circuit_parameters` to further refine the parameters (recommended)." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", "\n", "Note\n", "\n", "Normally, the found circuits are good enough, but since we didn't run the algorithm for long enough (to not timeout our CI on GitHub), we will use a custom circuit for evaluation. If you're running this notebook on your own data, try using `iters >= 200` together with a more stringet `tol` to get a good pool of circuits. We're currently working on changing the evolutionary algorithm backend to speed up the process, so you no longer need to wait for hours to get a good pool of circuits.\n", "\n", "
" ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "execution": { "iopub.execute_input": "2025-08-25T23:32:23.658926Z", "iopub.status.busy": "2025-08-25T23:32:23.658722Z", "iopub.status.idle": "2025-08-25T23:32:32.122185Z", "shell.execute_reply": "2025-08-25T23:32:32.120366Z" } }, "outputs": [ { "data": { "text/plain": [ "Text(0.5, 1.0, 'R1-[P2,[P3-R4,P5-R6]]')" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "use_custom_circuit = False\n", "\n", "if not use_custom_circuit:\n", " circuit = circuits.iloc[0][\"circuitstring\"]\n", " p = circuits.iloc[0][\"Parameters\"]\n", " # Refine the circuit parameters\n", " p = ae.utils.fit_circuit_parameters(circuit, freq, Z, p0=p)\n", "else:\n", " circuit = \"R4-[P1,R3-P2]\"\n", " p = ae.utils.fit_circuit_parameters(circuit, freq, Z)\n", "\n", "# Simulate Z using the circuit and the fitted parameters\n", "circuit_fn = ae.utils.generate_circuit_fn(circuit)\n", "Z_sim = circuit_fn(freq, list(p.values()))\n", "\n", "# Plot against ground truth\n", "fig, ax = plt.subplots(figsize=(5.5, 4))\n", "ae.visualization.plot_nyquist(Z_sim, fmt=\"-\", ax=ax, label=\"simulated\")\n", "ae.visualization.plot_nyquist(Z, fmt=\".\", ax=ax, label=\"data\");\n", "ax.set_title(circuit)" ] } ], "metadata": { "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.10.18" }, "widgets": { "application/vnd.jupyter.widget-state+json": { "state": { "089d0971de274ccbbc5c3f9730b39ca9": { "model_module": "@jupyter-widgets/controls", "model_module_version": "2.0.0", "model_name": "ProgressStyleModel", "state": { "_model_module": "@jupyter-widgets/controls", "_model_module_version": "2.0.0", "_model_name": "ProgressStyleModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "2.0.0", "_view_name": "StyleView", "bar_color": null, "description_width": "" } }, "167b8aab975f4235a13634b331d84158": { "model_module": "@jupyter-widgets/base", "model_module_version": "2.0.0", "model_name": "LayoutModel", "state": { "_model_module": "@jupyter-widgets/base", "_model_module_version": "2.0.0", "_model_name": "LayoutModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "2.0.0", "_view_name": "LayoutView", "align_content": null, "align_items": null, "align_self": null, "border_bottom": null, "border_left": null, "border_right": null, "border_top": null, "bottom": null, "display": null, "flex": null, "flex_flow": null, "grid_area": null, "grid_auto_columns": null, "grid_auto_flow": null, "grid_auto_rows": null, "grid_column": null, "grid_gap": null, "grid_row": null, "grid_template_areas": null, "grid_template_columns": null, "grid_template_rows": null, "height": null, "justify_content": null, "justify_items": null, "left": null, "margin": null, "max_height": null, "max_width": null, "min_height": null, "min_width": null, "object_fit": null, "object_position": null, "order": null, "overflow": null, "padding": null, "right": null, "top": null, "visibility": null, "width": null } }, "18cde736373549b5a71f5e5cbb05a54d": { "model_module": "@jupyter-widgets/controls", "model_module_version": "2.0.0", "model_name": "FloatProgressModel", "state": { "_dom_classes": [], "_model_module": "@jupyter-widgets/controls", "_model_module_version": "2.0.0", "_model_name": "FloatProgressModel", "_view_count": null, "_view_module": "@jupyter-widgets/controls", "_view_module_version": "2.0.0", "_view_name": "ProgressView", "bar_style": "", "description": "", "description_allow_html": false, "layout": "IPY_MODEL_441166f95de44c349b10a079252ad460", "max": 24.0, "min": 0.0, "orientation": "horizontal", "style": "IPY_MODEL_089d0971de274ccbbc5c3f9730b39ca9", "tabbable": null, "tooltip": null, "value": 24.0 } }, "27f318c52a4041ad85888faf088fcdde": { "model_module": "@jupyter-widgets/controls", "model_module_version": "2.0.0", "model_name": "HTMLModel", "state": { "_dom_classes": [], "_model_module": "@jupyter-widgets/controls", "_model_module_version": "2.0.0", "_model_name": "HTMLModel", "_view_count": null, "_view_module": "@jupyter-widgets/controls", "_view_module_version": "2.0.0", "_view_name": "HTMLView", "description": "", "description_allow_html": false, "layout": "IPY_MODEL_167b8aab975f4235a13634b331d84158", "placeholder": "​", "style": "IPY_MODEL_fdc395ee813b4cb29f55bc4fccd2a5aa", "tabbable": null, "tooltip": null, "value": " 24/24 [15:02<00:00, 38.21s/it]" } }, "441166f95de44c349b10a079252ad460": { "model_module": "@jupyter-widgets/base", "model_module_version": "2.0.0", "model_name": "LayoutModel", "state": { "_model_module": "@jupyter-widgets/base", "_model_module_version": "2.0.0", "_model_name": "LayoutModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "2.0.0", "_view_name": "LayoutView", "align_content": null, "align_items": null, "align_self": null, "border_bottom": null, "border_left": null, "border_right": null, "border_top": null, "bottom": null, "display": null, "flex": null, "flex_flow": null, "grid_area": null, "grid_auto_columns": null, "grid_auto_flow": null, "grid_auto_rows": null, "grid_column": null, "grid_gap": null, "grid_row": null, "grid_template_areas": null, "grid_template_columns": null, "grid_template_rows": null, "height": null, "justify_content": null, "justify_items": null, "left": null, "margin": null, "max_height": null, "max_width": null, "min_height": null, "min_width": null, "object_fit": null, "object_position": null, "order": null, "overflow": null, "padding": null, "right": null, "top": null, "visibility": null, "width": null } }, "4cacbac3bb4b422d83709c20d63e1b27": { "model_module": "@jupyter-widgets/controls", "model_module_version": "2.0.0", "model_name": "HTMLStyleModel", "state": { "_model_module": "@jupyter-widgets/controls", "_model_module_version": "2.0.0", "_model_name": "HTMLStyleModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "2.0.0", "_view_name": "StyleView", "background": null, "description_width": "", "font_size": null, "text_color": null } }, "98ab77f00d294eb8a4f767b60c140f46": { "model_module": "@jupyter-widgets/controls", "model_module_version": "2.0.0", "model_name": "HTMLModel", "state": { "_dom_classes": [], "_model_module": "@jupyter-widgets/controls", "_model_module_version": "2.0.0", "_model_name": "HTMLModel", "_view_count": null, "_view_module": "@jupyter-widgets/controls", "_view_module_version": "2.0.0", "_view_name": "HTMLView", "description": "", "description_allow_html": false, "layout": "IPY_MODEL_c4c9f4f63d68480ba96412e7717ff492", "placeholder": "​", "style": "IPY_MODEL_4cacbac3bb4b422d83709c20d63e1b27", "tabbable": null, "tooltip": null, "value": "Generating Candidate ECMs: 100%" } }, "b30dad2e1d404089932a22756eccb82a": { "model_module": "@jupyter-widgets/controls", "model_module_version": "2.0.0", "model_name": "HBoxModel", "state": { "_dom_classes": [], "_model_module": "@jupyter-widgets/controls", "_model_module_version": "2.0.0", "_model_name": "HBoxModel", "_view_count": null, "_view_module": "@jupyter-widgets/controls", "_view_module_version": "2.0.0", "_view_name": "HBoxView", "box_style": "", "children": [ "IPY_MODEL_98ab77f00d294eb8a4f767b60c140f46", "IPY_MODEL_18cde736373549b5a71f5e5cbb05a54d", "IPY_MODEL_27f318c52a4041ad85888faf088fcdde" ], "layout": "IPY_MODEL_f8c8e69191d04d4b96446951b4bebbab", "tabbable": null, "tooltip": null } }, "c4c9f4f63d68480ba96412e7717ff492": { "model_module": "@jupyter-widgets/base", "model_module_version": "2.0.0", "model_name": "LayoutModel", "state": { "_model_module": "@jupyter-widgets/base", "_model_module_version": "2.0.0", "_model_name": "LayoutModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "2.0.0", "_view_name": "LayoutView", "align_content": null, "align_items": null, "align_self": null, "border_bottom": null, "border_left": null, "border_right": null, "border_top": null, "bottom": null, "display": null, "flex": null, "flex_flow": null, "grid_area": null, "grid_auto_columns": null, "grid_auto_flow": null, "grid_auto_rows": null, "grid_column": null, "grid_gap": null, "grid_row": null, "grid_template_areas": null, "grid_template_columns": null, "grid_template_rows": null, "height": null, "justify_content": null, "justify_items": null, "left": null, "margin": null, "max_height": null, "max_width": null, "min_height": null, "min_width": null, "object_fit": null, "object_position": null, "order": null, "overflow": null, "padding": null, "right": null, "top": null, "visibility": null, "width": null } }, "f8c8e69191d04d4b96446951b4bebbab": { "model_module": "@jupyter-widgets/base", "model_module_version": "2.0.0", "model_name": "LayoutModel", "state": { "_model_module": "@jupyter-widgets/base", "_model_module_version": "2.0.0", "_model_name": "LayoutModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "2.0.0", "_view_name": "LayoutView", "align_content": null, "align_items": null, "align_self": null, "border_bottom": null, "border_left": null, "border_right": null, "border_top": null, "bottom": null, "display": null, "flex": null, "flex_flow": null, "grid_area": null, "grid_auto_columns": null, "grid_auto_flow": null, "grid_auto_rows": null, "grid_column": null, "grid_gap": null, "grid_row": null, "grid_template_areas": null, "grid_template_columns": null, "grid_template_rows": null, "height": null, "justify_content": null, "justify_items": null, "left": null, "margin": null, "max_height": null, "max_width": null, "min_height": null, "min_width": null, "object_fit": null, "object_position": null, "order": null, "overflow": null, "padding": null, "right": null, "top": null, "visibility": "hidden", "width": null } }, "fdc395ee813b4cb29f55bc4fccd2a5aa": { "model_module": "@jupyter-widgets/controls", "model_module_version": "2.0.0", "model_name": "HTMLStyleModel", "state": { "_model_module": "@jupyter-widgets/controls", "_model_module_version": "2.0.0", "_model_name": "HTMLStyleModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "2.0.0", "_view_name": "StyleView", "background": null, "description_width": "", "font_size": null, "text_color": null } } }, "version_major": 2, "version_minor": 0 } } }, "nbformat": 4, "nbformat_minor": 4 }