{ "cells": [ { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "\n", "# High-Dimensional Neural Network Potentials\n", "**[Alexander L. M. Knoll](mailto:aknoll@chemie.uni-goettingen.de), and [Moritz R. Schäfer](mailto:moritzrichard.schaefer@uni-goettingen.de)** \n", "\n", "Behler Group, Theoretische Chemie, Institut für Physikalische Chemie\n" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "notes" } }, "source": [ "For this tutorial it is intended to use the RuNNer release version 1.2, available in conda-forge. \n", "The most recent version of RuNNer is [hosted on Gitlab](https://gitlab.com/TheochemGoettingen/RuNNer). For access please contact Prof. Dr. Jörg Behler (joerg.behler@uni-goettingen.de)." ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "scrolled": true, "slideshow": { "slide_type": "skip" } }, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "/home/kalm/.pyenv/versions/pyiron/lib/python3.10/site-packages/paramiko/transport.py:236: CryptographyDeprecationWarning: Blowfish has been deprecated\n", " \"class\": algorithms.Blowfish,\n" ] } ], "source": [ "import numpy as np\n", "\n", "import matplotlib.pyplot as plt\n", "import ipympl\n", "import ipywidgets as widgets\n", "\n", "from pyiron_atomistics import Project\n", "from pyiron_contrib.atomistics.runner.job import RunnerFit\n", "from pyiron_contrib.atomistics.runner.utils import container_to_ase\n", "\n", "from ase.geometry import get_distances\n", "\n", "from runnerase import generate_symmetryfunctions\n", "\n", "%matplotlib inline" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "## Background\n", "### Architecture of an HDNNP" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "notes" } }, "source": [ "**RuNNer** is a stand-alone Fortran program for the construction of high-dimensional neural network potentials (HDNNPs), written mainly by Jörg Behler. The central assumption made in constructing a HDNNP is that the total energy of the system $E_{\\mathrm{tot}}$ [can be separated into atomic contributions $E_i$](https://www.doi.org/10.1103/PhysRevLett.98.146401). HDNNP relates the local environment of the atoms to their atomic energies $E_i$, which contribute to the sum of all $N$ atomic energies, resulting in the total energy of the system $E_\\mathrm{tot}$." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "\\begin{align}\n", "E_\\mathrm{tot} = \\sum_{i}^{N}E_i\\notag\n", "\\end{align}" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "notes" } }, "source": [ "Every atomic energy is described by an atomic neural network (NN), which is element-specific. The entirety of all atomic NNs composes a HDNNP, whose general architecture is shown below for a binary system." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "<img src=\"figures/2g.png\" class=\"center\" width=\"500\"/>" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "notes" } }, "source": [ "As you can see, the atomic contributions in this model are predicted independently from each other. Therefore, the model can easily describe systems with differering numbers of atoms: adding or removing an atom corresponds to adding or removing a row in the figure shown above. This ability is what puts the \"high-dimensional\" into the name \"HDNNP\". \n", "\n", "Each atomic neural networks receives input information about the local atomic environment up to a certain cutoff radius $R_{\\mathrm{c}}$. This information is encoded based on the Cartesian coordinates in many-body descriptors, so-called [atom-centered symmetry functions (ACSF or just SF)](https://www.doi.org/10.1063/1.3553717). More details about this are shown below. For each atom, the values of multiple SFs compose a SF vector $G$ which is the input layer of the atomic NNs.\n", "\n", "Atomic NNs look like this:" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "<img src=\"figures/ann.png\" width=\"500\"/>" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "notes" } }, "source": [ "Every value in the SF vector $G$ serves as one piece of input information to the atomic NN. We refer to the circles in the figure as _nodes_ (from graph theory) or _neurons_ (from neural science). The information from the input nodes flows through the atomic NN from left to right: the input layer is followed by a configurable number of hidden layers which consist, in turn, of an arbitrary number of _hidden nodes_. At the end, all information is collected in the output layer, which in our case is interpreted as the atomic energy contribution of the atom under consideration. The input nodes and the hidden nodes in the first layer are connected by weights. Moreover, the hidden and output nodes carry a bias value.\n", "\n", "During training, the weights and biases are optimized using backpropagation to represent best the data in the training data set." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "### Symmetry Functions (SFs)" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "notes" } }, "source": [ "SFs provide the input for the NN and describe the local atomic environment of each atom. In principle, one could also use Cartesian coordinates to capture the atomic positions in a structure. As Cartesian coordinates describe the absolute positions of atoms the numerical input to the atomic NNs would change with translation or rotation of the system. However, these actions do not influence the energy of the system and different numerical inputs belonging to the same NN output lead to large training errors.\n", "\n", "In contrast, SFs describe the relative positions of the atoms to each other and are hence translationally and rotationally invariant. We differentiate two types of SFs: radial SF depend on the distance between atom pairs and serve as a measure for their bond order. Angular SFs additionally depend on the interatomic angles." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "#### Cutoff Functions" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "notes" } }, "source": [ "The cutoff function $f_{\\mathrm{c}}$ ensures that only the neighbors within one atomic environment counts towards the symmetry function values. The cutoff radius $R_\\mathrm{c}$ (usually $12\\,\\mathrm{bohr}$) defines how much of the local atomic environment is considered. All SFs and their derivatives will decrease to zero if the pairwise distance is larger than $R_\\mathrm{c}$. There are several cutoff funtions defined in **RuNNer** and we will use here" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "-" } }, "source": [ "\\begin{align}\n", " f_{c}(R_{ij}) = \n", " \\begin{cases}\n", " 0.5 \\cdot [\\cos(\\pi x) + 1]& ~ \\text{for $R_{ij} \\leq R_\\mathrm{c}$},\\\\\n", " 0& ~ \\text{for $R_{ij} > R_\\mathrm{c}$}\n", " \\end{cases}\n", "\\end{align}" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "notes" } }, "source": [ "with the atomic distance $R_{ij}$, the cutoff radius $R_\\mathrm{c}$, and $x = \\frac{R_{ij}}{R_{\\mathrm{c}}}$." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Take a look at the figure below for a graphical representation of the cutoff radius in a periodic system: the red atom is the central atom for which the SF values will be calculated. All yellow atoms lie within in the cutoff radius and will therefore contribute to the SF values." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "-" } }, "source": [ "<img src=\"figures/Rc.png\" width=\"500\"/>" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "#### Radial Symmetry Functions" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "notes" } }, "source": [ "To define the parameters for the radial SFs, it is important to know the shortest bond distance for each element combination in your data set. Usually, 5-6 radial SF are used for any element pair, with different $\\eta$ values to increase the resolution for structure description. It is possible to shift the maximum of the radial SF $G^2$ by $R_{s}$." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "-" } }, "source": [ "\\begin{align}\n", " G_{i}^{2} = \\sum_{j}^{}e^{-\\eta (R_{ij} - R_{s})^2} \\cdot f_{c}(R_{ij}).\n", "\\end{align}" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "notes" } }, "source": [ "In most applications, the Gaussian exponents $\\eta$ for the radial SFs are chosen such that the SF turning points are equally distributed between the cutoff radius and specific minimum pairwise distance in the training dataset (small eta $\\eta$ = max. contraction). In RuNNer, you can either define element pair specific SF or define global SF which are used for every element combination. It is also possible to define different cutoff radii for the SF, even though this is rarely helpful and therefore not recommended.\n", "\n", "Below, you can see a graphical representation of the radial symmetry functions including the cutoff function for a cutoff radius of 12 Bohr." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "<img src=\"figures/radials.png\" width=\"800\"/>" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "#### Angular Symmetry Functions" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "notes" } }, "source": [ "The same rules apply to the angular SFs. Here, however, three atomic positions are included in the calculation." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "-" } }, "source": [ "\\begin{align}\n", " G_{i}^{3} = 2^{\\zeta - 1}\\sum_{j}^{} \\sum_{k}^{} \\left[( 1 + \\lambda \\cdot cos \\theta_{ijk})^{\\zeta} \\cdot e^{-\\eta (R_{ij}^2 + R_{ik}^2 + R_{jk}^2)} \\cdot f_{\\mathrm{c}}(R_{ij}) \\cdot f_{\\mathrm{c}}(R_{ik}) \\cdot f_{\\mathrm{c}}(R_{jk}) \\right]\n", "\\end{align}" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "notes" } }, "source": [ "The angle $\\theta_{ijk} = \\frac{\\mathbf{R}_{ij} \\cdot \\mathbf{R}_{ik}}{R_{ij} \\cdot R_{ik}}$ is centered at atom $i$. For most system, we use permutations of $\\zeta = \\{1, 2, 4, 16\\}$, $\\eta = 0$, and $\\lambda$ = $\\{+1, -1\\}$. If many atoms of each element are present, angular SFs are usually not critical and a default set of SFs can be used." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "<img src=\"figures/angulars.png\" width=\"800\"/>" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "### 3rd and 4th Generation HDNNPs" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "notes" } }, "source": [ "Due to time limitations, we will only focus on the model described above which is known as the second generation of HDNNPs (see [here](https://www.doi.org/10.1103/PhysRevLett.98.146401), and [here](https://www.doi.org/10.1002/anie.201703114), and [here](https://www.doi.org/10.1002/qua.24890)). However, in recent years third- and fourth-generation HDNNPs were developed by the Behler group." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "#### Repetition: Second Generation HDNNP" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "<img src=\"figures/2g.png\" width=\"500\">" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" }, "tags": [] }, "source": [ "#### Third Generation HDNNP" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "notes" } }, "source": [ "In second-generation HDNNPs only atomic interactions inside the cutoff sphere are taken into account. The resulting short-ranged potentials are well-suited to describe local bonding even for complex atomic environments. However, it can be expected that for many systems long-range interactions, primarily electrostatics, will be important.\n", "\n", "To overcome those limitations, third-generation NNs (see [here](https://www.doi.org/10.1103/PhysRevB.83.153101), and [here](https://www.doi.org/10.1063/1.3682557)) define a second set of atomic neural networks to construct environment-dependent atomic charges. They can then be used to calculate the long-range electrostatic energy without truncation. The total energy of the system is then given by the sum of the short-range and the electrostatic energies." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "-" } }, "source": [ "<img src=\"figures/3g.png\" width=\"800\"/>" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "#### Fourth Generation HDNNP" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "notes" } }, "source": [ "While the use of environment-dependent charges is a clear step forward, they are not sufficient if long-range charge transfer is present.\n", "\n", "When dealing with systems where long-range charge transer is present, the usage of fourth-generation NNs (see [here](https://www.doi.org/10.1038/s41467-020-20427-2), and [here](https://www.doi.org/10.1021/acs.accounts.0c00689)) is recommended. Here, environment-dependent electronegativities $\\chi$ are computed first. They will then be used in a charge equilibration scheme to determine the atomic charges $Q$. Again, we can compute the electrostatic energy from this. Moreover, the atomic charges serve as an additional input neuron to train the short-range energy and forces. As it was the case for the third-generation NNs the total energy is then given by the sum of the short-range and the electrostatic energies." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "-" } }, "source": [ "<img src=\"figures/4g.png\" width=\"800\"/>" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "## Using RuNNer via the pyiron Interface " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "In general, training a HDNNP with **RuNNer** can be separated into three different stages - so-called modes - in which different types of calculation are performed." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "- **Mode 1:** calculation of the SF values and separation of the dataset into a training and testing set.\n", "- **Mode 2:** training of the model to construct the HDNNP.\n", "- **Mode 3:** prediction of energy and forces (stress and charges can also be predicted)." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "notes" } }, "source": [ "All these steps are performed consecutively beginning with mode 1." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "### Data Preparation" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "notes" } }, "source": [ "The creation of a meaningful neural network potential lives and dies with high quality training data. Therefore, we will begin by inspecting the full training dataset. \n", "The dataset has been stored prior to the workshop in form of a `TrainingContainer`. \n", "In pyiron, `TrainingContainer`s are jobs which take a set of structures and properties like energies, forces, ... and store them in HDF format.\n", "\n", "Go ahead and open up the project:" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "pr = Project('../../introduction/training')" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "notes" } }, "source": [ "The project already contains several jobs:" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "slideshow": { "slide_type": "skip" } }, "outputs": [ { "data": { "text/html": [ "<div>\n", "<style scoped>\n", " .dataframe tbody tr th:only-of-type {\n", " vertical-align: middle;\n", " }\n", "\n", " .dataframe tbody tr th {\n", " vertical-align: top;\n", " }\n", "\n", " .dataframe thead th {\n", " text-align: right;\n", " }\n", "</style>\n", "<table border=\"1\" class=\"dataframe\">\n", " <thead>\n", " <tr style=\"text-align: right;\">\n", " <th></th>\n", " <th>id</th>\n", " <th>status</th>\n", " <th>chemicalformula</th>\n", " <th>job</th>\n", " <th>subjob</th>\n", " <th>projectpath</th>\n", " <th>project</th>\n", " <th>timestart</th>\n", " <th>timestop</th>\n", " <th>totalcputime</th>\n", " <th>computer</th>\n", " <th>hamilton</th>\n", " <th>hamversion</th>\n", " <th>parentid</th>\n", " <th>masterid</th>\n", " </tr>\n", " </thead>\n", " <tbody>\n", " <tr>\n", " <th>0</th>\n", " <td>212</td>\n", " <td>finished</td>\n", " <td>None</td>\n", " <td>full</td>\n", " <td>/full</td>\n", " <td>None</td>\n", " <td>/home/kalm/dcmnts/uni/promotion/work/workshop_bochum/handson_notebook/workshop_preparation/introduction/training/</td>\n", " <td>2022-06-03 00:02:34.816533</td>\n", " <td>NaT</td>\n", " <td>NaN</td>\n", " <td>zora@cmti001#1</td>\n", " <td>TrainingContainer</td>\n", " <td>0.4</td>\n", " <td>NaN</td>\n", " <td>None</td>\n", " </tr>\n", " <tr>\n", " <th>1</th>\n", " <td>213</td>\n", " <td>finished</td>\n", " <td>None</td>\n", " <td>basic</td>\n", " <td>/basic</td>\n", " <td>None</td>\n", " <td>/home/kalm/dcmnts/uni/promotion/work/workshop_bochum/handson_notebook/workshop_preparation/introduction/training/</td>\n", " <td>2022-06-03 00:02:47.281055</td>\n", " <td>NaT</td>\n", " <td>NaN</td>\n", " <td>zora@cmti001#1</td>\n", " <td>TrainingContainer</td>\n", " <td>0.4</td>\n", " <td>NaN</td>\n", " <td>None</td>\n", " </tr>\n", " <tr>\n", " <th>2</th>\n", " <td>214</td>\n", " <td>finished</td>\n", " <td>None</td>\n", " <td>Al_basic_atomicrex</td>\n", " <td>/Al_basic_atomicrex</td>\n", " <td>None</td>\n", " <td>/home/kalm/dcmnts/uni/promotion/work/workshop_bochum/handson_notebook/workshop_preparation/introduction/training/</td>\n", " <td>2022-06-03 02:00:15.887059</td>\n", " <td>NaT</td>\n", " <td>NaN</td>\n", " <td>zora@cmti001#1</td>\n", " <td>TrainingContainer</td>\n", " <td>0.4</td>\n", " <td>NaN</td>\n", " <td>None</td>\n", " </tr>\n", " <tr>\n", " <th>3</th>\n", " <td>226</td>\n", " <td>finished</td>\n", " <td>None</td>\n", " <td>data_lithium</td>\n", " <td>/data_lithium</td>\n", " <td>None</td>\n", " <td>/home/kalm/dcmnts/uni/promotion/work/workshop_bochum/handson_notebook/workshop_preparation/introduction/training/</td>\n", " <td>2022-07-21 08:18:19.193090</td>\n", " <td>NaT</td>\n", " <td>NaN</td>\n", " <td>pyiron@lap2p#1</td>\n", " <td>TrainingContainer</td>\n", " <td>0.4</td>\n", " <td>NaN</td>\n", " <td>None</td>\n", " </tr>\n", " <tr>\n", " <th>4</th>\n", " <td>227</td>\n", " <td>finished</td>\n", " <td>None</td>\n", " <td>fit_mode1</td>\n", " <td>/fit_mode1</td>\n", " <td>None</td>\n", " <td>/home/kalm/dcmnts/uni/promotion/work/workshop_bochum/handson_notebook/workshop_preparation/introduction/training/fit_lithium/</td>\n", " <td>2022-07-21 08:18:22.251691</td>\n", " <td>2022-07-21 08:18:28.328624</td>\n", " <td>6.0</td>\n", " <td>pyiron@lap2p#1</td>\n", " <td>RunnerFit</td>\n", " <td>0.4</td>\n", " <td>NaN</td>\n", " <td>None</td>\n", " </tr>\n", " <tr>\n", " <th>5</th>\n", " <td>228</td>\n", " <td>finished</td>\n", " <td>None</td>\n", " <td>fit_mode2</td>\n", " <td>/fit_mode2</td>\n", " <td>None</td>\n", " <td>/home/kalm/dcmnts/uni/promotion/work/workshop_bochum/handson_notebook/workshop_preparation/introduction/training/fit_lithium/</td>\n", " <td>2022-07-21 08:18:30.158483</td>\n", " <td>2022-07-21 08:22:02.862973</td>\n", " <td>212.0</td>\n", " <td>pyiron@lap2p#1</td>\n", " <td>RunnerFit</td>\n", " <td>0.4</td>\n", " <td>227.0</td>\n", " <td>None</td>\n", " </tr>\n", " <tr>\n", " <th>6</th>\n", " <td>229</td>\n", " <td>finished</td>\n", " <td>None</td>\n", " <td>fit_mode3</td>\n", " <td>/fit_mode3</td>\n", " <td>None</td>\n", " <td>/home/kalm/dcmnts/uni/promotion/work/workshop_bochum/handson_notebook/workshop_preparation/introduction/training/fit_lithium/</td>\n", " <td>2022-07-21 08:22:04.136475</td>\n", " <td>2022-07-21 08:22:11.189763</td>\n", " <td>7.0</td>\n", " <td>pyiron@lap2p#1</td>\n", " <td>RunnerFit</td>\n", " <td>0.4</td>\n", " <td>228.0</td>\n", " <td>None</td>\n", " </tr>\n", " <tr>\n", " <th>7</th>\n", " <td>230</td>\n", " <td>finished</td>\n", " <td>Li</td>\n", " <td>job_a_3_0</td>\n", " <td>/job_a_3_0</td>\n", " <td>None</td>\n", " <td>/home/kalm/dcmnts/uni/promotion/work/workshop_bochum/handson_notebook/workshop_preparation/introduction/training/E_V_curve/</td>\n", " <td>2022-07-21 08:22:12.207784</td>\n", " <td>2022-07-21 08:22:15.498472</td>\n", " <td>3.0</td>\n", " <td>pyiron@lap2p#1</td>\n", " <td>Lammps</td>\n", " <td>0.1</td>\n", " <td>NaN</td>\n", " <td>None</td>\n", " </tr>\n", " <tr>\n", " <th>8</th>\n", " <td>231</td>\n", " <td>finished</td>\n", " <td>Li</td>\n", " <td>job_a_3_167</td>\n", " <td>/job_a_3_167</td>\n", " <td>None</td>\n", " <td>/home/kalm/dcmnts/uni/promotion/work/workshop_bochum/handson_notebook/workshop_preparation/introduction/training/E_V_curve/</td>\n", " <td>2022-07-21 08:22:15.639460</td>\n", " <td>2022-07-21 08:22:15.965042</td>\n", " <td>0.0</td>\n", " <td>pyiron@lap2p#1</td>\n", " <td>Lammps</td>\n", " <td>0.1</td>\n", " <td>NaN</td>\n", " <td>None</td>\n", " </tr>\n", " <tr>\n", " <th>9</th>\n", " <td>232</td>\n", " <td>finished</td>\n", " <td>Li</td>\n", " <td>job_a_3_333</td>\n", " <td>/job_a_3_333</td>\n", " <td>None</td>\n", " <td>/home/kalm/dcmnts/uni/promotion/work/workshop_bochum/handson_notebook/workshop_preparation/introduction/training/E_V_curve/</td>\n", " <td>2022-07-21 08:22:16.102696</td>\n", " <td>2022-07-21 08:22:16.395679</td>\n", " <td>0.0</td>\n", " <td>pyiron@lap2p#1</td>\n", " <td>Lammps</td>\n", " <td>0.1</td>\n", " <td>NaN</td>\n", " <td>None</td>\n", " </tr>\n", " <tr>\n", " <th>10</th>\n", " <td>233</td>\n", " <td>finished</td>\n", " <td>Li</td>\n", " <td>job_a_3_5</td>\n", " <td>/job_a_3_5</td>\n", " <td>None</td>\n", " <td>/home/kalm/dcmnts/uni/promotion/work/workshop_bochum/handson_notebook/workshop_preparation/introduction/training/E_V_curve/</td>\n", " <td>2022-07-21 08:22:16.572264</td>\n", " <td>2022-07-21 08:22:16.831195</td>\n", " <td>0.0</td>\n", " <td>pyiron@lap2p#1</td>\n", " <td>Lammps</td>\n", " <td>0.1</td>\n", " <td>NaN</td>\n", " <td>None</td>\n", " </tr>\n", " <tr>\n", " <th>11</th>\n", " <td>234</td>\n", " <td>finished</td>\n", " <td>Li</td>\n", " <td>job_a_3_667</td>\n", " <td>/job_a_3_667</td>\n", " <td>None</td>\n", " <td>/home/kalm/dcmnts/uni/promotion/work/workshop_bochum/handson_notebook/workshop_preparation/introduction/training/E_V_curve/</td>\n", " <td>2022-07-21 08:22:16.975377</td>\n", " <td>2022-07-21 08:22:17.282200</td>\n", " <td>0.0</td>\n", " <td>pyiron@lap2p#1</td>\n", " <td>Lammps</td>\n", " <td>0.1</td>\n", " <td>NaN</td>\n", " <td>None</td>\n", " </tr>\n", " <tr>\n", " <th>12</th>\n", " <td>235</td>\n", " <td>finished</td>\n", " <td>Li</td>\n", " <td>job_a_3_833</td>\n", " <td>/job_a_3_833</td>\n", " <td>None</td>\n", " <td>/home/kalm/dcmnts/uni/promotion/work/workshop_bochum/handson_notebook/workshop_preparation/introduction/training/E_V_curve/</td>\n", " <td>2022-07-21 08:22:17.434798</td>\n", " <td>2022-07-21 08:22:17.694902</td>\n", " <td>0.0</td>\n", " <td>pyiron@lap2p#1</td>\n", " <td>Lammps</td>\n", " <td>0.1</td>\n", " <td>NaN</td>\n", " <td>None</td>\n", " </tr>\n", " <tr>\n", " <th>13</th>\n", " <td>236</td>\n", " <td>finished</td>\n", " <td>Li</td>\n", " <td>job_a_4_0</td>\n", " <td>/job_a_4_0</td>\n", " <td>None</td>\n", " <td>/home/kalm/dcmnts/uni/promotion/work/workshop_bochum/handson_notebook/workshop_preparation/introduction/training/E_V_curve/</td>\n", " <td>2022-07-21 08:22:17.828141</td>\n", " <td>2022-07-21 08:22:18.089258</td>\n", " <td>0.0</td>\n", " <td>pyiron@lap2p#1</td>\n", " <td>Lammps</td>\n", " <td>0.1</td>\n", " <td>NaN</td>\n", " <td>None</td>\n", " </tr>\n", " </tbody>\n", "</table>\n", "</div>" ], "text/plain": [ " id status chemicalformula job subjob \\\n", "0 212 finished None full /full \n", "1 213 finished None basic /basic \n", "2 214 finished None Al_basic_atomicrex /Al_basic_atomicrex \n", "3 226 finished None data_lithium /data_lithium \n", "4 227 finished None fit_mode1 /fit_mode1 \n", "5 228 finished None fit_mode2 /fit_mode2 \n", "6 229 finished None fit_mode3 /fit_mode3 \n", "7 230 finished Li job_a_3_0 /job_a_3_0 \n", "8 231 finished Li job_a_3_167 /job_a_3_167 \n", "9 232 finished Li job_a_3_333 /job_a_3_333 \n", "10 233 finished Li job_a_3_5 /job_a_3_5 \n", "11 234 finished Li job_a_3_667 /job_a_3_667 \n", "12 235 finished Li job_a_3_833 /job_a_3_833 \n", "13 236 finished Li job_a_4_0 /job_a_4_0 \n", "\n", " projectpath \\\n", "0 None \n", "1 None \n", "2 None \n", "3 None \n", "4 None \n", "5 None \n", "6 None \n", "7 None \n", "8 None \n", "9 None \n", "10 None \n", "11 None \n", "12 None \n", "13 None \n", "\n", " project \\\n", "0 /home/kalm/dcmnts/uni/promotion/work/workshop_bochum/handson_notebook/workshop_preparation/introduction/training/ \n", "1 /home/kalm/dcmnts/uni/promotion/work/workshop_bochum/handson_notebook/workshop_preparation/introduction/training/ \n", "2 /home/kalm/dcmnts/uni/promotion/work/workshop_bochum/handson_notebook/workshop_preparation/introduction/training/ \n", "3 /home/kalm/dcmnts/uni/promotion/work/workshop_bochum/handson_notebook/workshop_preparation/introduction/training/ \n", "4 /home/kalm/dcmnts/uni/promotion/work/workshop_bochum/handson_notebook/workshop_preparation/introduction/training/fit_lithium/ \n", "5 /home/kalm/dcmnts/uni/promotion/work/workshop_bochum/handson_notebook/workshop_preparation/introduction/training/fit_lithium/ \n", "6 /home/kalm/dcmnts/uni/promotion/work/workshop_bochum/handson_notebook/workshop_preparation/introduction/training/fit_lithium/ \n", "7 /home/kalm/dcmnts/uni/promotion/work/workshop_bochum/handson_notebook/workshop_preparation/introduction/training/E_V_curve/ \n", "8 /home/kalm/dcmnts/uni/promotion/work/workshop_bochum/handson_notebook/workshop_preparation/introduction/training/E_V_curve/ \n", "9 /home/kalm/dcmnts/uni/promotion/work/workshop_bochum/handson_notebook/workshop_preparation/introduction/training/E_V_curve/ \n", "10 /home/kalm/dcmnts/uni/promotion/work/workshop_bochum/handson_notebook/workshop_preparation/introduction/training/E_V_curve/ \n", "11 /home/kalm/dcmnts/uni/promotion/work/workshop_bochum/handson_notebook/workshop_preparation/introduction/training/E_V_curve/ \n", "12 /home/kalm/dcmnts/uni/promotion/work/workshop_bochum/handson_notebook/workshop_preparation/introduction/training/E_V_curve/ \n", "13 /home/kalm/dcmnts/uni/promotion/work/workshop_bochum/handson_notebook/workshop_preparation/introduction/training/E_V_curve/ \n", "\n", " timestart timestop totalcputime \\\n", "0 2022-06-03 00:02:34.816533 NaT NaN \n", "1 2022-06-03 00:02:47.281055 NaT NaN \n", "2 2022-06-03 02:00:15.887059 NaT NaN \n", "3 2022-07-21 08:18:19.193090 NaT NaN \n", "4 2022-07-21 08:18:22.251691 2022-07-21 08:18:28.328624 6.0 \n", "5 2022-07-21 08:18:30.158483 2022-07-21 08:22:02.862973 212.0 \n", "6 2022-07-21 08:22:04.136475 2022-07-21 08:22:11.189763 7.0 \n", "7 2022-07-21 08:22:12.207784 2022-07-21 08:22:15.498472 3.0 \n", "8 2022-07-21 08:22:15.639460 2022-07-21 08:22:15.965042 0.0 \n", "9 2022-07-21 08:22:16.102696 2022-07-21 08:22:16.395679 0.0 \n", "10 2022-07-21 08:22:16.572264 2022-07-21 08:22:16.831195 0.0 \n", "11 2022-07-21 08:22:16.975377 2022-07-21 08:22:17.282200 0.0 \n", "12 2022-07-21 08:22:17.434798 2022-07-21 08:22:17.694902 0.0 \n", "13 2022-07-21 08:22:17.828141 2022-07-21 08:22:18.089258 0.0 \n", "\n", " computer hamilton hamversion parentid masterid \n", "0 zora@cmti001#1 TrainingContainer 0.4 NaN None \n", "1 zora@cmti001#1 TrainingContainer 0.4 NaN None \n", "2 zora@cmti001#1 TrainingContainer 0.4 NaN None \n", "3 pyiron@lap2p#1 TrainingContainer 0.4 NaN None \n", "4 pyiron@lap2p#1 RunnerFit 0.4 NaN None \n", "5 pyiron@lap2p#1 RunnerFit 0.4 227.0 None \n", "6 pyiron@lap2p#1 RunnerFit 0.4 228.0 None \n", "7 pyiron@lap2p#1 Lammps 0.1 NaN None \n", "8 pyiron@lap2p#1 Lammps 0.1 NaN None \n", "9 pyiron@lap2p#1 Lammps 0.1 NaN None \n", "10 pyiron@lap2p#1 Lammps 0.1 NaN None \n", "11 pyiron@lap2p#1 Lammps 0.1 NaN None \n", "12 pyiron@lap2p#1 Lammps 0.1 NaN None \n", "13 pyiron@lap2p#1 Lammps 0.1 NaN None " ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "pr.job_table()" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "notes" } }, "source": [ "The training data is stored in the project node `initial`." ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "slideshow": { "slide_type": "subslide" } }, "outputs": [], "source": [ "data_full = pr['basic']" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "notes" } }, "source": [ "In order to get a feeling for the data, we inspect its energy-volume curve:" ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "scrolled": false, "slideshow": { "slide_type": "fragment" } }, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAz8AAAF5CAYAAACxy5QbAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/YYfK9AAAACXBIWXMAAAsTAAALEwEAmpwYAAAq3UlEQVR4nO3df5RcdZnn8c+TTqEVcGwYgmMaQpDFdokRGrKKwswourSohBZBQXEUPZuZHZ0VYVvTyg7BgwtOO+q4x3FFh9ERlB8htmFEW0RwFDdgQie0EVr5GaygotCApJRK59k/qiqpVNetH9331q1b9/06p0+qblXdejp9T6U/+X6/z9fcXQAAAADQ7RbEXQAAAAAAtAPhBwAAAEAqEH4AAAAApALhBwAAAEAqEH4AAAAApALhBwAAAEAqLIy7gFYcfPDBvmzZsrjLAAAAANChNm/e/Ft3X1zrsUSFn2XLlmnTpk1xlwEAAACgQ5nZw0GPMe0NAAAAQCoQfgAAAACkAuEHAAAAQCoQfgAAAACkAuEHAAAAQCoQfgAAAACkAuEHAAAAQCoQfgAAAACkAuEHAAAAQCoQfgAAAACkwsK4C0iasYmcRsentGM6ryW9WQ0P9mtooC/usgAAAAA0QPhpwdhETiPrJ5UvzEiSctN5jayflCQCEAAAANDhmPbWgtHxqT3BpyxfmNHo+FRMFQEAAABoFuGnBTum8y0dBwAAANA5CD8tWNKbbek4AAAAgM5B+GnB8GC/spmefY5lMz0aHuyPqSIAAAAAzaLhQQvKTQ3o9gYAAAAkD+GnRUMDfYQdAAAAIIGY9gYAAAAgFQg/AAAAAFKB8AMAAAAgFQg/AAAAAFKB8AMAAAAgFQg/AAAAAFKB8AMAAAAgFQg/AAAAAFKB8AMAAAAgFQg/AAAAAFKB8AMAAAAgFQg/AAAAAFKB8AMAAAAgFQg/AAAAAFKB8AMAAAAgFQg/AAAAAFKB8AMAAAAgFQg/AAAAAFKB8AMAAAAgFQg/AAAAAFKB8AMAAAAgFQg/AAAAAFKB8AMAAAAgFQg/AAAAAFKB8AMAAAAgFQg/AAAAAFKB8AMAAAAgFQg/AAAAAFKB8AMAAAAgFWINP2bWa2brzOxeM7vHzF4ZZz0AAAAAutfCmN//nyR9x93PNLP9JC2KuR4AAAAAXSq28GNmz5f0F5LeLUnu/qykZ+OqBwAAAEB3i3Pa2xGSHpP0r2Y2YWZfMrP9q59kZqvNbJOZbXrsscfaXyUAAACArhBn+Fko6ThJn3f3AUnPSFpT/SR3v8LdV7r7ysWLF7e7RgAAAABdIs7w80tJv3T3O0r316kYhgAAAAAgdLGFH3f/laRHzKy/dOi1kn4WVz0AAAAAulvc3d7+TtLVpU5vD0g6L+Z6AAAAAHSpWMOPu2+RtDLOGgAAAACkQ6ybnAIAAABAuxB+AAAAAKQC4QcAAABAKhB+AAAAAKQC4QcAAABAKhB+AAAAAKQC4QcAAABAKhB+AAAAAKQC4QcAAABAKhB+AAAAAKQC4QcAAABAKhB+AAAAAKQC4QcAAABAKhB+AAAAAKQC4QcAAABAKhB+AAAAAKQC4QcAAABAKhB+AAAAAKQC4QcAAABAKhB+AAAAAKQC4QcAAABAKhB+AAAAAKQC4QcAAABAKhB+AAAAAKQC4QcAAABAKhB+AAAAAKQC4QcAAABAKhB+AAAAAKQC4QcAAABAKhB+AAAAAKQC4QcAAABAKhB+AAAAAKQC4QcAAABAKhB+AAAAAKQC4QcAAABAKhB+AAAAAKQC4QcAAABAKhB+AAAAAKTCwrgL6FZjEzmNjk9px3ReS3qzGh7s19BAX9xlAQAAAKlF+InA2EROI+snlS/MSJJy03mNrJ+UJAIQAAAAEBOmvUVgdHxqT/ApyxdmNDo+FVNFAAAAAAg/EdgxnW/pOAAAAIDoEX4isKQ329JxAAAAANEj/ERgeLBf2UzPPseymR4ND/bHVBEAAAAAGh5EoNzUgG5vAAAAQOeIPfyYWY+kTZJy7v6muOsJy9BAH2EHAAAA6CCdMO3tA5LuibsIAAAAAN0t1vBjZodKeqOkL8VZBwAAAIDuF/fIz2ckfUjS7pjrAAAAANDlYgs/ZvYmSb9x980NnrfazDaZ2abHHnusTdUBAAAA6DZxjvycKGmVmT0k6RpJJ5vZVdVPcvcr3H2lu69cvHhxu2sEAAAA0CViCz/uPuLuh7r7MklnS/q+u58bVz0AAAAAulvca34AAAAAoC1i3+dHktz9Nkm3xVwGAAAAgC7GyA8AAACAVCD8AAAAAEgFwg8AAACAVCD8AAAAAEgFwg8AAACAVAjs9mZmTzV4rUl61N1fHG5JAAAAABC+eq2u73f3gXovNrOJkOsBAAAAgEjUm/b2liZe38xzAAAAACB29cLPhWZ2Ur0Xu/sDIdcDAAAAAJGoF35+LmnUzB4ys38ws7pT4AAAAACgkwWGH3f/J3d/paS/lPQ7SVea2b1mdrGZ0eQAAAAAQKI0bHXt7g+7+ydKzQ/OkTQk6Z6oCwMAAACAMDUMP2a20MxOM7OrJX1b0pSkMyKvDAAAAABCVG+fn/+q4kjPGyTdKekaSavd/Zk21QYAAAAAoam3z8+IpK9JutDdn2hTPQAAAAAQicDw4+4nl2+XWl4f5e7/amaLJR3g7g+2o0AAAAAACEMza34ulvRhFUeCJCkj6aooiwIAAACAsDUMP5LeLGmVpGckyd13SHpelEUBAAAAQNiaCT/PurtLckkys/2jLQkAAAAAwtdM+LnOzL4gqdfM/puk70n6YrRlAQAAAEC46nV7kyS5+ydLba+fktQv6e/d/ebIKwMAAACAEDUMP5JUCjsEHgAAAACJFTjtzcz+vdGLm3kOAAAAAHSCeiM/J5nZhjqPm6SjQ64HAAAAACJRL/yc3sTrnw2rEAAAAACIUmD4cfcftLMQAAAAAIhSM62uAQAAACDxCD8AAAAAUqFh+DGz08yMkAQAAAAg0ZoJNW+T9Asz+wcze0nUBQEAAABAFBqGH3c/V9KApPslfdnM/p+ZrTaz50VeHQAAAACEpKnpbO7+lKR1kq6R9EJJb5Z0l5n9XYS1AQAAAEBomlnzs8rMviHpNkkZSS9391MlHSPpwmjLAwAAAIBw1NvktOwtkj7t7v9RedDdd5rZe6MpCwAAAADC1TD8uPu76jx2S7jlAAAAAEA0GoYfM3taklcdflLSJkkXuvsDURQGAAAAAGFqZtrbZyT9UtLXJJmksyUdKekuSVdKenVEtQEAAABAaJrp9rbK3b/g7k+7+1PufoWkQXe/VtKBEdcHAAAAAKFoJvzsNLO3mtmC0tdbJf2h9Fj1dDgAAAAA6EjNhJ93SHqnpN9I+nXp9rlmlpX0/ghrAwAAAIDQ1F3zY2Y9kv7W3U8LeMqPwi8JAAAAAMJXd+TH3WckndSmWgAAAAAgMs10e5swsw2Srpf0TPmgu6+PrCoAAAAACFkz4ee5kn4n6eSKYy6J8AMAAAAgMRqGH3c/rx2FAAAAAECUGnZ7M7MXm9ktZvbT0v2XmdlF0ZcGAAAAAOFpptX1FyWNSCpIkrvfLens+b6xmR1mZrea2c/MbJuZfWC+5wQAAACAIM2s+Vnk7neaWeWxXSG89y5JF7r7XWb2PEmbzexmd/9ZCOcGAAAAgH00M/LzWzM7UsUmBzKzMyU9Ot83dvdH3f2u0u2nJd0jqW++5wUAAACAWpoZ+XmfpCskvcTMcpIelHRumEWY2TJJA5LuqPHYakmrJWnp0qVhvi0AAACAFGmm29sDkl5nZvtLWlAapQmNmR0g6QZJ57v7UzXe/woVw5dWrlzpYb43AAAAgPRoGH7M7DmS3iJpmaSF5bU/7v6x+b65mWVUDD5Xs2kqAAAAgCg1M+3tm5KelLRZ0h/DemMrpqh/kXSPu38qrPMCAAAAQC3NhJ9D3f31Ebz3iZLeKWnSzLaUjn3E3W+K4L0AAAAApFwz4efHZrbC3SfDfGN3/5Eka/hEAAAAAAhBM+HnJEnvNrMHVZz2ZpLc3V8WaWUAAAAAEKJmws+pkVcBAAAAABEL3OTUzE6WJHd/WMUW1w+XvyQd364CAQAAACAMgeFH0icrbt9Q9dhFEdQCAAAAAJGpF34s4Hat+wAAAADQ0eqFHw+4Xes+AAAAAHS0eg0PXmRmG1Qc5SnfVun+EZFXBgAAAAAhqhd+Tq+4/cmqx6rvAwAAAEBHCww/7v6DdhYCAAAAAFGqt+YHAAAAALoG4QcAAABAKhB+AAAAAKRCw/BjZjebWW/F/QPNbDzSqgAAAAAgZM2M/Bzs7tPlO+7+hKRDIqsIAAAAACJQr9V12W4zW+ru2yXJzA4Xm5w2ZWwip9HxKe2YzmtJb1bDg/0aGuiLuywAAAAglZoJPx+V9CMz+4GKG5z+uaTVkVbVBcYmchpZP6l8YUaSlJvOa2T9pCQRgAAAAIAYNJz25u7fkXScpGslXSPpeHdnzU8Do+NTe4JPWb4wo9HxqZgqAgAAANItMPyY2UtKfx4naamkHaWvpaVjqGPHdL6l4wAAAACiVW/a2wUqTm/7xxqPuaSTI6moSyzpzSpXI+gs6c3GUA0AAACAwPDj7qtLf76mfeV0j+HB/n3W/EhSNtOj4cH+GKsCAAAA0qthwwMz65H0RknLKp/v7p+KrqzkKzc1oNsbAAAA0Bma6fZ2o6Q/SJqUtDvacrrL0EAfYQcAAADoEM2En0Pd/WWRVwIAAAAAEWrY6lrSt83slMgrAQAAAIAINTPys1HSN8xsgaSCihudurv/SaSVAQAAAECImgk/n5L0SkmT7u4R1wMAAAAAkWhm2tsjkn5K8AEAAACQZM2M/Dwg6TYz+7akP5YP0uoaAAAAQJI0E34eLH3tV/oCAAAAgMRpGH7c/RJJMrMDSvd/H3VRAAAAABC2hmt+zOylZjYhaZukbWa22cyWR18aAAAAAISnmYYHV0i6wN0Pd/fDJV0o6YvRlgUAAAAA4Wom/Ozv7reW77j7bZL2j6wiAAAAAIhAU93ezOx/Sfpq6f65KnaAAwAAAIDEaGbk5z2SFktaL+kGSQdLOi/KogAAAAAgbM2M/LzO3f9H5QEzO0vS9dGU1D3GJnK65MZtemJnQZLUm81o7arlGhroi7kyAAAAIH2aGfkZafIYKoxN5DS8buue4CNJ0/mChq/fqrGJXIyVAQAAAOkUOPJjZqdKeoOkPjP7bMVDfyJpV9SFJd3o+JQKMz7reGG3a3R8itEfAAAAoM3qTXvbIWmTpFWSNlccf1rS+RHW1BV2TOfn9BgAAACAaASGH3ffKmmrmX3N3ffM3TKzP5f0cUnva0N9ibWkN6tcQMhZ0pttczUAAAAAGq75cfeCmQ2Y2aiZPSTpY5LujbyyhBse7Femx2YdzywwDQ/2x1ARAAAAkG711vy8WNI5pa/fSrpWkrn7a9pUW6KV1/TQ7Q0AAADoDPXW/Nwr6YeS3uTu90mSmX2wLVV1iaGBPoIOAAAA0CHqTXs7Q9Kjkm41sy+a2WslzZ7HBQAAAAAJEBh+3H3M3c+W9BJJt6rY4e0QM/u8mZ3SpvoAAAAAIBTNNDx4xt2/5u6nSTpU0oSkD4fx5mb2ejObMrP7zGxNGOcEAAAAgFoahp9K7v6Eu1/h7q+d7xubWY+kz0k6VdLRks4xs6Pne14AAAAAqKWl8BOyl0u6z90fcPdnJV0j6fQY6wEAAADQxeIMP32SHqm4/8vSMQAAAAAIXb1W1x3BzFZLWi1JS5cujbkaAAAAIN3GJnIaHZ/Sjum8ehdl5C49mS9oSW9Ww4P9Hb3VS5zhJyfpsIr7h5aO7cPdr5B0hSStXLnS21NauCovkCRcFAAAAGl20dikvn7HI5pxV4+ZznnFYbp0aEWk75mU3xcvGpvU1Ru3q/xL+RM7C3sey03nNbJ+UpI6snYp3vDzE0lHmdkRKoaesyW9PcZ6IjE2kdPwuq0qzBQvkdx0XsPrtkrq3IsCAACgFXGEhahcNDapqzZu33N/xn3P/ai+p7GJnEbWTypfmJHUuSFibCK3T/CpJV+Y0ej4VEfVXSm28OPuu8zs/ZLGJfVIutLdt8VVT1QuuXHbnuBTVphxXXLjto69KAAAQHKVRxBy03n1mGnGXX0RjiTEERai9PU7Hgk8HtX3Mzo+tSf4lHViiBgdn6obfMp2TOcjr2WuYl3z4+43SbopzhqiVjkU2MxxAAAQrSinF8U9dal6BGHG9848iWokIY6wEKXy31mzx8MQFBY6LUQ0W8+S3mzElcxdnN3eAAAA2qo8HT03nZdr73T0sYlZy47ndO6R9ZP7nHtk/eS8zz02kdOJl39fR6z5lk68/Pt1z1drBKGsPJIQtjjCQpR6zFo6HoagsNBpIaKZerKZHg0P9rehmrkh/ESsN5tp6TgAAEl20dikjhy5ScvWfEtHjtyki8Ym4y5pH/Wmo89XvalLc9VqoGr0P/NRjCTEERaidM4rDmvpeBiGB/uVzfTsc6wTQ0StOiUpm1kgk9TXm9VlZ6zoqKl61Tq+1XXSrV21XMPXb1Vh994P2swC09pVy2OsCgCA8CVh7UeU09GjmLrU6lqQJb1Z5eq8XxQjCee84rB9fu6Vx5OofK22s4FD+WfZ6d3eklJnPYSfiHXDRQIASI52L3av1G1rP1oVFDzmEzhaDVTDg/37rPmpFNVIQhxhIWqXDq1oe/1DA32J+P0wKXUGIfy0QdIvEgBIuzAWsbdjIXwci90rJWHtR282o+n87FGeMKaj1woe8w0crQaqyv90bWcAjiMsAHNB+AEAoI4w9murt4eHFN7sgGYWu0cZfsq/aNc63iminI4exWyPuQQq/tMVCEb4AQCgjjD2awtat7F2wzb9cdfu0DY2jGOxe6UkrP2Iejp62MGD6fNAuAg/MYp7LwAASIo4d48PY4F8UOioNf1qPiM0cSx2r5SUtR9JGxlJWr1AJyP8xKTeFAg+4ABgryR0EGukUSipNtcRmjgWu1dj7QeATsY+PzGJYi8AAIjC2EROx17yXS1b8y0tW/MtDXzsu6FsCNmseh3E2iGM/dqC9vA4cFHtc8x1hGZooE+XnbFCfaXXl9faJGHvDQBoB0Z+YhLFXgAAELaxidysxeFP7Cy0vOB/PuLuIBbGAvmgdRuSQu8OxhQpAAhG+IlJFHsBAOhOc1kfOJ81hZWvXRDQvasw45F3DiuLu4NYWAvO64US1n8CQHsQfmISxV4AALpP9chLbjqv4evrj7rMZ01h0D4xtbRrpLoTOohFOZrCSA0AtA/hJya1NiGrXPPDP4QAJGnthm37TLeSpMJu19oNe9ssV4/yPPPHXYFrCht9ttTbJ6Zau0aqk9JBDADQ+Qg/MSr/EkLXNwBBarVCrjxea5QnSDMjNc2O5mR6rK0j1XQQAwCEgfATs3pd3wg/QDLEuQdN2CM1QesRTVJ5/OnARRldfNpyPqMAAIlD+IkZXd+AZIt6D5oDF2VqbqZZbpHc7GdFs2sKg9Yj0iYZANAN2OcnZkH/E0vXNyAZot6D5uLTlivTs29Xs0yP6eLTim2Wgz4rDlyUUV9vVqbW9nip3Cem1dcCANDpGPmJGV3fgPkbm8hp7YZte9bBtHNaVtR70DRqsxz0GTKf75/uYwCAbkX4iVlY+0cAnWw+e840c+44N+Fsxx409cIInyEAADSP8NMB+F9WdLNW9pyZS0gaHZ+a1Qpaat8mnN2+Bw0AAN2ENT8AIlWvo2GlckjKTefl2huSxiZydc9fb8F/OxqHXDq0QueesHTPSE+Pmc49YSltmQEA6ECM/ACIVNC+M9XHg0LShdfVn74W1Jq5/Fg7sAcNAADJwMgPgEgFrX2pPh40SjPjXncEaHiwX5kFs9+j3ZtwAgCAzkf4ARCZsYlc093Q6o3S1JomVzY00KfRs45Rbzaz59iBizIaPfMY1sEAAIB9MO0NQCTKa3iC9FWFnVotmyvVW7/Dgn8AANAMwg+AuubaprrWGp6yWntZlc954XVba44WsfEvAACYL8IP0CZR7nUTleo9dHLTeQ1f39z+OfVGai47Y0XN15ePsfEvAACIAuEHaINW9rqpd461G7ZpOl+QVFzXcvFpyyMNUGs3bJu1h05ht2vthm0N3zeoC1tfb7bua9m0EwAARIXwA7RBvb1umvmlvnoERpKe2FnQ8LrmRmHmqhy0mj1eqdYanmZHcFjDAwAAokC3N6ANgqaANbsJ5+j41KwRGEkqzHhgF7S4DQ306bIzVqivNytTccQnaLobAABAOzDyA7RB0BSwJb3ZptYC1QtJzQaouThwUUZP7Jw9ynPgokyNZ8/GCA4AAOgkhJ8ESOJC+WpB61UktX0dSxyCpoC95iWLm1oLFBSeyo9F5eLTlmt43VYVZvaOOmV6bM/PDgAAIEkIPx0ujIXy7TI2kdMlN27bM1LQm81o7ariL8m11qtceP1W+W7X7opztGMdSxyCFvE3uxZoeLB/1t+hVAwiUXZBo/kAAADoJoSfDjffhfJhqRx9WrhAKlQklhOPPEhHLD5AV23cvs9rpvMFXXDtFj1/UabmepWZGsekvetY0vALdrNrgcp/F3GMkjF1DQAAdAvCT4eb70L5+aieqlZWGXwk6fb7H9ft9z9e8xy7pZprRhqp/P66ZdpfrRG83oA1NbWmshFCAAAA5odubx0uaD1H1Lvdj03kdMF1W5pqaRyF8vdXDg256bxce0PD2EQulrrmKmgEz7249qcSG3oCAABEg/DT4YYH+2P55fiSG7cpYFZaaHoWWM0LsHIdS71pf0kSNFI3nS/QDhoAAKBNmPbW4dq94Ly6aUGYerOZlru9xTntL0xB3dqs9Ofta05ub0EAAAApRPhJgFprPeayDmZsIqePrL9bO6sX7bRBX2828Bf8enXX2x+nkzT6eQwP9uuD125R9WCaS6lp7gAAABA3wk8CzaX9dXkNT9RT2WrJLJh7O+ag/XHiXhNTGXZ6F2X0+z/s2tPRrtbPY2igT+dfu6XmuZI2igUAAJBUhJ8Emkv769HxqViCT3mvn7mObLQ67S9or6EwR1aqw2etKYK1fh59CRnFAgAA6FaEnwSayzqYdo4u1JviNhfNtngem8hpeN1WFWb2przpfEHD14e7aWqt8FlL9d95p45iAQAApAXd3hJoLu2v2zm6ENcv86PjU/sEn7LCbg+1O1yzQbL673xooI/ObgAAADFi5CeB5jKCMDzYH7jmJEznnrA0tl/m2zXyFbQxaaWgnwcblQIAAMSH8JNAc2l/PTTQp00PP66rNm6PpKZFmQX632e8rG2/2NfqrhbUGU4Kd+TLA9ZOldtWR92OHAAAAHMTS/gxs1FJp0l6VtL9ks5z9+k4akmqRiMItcLBpUMrtPLwg+a1j8+5JyzVpUMr5lp2KIK63b3l+D5d+5NHZk19m0+3uVqezAf/3T14+RtDex8AAACEK66Rn5sljbj7LjP7hKQRSR+OqZau06gVdtJHJIK63d1672MaPfOYyLu9JWXvIQAAAOwrlvDj7t+tuLtR0plx1NGt5tIKO0nqdbtrR7ijaxsAAEAydcKan/dIujbuIrpJq62wy1Pkao1m1JrmVmtKXZSBo/r9ghoOtGvkZS5rrgAAABC/yMKPmX1P0p/VeOij7v7N0nM+KmmXpKvrnGe1pNWStHTp0ggq7T6tTMsam8hp+PqtKgTsgHrVxu26auN2mRUX+u/XY3q2Yk1Nbjqv4XXh7qNTXV/1FL7MAlOmx/ZZ29PukZdumD4IAACQNpHt8+Pur3P3l9b4Kgefd0t6k6R3uAf1z5Lc/Qp3X+nuKxcvXhxVuV1leLBf2UzPPseCwsHaDdsCg0+l8k/o2Vr76My4Lrlx29yKbaDWFL7Cbtf++y1kvxwAAAC0JK5ub6+X9CFJf+nuO+OoIckaTTtrZVrWdJ3OZa2Ya/e4RoKm6j2ZL2jLxadE8p4AAADoTlZn0CW6NzW7T9JzJP2udGiju/9No9etXLnSN23aFGltna56GljZ/vv16ONvbm70ozI8hfnTj6IN9omXf7/mFL6+3qxuX3NyqO8FAACA5DOzze6+suZjcYSfuSL8BIeBsqAQVK+pQVh6zHT/ZW8I9Zy1wl4208M0NwAAANRE+OkCYxO5OW1OusCkV77oIN21/clZo0VReGiem3zWmtIn0VkNAAAAzakXfjqh1TUaGJvIaXjd1n26mzVrt0u33/94BFXN1mPW9HODQk6tzVkvO2MFU9wAAAAwb4SfBBgdn5pT8Gm3c15xWFPPq9W+emT9pJ6bWdDVm7MCAAAgXoSfBAjqeNZJWml2UKt9db4wEzgtLwnfPwAAADof4ScBgjYt7RStrvNpNczU2pwVAAAAaBXhp0NVrol5fjajngWmmSY2I203k7Rszbf23O/NZrR21fK609RaCXNBm7MCAAAArVoQdwGYrbwmJlfah2c6X5B3YPCRNGufoOl8QcPXb9XYRC7wNcOD/cpmehqeu683S0trAAAAhIaRnw5Ua03M7phqmYvCbq/bpKB8vN6+Q2xiCgAAgLAx8tOBumGBf6PvYWigT7evOVmfeduxs0aBmOoGAACAKBB+OtDzs5m4S5i3ZpsUDA306S3H9+3ZI6jHTG85vo+pbgAAAAgd4acDtbBXaEfKLLCmR27GJnK6YXNOM15cPTTjrhs25+quGQIAAADmgvDTgaZ3FuIuYc56sxmNnnVM0yM3QXv+jI5PRVEeAAAAUoyGBx2o0/f1qdabzWjLxae09JpyK++g77Mb1j0BAACgszDy04FqtYLu1JlwmQWmtauWt/Sai8Ym9cFrt9QNeGxsCgAAgLAx8tOBKltB75jOa0lvds8amg9eu2XW3jpxaWZD02pjEzldvXF73e+Bbm8AAACIAuGnQw0N1O54tunhx3XVxu0xVFQ0l8BTaXR8qm7w6SsFPbq9AQAAIGyEn4S5dGiFVh5+kEbW3618IfqtT03Sp992bGhhpN5aHjY2BQAAQJQIPwl10P7PibQpwgKT3v6Kpbp0aEWo5w1q5mASU90AAAAQKcJPwoxN5DSyfnJWe+j5OHBRRhN/31q3trkaHuyfVb9JescJS5nqBgAAgEgRfhKm1r448/XEzsI+rad7zDTjHsn6m6BmDgQfAAAARI3wkzBR7X9z/rVb9tye8WJLgtx0XiPrJyUp9ABE2AEAAEC7EX4Spt0boOYLMxodn5LEaA0AAACSjU1OE2Z4sL/tG56WR4By03l5xf2xiVybKwEAAADmjvCTMEMDfXrHCUvb/r7V64wqR4QAAACAJCD8JNClQyt0bgwBqFpU648AAACAKBB+Emrl4Qdp//16Yq1hSW821vcHAAAAWkH4SaDyXj/PPBtuy+sgC0zKZvYNWtlMD5uSAgAAIFEIPwkUxV4/9bzyRQfpsjNWqK83K5PU15vVZWesoNsbAAAAEoVW1wnU7rU2d21/UmetlG5fc3Jb3xcAAAAIEyM/CdTutTZ0dgMAAEA3IPwkUBx7/dDZDQAAAElH+EmgOPb6obMbAAAAko7wk1CXDq1QbzbTlveisxsAAAC6AeEnwdauWh75e9DZDQAAAN2Cbm8JNjTQp00PP66rNm4P/dznnrBUlw6tCP28AAAAQFwY+Um4S4dWKJsJ98f4mbcdS/ABAABA1yH8dIHLznhZKD/IE488SA9d/kamuAEAAKArMe2tC5TDysj6u5Uv7G7ptUcdsr9uvuDVEVQFAAAAdBbCT5cYGujT0ECfxiZyuuTGbXpiZ6Hu8w9clNHFpy1nlAcAAACpQfjpMuUQBAAAAGBfrPkBAAAAkAqEHwAAAACpQPgBAAAAkAqEHwAAAACpQPgBAAAAkAqEHwAAAACpEGv4MbMLzczN7OA46wAAAADQ/WILP2Z2mKRTJG2PqwYAAAAA6RHnyM+nJX1IksdYAwAAAICUiCX8mNnpknLuvrWJ5642s01mtumxxx5rQ3UAAAAAupG5RzPwYmbfk/RnNR76qKSPSDrF3Z80s4ckrXT33zZxzsckPRxqofUdLKlhXcAccX0hSlxfiBLXF6LGNYb5ONzdF9d6ILLwE8TMVki6RdLO0qFDJe2Q9HJ3/1Vbi2nAzDa5+8q460B34vpClLi+ECWuL0SNawxRWdjuN3T3SUmHlO+3MvIDAAAAAHPFPj8AAAAAUqHtIz/V3H1Z3DXUcUXcBaCrcX0hSlxfiBLXF6LGNYZItH3NDwAAAADEgWlvAAAAAFKB8FODmb3ezKbM7D4zWxN3PUg+M3vIzCbNbIuZbSodO8jMbjazX5T+PDDuOpEcZnalmf3GzH5acazmNWVFny19pt1tZsfFVzmSIOD6WmtmudLn2BYze0PFYyOl62vKzAbjqRpJYWaHmdmtZvYzM9tmZh8oHeczDJEj/FQxsx5Jn5N0qqSjJZ1jZkfHWxW6xGvc/diK1p1rJN3i7kep2P6doI1WfFnS66uOBV1Tp0o6qvS1WtLn21QjkuvLmn19SdKnS59jx7r7TZJU+jfybEnLS6/559K/pUCQXZIudPejJZ0g6X2l64jPMESO8DPbyyXd5+4PuPuzkq6RdHrMNaE7nS7pK6XbX5E0FF8pSBp3/w9Jj1cdDrqmTpf0b160UVKvmb2wLYUikQKuryCnS7rG3f/o7g9Kuk/Ff0uBmtz9UXe/q3T7aUn3SOoTn2FoA8LPbH2SHqm4/8vSMWA+XNJ3zWyzma0uHXuBuz9auv0rSS+IpzR0kaBris81hOX9pWlHV1ZM1eX6wpyZ2TJJA5LuEJ9haAPCD9AeJ7n7cSoO3b/PzP6i8kEvtl2k9SJCwzWFCHxe0pGSjpX0qKR/jLUaJJ6ZHSDpBknnu/tTlY/xGYaoEH5my0k6rOL+oaVjwJy5e670528kfUPFKSG/Lg/bl/78TXwVoksEXVN8rmHe3P3X7j7j7rslfVF7p7ZxfaFlZpZRMfhc7e7rS4f5DEPkCD+z/UTSUWZ2hJntp+Iizg0x14QEM7P9zex55duSTpH0UxWvq3eVnvYuSd+Mp0J0kaBraoOkvyp1TDpB0pMVU0uAplStsXizip9jUvH6OtvMnmNmR6i4KP3OdteH5DAzk/Qvku5x909VPMRnGCK3MO4COo277zKz90sal9Qj6Up33xZzWUi2F0j6RvGzXgslfc3dv2NmP5F0nZm9V9LDkt4aY41IGDP7uqRXSzrYzH4p6WJJl6v2NXWTpDeouBB9p6Tz2l4wEiXg+nq1mR2r4lSkhyT9tSS5+zYzu07Sz1Ts4vU+d5+JoWwkx4mS3ilp0sy2lI59RHyGoQ2sOKUSAAAAALob094AAAAApALhBwAAAEAqEH4AAAAApALhBwAAAEAqEH4AAAAApALhBwAAAEAqEH4AAAAApALhBwCAEJnZ/zGzu8zsv1Qc+89m9n/NbJ2Z/fc46wOANCP8AAAQEjPbX9Ihkv5a0pvKx939Hnf/GxV3rD8xpvIAIPUIPwCQcmY2ZGZuZi8p3e81s78N+T1+3MJzbzWzwapj55vZ5xu87vdzra9VZrbMzPJmtqXyuLs/I+mFkm6T9Nmq16yS9C1JN5lZ1sy2mNmzZnZwm8oGgNQj/AAAzpH0o9KfktQrKdTw4+6vauHpX5d0dtWxs0vHO8n97n5s5QEz+1NJiyQ9LWlX5WPuvsHdT5X0DnfPl167o021AgBE+AGAVDOzAySdJOm92hs4Lpd0ZGlkYrT0vAvM7Kelr/NLx5aZ2b1m9mUz+7mZXW1mrzOz283sF2b28or3+X3F7b8ys7vNbKuZfbVGWeskvdHM9iu/j6Qlkn5Yq46q72eZmf204v7/NLO1rdRrZuea2Z2l7/8LZtbTwl/pRZI+KWmbpOUVdbzazD5rZl+QdFML5wMAhGhh3AUAAGJ1uqTvuPvPzex3Zna8pDWSXloe1SgdO0/SKySZpDvM7AeSnpD0nySdJek9kn4i6e0qhqlVkj4iaajyzcxsuYoB4VXu/lszO6i6IHd/3MzulHSqpG+qGMquk3RcrTrcfaKF77duvWY2Iultkk5094KZ/bOkd0j6t0YnLoW0V0m6oHTO5ZJ+XPqeblNxKhwAIEaM/ABAup0j6ZrS7Wu0d+pbpZMkfcPdn3H330taL+nPS4896O6T7r5bxdGOW9zdJU1KWlbjXCdLut7dfysVg05AXZVT38pT3urV0axG9b5W0vGSflJaz/NaSS9q8tyXSvpY6Xz3qGLkBwDQGRj5AYCUKo26nCxphZm5pB5JLulzLZzmjxW3d1fc3635/RvzTUmfNrPjJC1y981mdlITr9ulff9j77lVjzeq1yR9xd1HWinWzI6VdIakk8zsc6X3nWzlHACA6DHyAwDpdaakr7r74e6+zN0Pk/SgpKWSnlfxvB9KGjKzRaVWzm8uHZuL70s6q9QYQLWmvUlSaWTnVklXam+jg2bq+LWkQ8zsT83sOapoN92kWySdaWaHlOszs8ObeN0nJK0q/T0uk3SMGPkBgI5D+AGA9DpH0jeqjt2g4jSz20tNBUbd/S5JX5Z0p6Q7JH2pxXU2e7j7Nkkfl/QDM9sq6VN1nv51FUPE10uvbViHuxckfaz0nJsl3dtifT9TcU3Sd83s7tI5XljvNWZ2soqjU9+rOM+vJR0QFO4AAPGw4tRkAADQrFJzg39395fO8zwPSVpZXgMFAIgWIz8AALRuRtLzqzc5bVZ5k1NJGRXXGwEA2oCRHwAAAACpwMgPAAAAgFQg/AAAAABIBcIPAAAAgFQg/AAAAABIBcIPAAAAgFQg/AAAAABIBcIPAAAAgFQg/AAAAABIhf8PQ+nZIe94EBAAAAAASUVORK5CYII=\n", "text/plain": [ "<Figure size 1008x432 with 1 Axes>" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "fig, ax = plt.subplots(figsize=(14, 6))\n", "data_full.plot.energy_volume()\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "notes" } }, "source": [ "As you can see in this plot, some regions of configuration space are much more densily sampled than others. The dataset consists of approximately 4000 structures, ranging from bulk lithium and aluminum to off-stochiometric liquid phases of LiAl alloy. \n", "\n", "Training a potential for such a large dataset to high accuracy takes a few hours. Therefore, we are going to focus on a case study: the subset of pure lithium structures in the dataset. \n", "\n", "We extract a sample from the full dataset using `TrainingContainer`s convenient `sample` function. It creates a new `TrainingContainer` job (here we give it the name `data_lithium`) using a simple filter function. The filter function will remove:\n", "* structures that contain Al.\n", "* structures with a positive energy.\n", "* structures in which atoms do not have any neighbors within a cutoff radius of 12 Bohr." ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "slideshow": { "slide_type": "subslide" } }, "outputs": [], "source": [ "def filter_lithium(container, idx):\n", " \"\"\"Filter a given `container` for the most useful lithium structures.\"\"\"\n", " # Get the elements, total energy and atomic positions.\n", " elements = container.get_array('symbols', idx)\n", " energy = container.get_array('energy', idx)\n", " positions = container.get_array('positions', idx)\n", "\n", " # Build the distance matrix.\n", " distmatrix = get_distances(positions, positions)[1]\n", "\n", " # Check if every atom has at least one neighbor in a 12 Bohr = 6.35 Ang \n", " # cutoff radius.\n", " no_neighbors = False\n", " for idx, row in enumerate(distmatrix):\n", "\n", " # Remove self interaction. \n", " row_no_selfinteraction = row[row > 0.0]\n", "\n", " if all(row_no_selfinteraction > 6.35):\n", " no_neighbors = True\n", " \n", " return 'Al' not in elements and energy < 0.0 and no_neighbors is False" ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "scrolled": true, "slideshow": { "slide_type": "fragment" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "DataContainer({'save_neighbors': True, 'num_neighbors': 12})\n", "The job data_lithium was saved and received the ID: 237\n" ] } ], "source": [ "# Remove the job if it already exists.\n", "if 'data_lithium' in pr.list_nodes():\n", " pr.remove_job('data_lithium')\n", "\n", "data_lithium = data_full.sample('data_lithium', filter_lithium)" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "176\n" ] } ], "source": [ "print(len(list(data_lithium.iter_structures())))" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "notes" } }, "source": [ "When inspecting the list of jobs in the project again, you will find that an additional `TrainingContainer` has been created." ] }, { "cell_type": "code", "execution_count": 9, "metadata": { "slideshow": { "slide_type": "skip" } }, "outputs": [ { "data": { "text/html": [ "<div>\n", "<style scoped>\n", " .dataframe tbody tr th:only-of-type {\n", " vertical-align: middle;\n", " }\n", "\n", " .dataframe tbody tr th {\n", " vertical-align: top;\n", " }\n", "\n", " .dataframe thead th {\n", " text-align: right;\n", " }\n", "</style>\n", "<table border=\"1\" class=\"dataframe\">\n", " <thead>\n", " <tr style=\"text-align: right;\">\n", " <th></th>\n", " <th>id</th>\n", " <th>status</th>\n", " <th>chemicalformula</th>\n", " <th>job</th>\n", " <th>subjob</th>\n", " <th>projectpath</th>\n", " <th>project</th>\n", " <th>timestart</th>\n", " <th>timestop</th>\n", " <th>totalcputime</th>\n", " <th>computer</th>\n", " <th>hamilton</th>\n", " <th>hamversion</th>\n", " <th>parentid</th>\n", " <th>masterid</th>\n", " </tr>\n", " </thead>\n", " <tbody>\n", " <tr>\n", " <th>0</th>\n", " <td>212</td>\n", " <td>finished</td>\n", " <td>None</td>\n", " <td>full</td>\n", " <td>/full</td>\n", " <td>None</td>\n", " <td>/home/kalm/dcmnts/uni/promotion/work/workshop_bochum/handson_notebook/workshop_preparation/introduction/training/</td>\n", " <td>2022-06-03 00:02:34.816533</td>\n", " <td>NaT</td>\n", " <td>NaN</td>\n", " <td>zora@cmti001#1</td>\n", " <td>TrainingContainer</td>\n", " <td>0.4</td>\n", " <td>NaN</td>\n", " <td>None</td>\n", " </tr>\n", " <tr>\n", " <th>1</th>\n", " <td>213</td>\n", " <td>finished</td>\n", " <td>None</td>\n", " <td>basic</td>\n", " <td>/basic</td>\n", " <td>None</td>\n", " <td>/home/kalm/dcmnts/uni/promotion/work/workshop_bochum/handson_notebook/workshop_preparation/introduction/training/</td>\n", " <td>2022-06-03 00:02:47.281055</td>\n", " <td>NaT</td>\n", " <td>NaN</td>\n", " <td>zora@cmti001#1</td>\n", " <td>TrainingContainer</td>\n", " <td>0.4</td>\n", " <td>NaN</td>\n", " <td>None</td>\n", " </tr>\n", " <tr>\n", " <th>2</th>\n", " <td>214</td>\n", " <td>finished</td>\n", " <td>None</td>\n", " <td>Al_basic_atomicrex</td>\n", " <td>/Al_basic_atomicrex</td>\n", " <td>None</td>\n", " <td>/home/kalm/dcmnts/uni/promotion/work/workshop_bochum/handson_notebook/workshop_preparation/introduction/training/</td>\n", " <td>2022-06-03 02:00:15.887059</td>\n", " <td>NaT</td>\n", " <td>NaN</td>\n", " <td>zora@cmti001#1</td>\n", " <td>TrainingContainer</td>\n", " <td>0.4</td>\n", " <td>NaN</td>\n", " <td>None</td>\n", " </tr>\n", " <tr>\n", " <th>3</th>\n", " <td>227</td>\n", " <td>finished</td>\n", " <td>None</td>\n", " <td>fit_mode1</td>\n", " <td>/fit_mode1</td>\n", " <td>None</td>\n", " <td>/home/kalm/dcmnts/uni/promotion/work/workshop_bochum/handson_notebook/workshop_preparation/introduction/training/fit_lithium/</td>\n", " <td>2022-07-21 08:18:22.251691</td>\n", " <td>2022-07-21 08:18:28.328624</td>\n", " <td>6.0</td>\n", " <td>pyiron@lap2p#1</td>\n", " <td>RunnerFit</td>\n", " <td>0.4</td>\n", " <td>NaN</td>\n", " <td>None</td>\n", " </tr>\n", " <tr>\n", " <th>4</th>\n", " <td>228</td>\n", " <td>finished</td>\n", " <td>None</td>\n", " <td>fit_mode2</td>\n", " <td>/fit_mode2</td>\n", " <td>None</td>\n", " <td>/home/kalm/dcmnts/uni/promotion/work/workshop_bochum/handson_notebook/workshop_preparation/introduction/training/fit_lithium/</td>\n", " <td>2022-07-21 08:18:30.158483</td>\n", " <td>2022-07-21 08:22:02.862973</td>\n", " <td>212.0</td>\n", " <td>pyiron@lap2p#1</td>\n", " <td>RunnerFit</td>\n", " <td>0.4</td>\n", " <td>227.0</td>\n", " <td>None</td>\n", " </tr>\n", " <tr>\n", " <th>5</th>\n", " <td>229</td>\n", " <td>finished</td>\n", " <td>None</td>\n", " <td>fit_mode3</td>\n", " <td>/fit_mode3</td>\n", " <td>None</td>\n", " <td>/home/kalm/dcmnts/uni/promotion/work/workshop_bochum/handson_notebook/workshop_preparation/introduction/training/fit_lithium/</td>\n", " <td>2022-07-21 08:22:04.136475</td>\n", " <td>2022-07-21 08:22:11.189763</td>\n", " <td>7.0</td>\n", " <td>pyiron@lap2p#1</td>\n", " <td>RunnerFit</td>\n", " <td>0.4</td>\n", " <td>228.0</td>\n", " <td>None</td>\n", " </tr>\n", " <tr>\n", " <th>6</th>\n", " <td>230</td>\n", " <td>finished</td>\n", " <td>Li</td>\n", " <td>job_a_3_0</td>\n", " <td>/job_a_3_0</td>\n", " <td>None</td>\n", " <td>/home/kalm/dcmnts/uni/promotion/work/workshop_bochum/handson_notebook/workshop_preparation/introduction/training/E_V_curve/</td>\n", " <td>2022-07-21 08:22:12.207784</td>\n", " <td>2022-07-21 08:22:15.498472</td>\n", " <td>3.0</td>\n", " <td>pyiron@lap2p#1</td>\n", " <td>Lammps</td>\n", " <td>0.1</td>\n", " <td>NaN</td>\n", " <td>None</td>\n", " </tr>\n", " <tr>\n", " <th>7</th>\n", " <td>231</td>\n", " <td>finished</td>\n", " <td>Li</td>\n", " <td>job_a_3_167</td>\n", " <td>/job_a_3_167</td>\n", " <td>None</td>\n", " <td>/home/kalm/dcmnts/uni/promotion/work/workshop_bochum/handson_notebook/workshop_preparation/introduction/training/E_V_curve/</td>\n", " <td>2022-07-21 08:22:15.639460</td>\n", " <td>2022-07-21 08:22:15.965042</td>\n", " <td>0.0</td>\n", " <td>pyiron@lap2p#1</td>\n", " <td>Lammps</td>\n", " <td>0.1</td>\n", " <td>NaN</td>\n", " <td>None</td>\n", " </tr>\n", " <tr>\n", " <th>8</th>\n", " <td>232</td>\n", " <td>finished</td>\n", " <td>Li</td>\n", " <td>job_a_3_333</td>\n", " <td>/job_a_3_333</td>\n", " <td>None</td>\n", " <td>/home/kalm/dcmnts/uni/promotion/work/workshop_bochum/handson_notebook/workshop_preparation/introduction/training/E_V_curve/</td>\n", " <td>2022-07-21 08:22:16.102696</td>\n", " <td>2022-07-21 08:22:16.395679</td>\n", " <td>0.0</td>\n", " <td>pyiron@lap2p#1</td>\n", " <td>Lammps</td>\n", " <td>0.1</td>\n", " <td>NaN</td>\n", " <td>None</td>\n", " </tr>\n", " <tr>\n", " <th>9</th>\n", " <td>233</td>\n", " <td>finished</td>\n", " <td>Li</td>\n", " <td>job_a_3_5</td>\n", " <td>/job_a_3_5</td>\n", " <td>None</td>\n", " <td>/home/kalm/dcmnts/uni/promotion/work/workshop_bochum/handson_notebook/workshop_preparation/introduction/training/E_V_curve/</td>\n", " <td>2022-07-21 08:22:16.572264</td>\n", " <td>2022-07-21 08:22:16.831195</td>\n", " <td>0.0</td>\n", " <td>pyiron@lap2p#1</td>\n", " <td>Lammps</td>\n", " <td>0.1</td>\n", " <td>NaN</td>\n", " <td>None</td>\n", " </tr>\n", " <tr>\n", " <th>10</th>\n", " <td>234</td>\n", " <td>finished</td>\n", " <td>Li</td>\n", " <td>job_a_3_667</td>\n", " <td>/job_a_3_667</td>\n", " <td>None</td>\n", " <td>/home/kalm/dcmnts/uni/promotion/work/workshop_bochum/handson_notebook/workshop_preparation/introduction/training/E_V_curve/</td>\n", " <td>2022-07-21 08:22:16.975377</td>\n", " <td>2022-07-21 08:22:17.282200</td>\n", " <td>0.0</td>\n", " <td>pyiron@lap2p#1</td>\n", " <td>Lammps</td>\n", " <td>0.1</td>\n", " <td>NaN</td>\n", " <td>None</td>\n", " </tr>\n", " <tr>\n", " <th>11</th>\n", " <td>235</td>\n", " <td>finished</td>\n", " <td>Li</td>\n", " <td>job_a_3_833</td>\n", " <td>/job_a_3_833</td>\n", " <td>None</td>\n", " <td>/home/kalm/dcmnts/uni/promotion/work/workshop_bochum/handson_notebook/workshop_preparation/introduction/training/E_V_curve/</td>\n", " <td>2022-07-21 08:22:17.434798</td>\n", " <td>2022-07-21 08:22:17.694902</td>\n", " <td>0.0</td>\n", " <td>pyiron@lap2p#1</td>\n", " <td>Lammps</td>\n", " <td>0.1</td>\n", " <td>NaN</td>\n", " <td>None</td>\n", " </tr>\n", " <tr>\n", " <th>12</th>\n", " <td>236</td>\n", " <td>finished</td>\n", " <td>Li</td>\n", " <td>job_a_4_0</td>\n", " <td>/job_a_4_0</td>\n", " <td>None</td>\n", " <td>/home/kalm/dcmnts/uni/promotion/work/workshop_bochum/handson_notebook/workshop_preparation/introduction/training/E_V_curve/</td>\n", " <td>2022-07-21 08:22:17.828141</td>\n", " <td>2022-07-21 08:22:18.089258</td>\n", " <td>0.0</td>\n", " <td>pyiron@lap2p#1</td>\n", " <td>Lammps</td>\n", " <td>0.1</td>\n", " <td>NaN</td>\n", " <td>None</td>\n", " </tr>\n", " <tr>\n", " <th>13</th>\n", " <td>237</td>\n", " <td>finished</td>\n", " <td>None</td>\n", " <td>data_lithium</td>\n", " <td>/data_lithium</td>\n", " <td>None</td>\n", " <td>/home/kalm/dcmnts/uni/promotion/work/workshop_bochum/handson_notebook/workshop_preparation/introduction/training/</td>\n", " <td>2022-07-21 08:24:51.905888</td>\n", " <td>NaT</td>\n", " <td>NaN</td>\n", " <td>pyiron@lap2p#1</td>\n", " <td>TrainingContainer</td>\n", " <td>0.4</td>\n", " <td>NaN</td>\n", " <td>None</td>\n", " </tr>\n", " </tbody>\n", "</table>\n", "</div>" ], "text/plain": [ " id status chemicalformula job subjob \\\n", "0 212 finished None full /full \n", "1 213 finished None basic /basic \n", "2 214 finished None Al_basic_atomicrex /Al_basic_atomicrex \n", "3 227 finished None fit_mode1 /fit_mode1 \n", "4 228 finished None fit_mode2 /fit_mode2 \n", "5 229 finished None fit_mode3 /fit_mode3 \n", "6 230 finished Li job_a_3_0 /job_a_3_0 \n", "7 231 finished Li job_a_3_167 /job_a_3_167 \n", "8 232 finished Li job_a_3_333 /job_a_3_333 \n", "9 233 finished Li job_a_3_5 /job_a_3_5 \n", "10 234 finished Li job_a_3_667 /job_a_3_667 \n", "11 235 finished Li job_a_3_833 /job_a_3_833 \n", "12 236 finished Li job_a_4_0 /job_a_4_0 \n", "13 237 finished None data_lithium /data_lithium \n", "\n", " projectpath \\\n", "0 None \n", "1 None \n", "2 None \n", "3 None \n", "4 None \n", "5 None \n", "6 None \n", "7 None \n", "8 None \n", "9 None \n", "10 None \n", "11 None \n", "12 None \n", "13 None \n", "\n", " project \\\n", "0 /home/kalm/dcmnts/uni/promotion/work/workshop_bochum/handson_notebook/workshop_preparation/introduction/training/ \n", "1 /home/kalm/dcmnts/uni/promotion/work/workshop_bochum/handson_notebook/workshop_preparation/introduction/training/ \n", "2 /home/kalm/dcmnts/uni/promotion/work/workshop_bochum/handson_notebook/workshop_preparation/introduction/training/ \n", "3 /home/kalm/dcmnts/uni/promotion/work/workshop_bochum/handson_notebook/workshop_preparation/introduction/training/fit_lithium/ \n", "4 /home/kalm/dcmnts/uni/promotion/work/workshop_bochum/handson_notebook/workshop_preparation/introduction/training/fit_lithium/ \n", "5 /home/kalm/dcmnts/uni/promotion/work/workshop_bochum/handson_notebook/workshop_preparation/introduction/training/fit_lithium/ \n", "6 /home/kalm/dcmnts/uni/promotion/work/workshop_bochum/handson_notebook/workshop_preparation/introduction/training/E_V_curve/ \n", "7 /home/kalm/dcmnts/uni/promotion/work/workshop_bochum/handson_notebook/workshop_preparation/introduction/training/E_V_curve/ \n", "8 /home/kalm/dcmnts/uni/promotion/work/workshop_bochum/handson_notebook/workshop_preparation/introduction/training/E_V_curve/ \n", "9 /home/kalm/dcmnts/uni/promotion/work/workshop_bochum/handson_notebook/workshop_preparation/introduction/training/E_V_curve/ \n", "10 /home/kalm/dcmnts/uni/promotion/work/workshop_bochum/handson_notebook/workshop_preparation/introduction/training/E_V_curve/ \n", "11 /home/kalm/dcmnts/uni/promotion/work/workshop_bochum/handson_notebook/workshop_preparation/introduction/training/E_V_curve/ \n", "12 /home/kalm/dcmnts/uni/promotion/work/workshop_bochum/handson_notebook/workshop_preparation/introduction/training/E_V_curve/ \n", "13 /home/kalm/dcmnts/uni/promotion/work/workshop_bochum/handson_notebook/workshop_preparation/introduction/training/ \n", "\n", " timestart timestop totalcputime \\\n", "0 2022-06-03 00:02:34.816533 NaT NaN \n", "1 2022-06-03 00:02:47.281055 NaT NaN \n", "2 2022-06-03 02:00:15.887059 NaT NaN \n", "3 2022-07-21 08:18:22.251691 2022-07-21 08:18:28.328624 6.0 \n", "4 2022-07-21 08:18:30.158483 2022-07-21 08:22:02.862973 212.0 \n", "5 2022-07-21 08:22:04.136475 2022-07-21 08:22:11.189763 7.0 \n", "6 2022-07-21 08:22:12.207784 2022-07-21 08:22:15.498472 3.0 \n", "7 2022-07-21 08:22:15.639460 2022-07-21 08:22:15.965042 0.0 \n", "8 2022-07-21 08:22:16.102696 2022-07-21 08:22:16.395679 0.0 \n", "9 2022-07-21 08:22:16.572264 2022-07-21 08:22:16.831195 0.0 \n", "10 2022-07-21 08:22:16.975377 2022-07-21 08:22:17.282200 0.0 \n", "11 2022-07-21 08:22:17.434798 2022-07-21 08:22:17.694902 0.0 \n", "12 2022-07-21 08:22:17.828141 2022-07-21 08:22:18.089258 0.0 \n", "13 2022-07-21 08:24:51.905888 NaT NaN \n", "\n", " computer hamilton hamversion parentid masterid \n", "0 zora@cmti001#1 TrainingContainer 0.4 NaN None \n", "1 zora@cmti001#1 TrainingContainer 0.4 NaN None \n", "2 zora@cmti001#1 TrainingContainer 0.4 NaN None \n", "3 pyiron@lap2p#1 RunnerFit 0.4 NaN None \n", "4 pyiron@lap2p#1 RunnerFit 0.4 227.0 None \n", "5 pyiron@lap2p#1 RunnerFit 0.4 228.0 None \n", "6 pyiron@lap2p#1 Lammps 0.1 NaN None \n", "7 pyiron@lap2p#1 Lammps 0.1 NaN None \n", "8 pyiron@lap2p#1 Lammps 0.1 NaN None \n", "9 pyiron@lap2p#1 Lammps 0.1 NaN None \n", "10 pyiron@lap2p#1 Lammps 0.1 NaN None \n", "11 pyiron@lap2p#1 Lammps 0.1 NaN None \n", "12 pyiron@lap2p#1 Lammps 0.1 NaN None \n", "13 pyiron@lap2p#1 TrainingContainer 0.4 NaN None " ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "pr.job_table()" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "notes" } }, "source": [ "For comparison, here is the energy-volume curve from before, overlayed with the structures in the reduced dataset." ] }, { "cell_type": "code", "execution_count": 10, "metadata": { "slideshow": { "slide_type": "subslide" } }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "<Figure size 1008x432 with 1 Axes>" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "fig, ax = plt.subplots(figsize=(14, 6))\n", "data_full.plot.energy_volume()\n", "data_lithium.plot.energy_volume()\n", "plt.legend(['Full dataset', 'Lithium'])\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "notes" } }, "source": [ "As you can see, we have selected a very small part of the dataset for our demonstration (176 of ~4000 structures). Nevertheless, the following chapters will demonstrate all the relevant RuNNer concepts to create a similar potential with more training data. " ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "### Job Setup: `RunnerFit`" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "notes" } }, "source": [ "pyiron and the RuNNer Fortran program communicate via a custom job type called `RunnerFit`. Here, we add a new job to the project via `create_job` and give it the name `fit_data_lithium`." ] }, { "cell_type": "code", "execution_count": 11, "metadata": { "slideshow": { "slide_type": "fragment" } }, "outputs": [], "source": [ "pr_fit = pr.create_group('fit_lithium')" ] }, { "cell_type": "code", "execution_count": 12, "metadata": { "slideshow": { "slide_type": "fragment" } }, "outputs": [], "source": [ "mode1 = pr_fit.create.job.RunnerFit('fit_mode1', delete_existing_job=True)" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "notes" } }, "source": [ "Every `RunnerFit` job is initialized with a sensible choice of input parameters for RuNNer (`parameters`) and an empty storage for training structures (`training_data`). This information can easily be accessed through the `input` property. " ] }, { "cell_type": "code", "execution_count": 13, "metadata": { "scrolled": false, "slideshow": { "slide_type": "subslide" } }, "outputs": [ { "data": { "application/json": { "parameters": { "bond_threshold": "0.5", "center_symmetry_functions": "True", "cutoff_type": "1", "elements": "None", "epochs": "30", "global_activation_short": "[['t', 't', 'l']]", "global_hidden_layers_short": "2", "global_nodes_short": "[[15, 15]]", "kalman_lambda_short": "0.98", "kalman_nue_short": "0.9987", "mix_all_points": "True", "nguyen_widrow_weights_short": "True", "nn_type_short": "1", "number_of_elements": "0", "optmode_charge": "1", "optmode_short_energy": "1", "optmode_short_force": "1", "points_in_memory": "1000", "precondition_weights": "True", "repeated_energy_update": "True", "runner_mode": "1", "scale_symmetry_functions": "True", "short_energy_error_threshold": "0.1", "short_energy_fraction": "1.0", "short_force_error_threshold": "1.0", "short_force_fraction": "0.1", "symfunction_short": "[]", "test_fraction": "0.1", "use_old_weights_charge": "False", "use_old_weights_short": "False", "use_short_forces": "True", "use_short_nn": "True", "write_weights_epoch": "5" }, "training_data": "<pyiron_contrib.atomistics.atomistics.job.trainingcontainer.TrainingStorage object at 0x7ff3c9504460>" }, "text/html": [ "<pre>DataContainer({\n", " \"parameters\": {\n", " \"runner_mode\": \"1\",\n", " \"symfunction_short\": \"[]\",\n", " \"elements\": \"None\",\n", " \"number_of_elements\": \"0\",\n", " \"bond_threshold\": \"0.5\",\n", " \"nn_type_short\": \"1\",\n", " \"use_short_nn\": \"True\",\n", " \"optmode_charge\": \"1\",\n", " \"optmode_short_energy\": \"1\",\n", " \"optmode_short_force\": \"1\",\n", " \"points_in_memory\": \"1000\",\n", " \"scale_symmetry_functions\": \"True\",\n", " \"cutoff_type\": \"1\",\n", " \"test_fraction\": \"0.1\",\n", " \"use_short_forces\": \"True\",\n", " \"epochs\": \"30\",\n", " \"kalman_lambda_short\": \"0.98\",\n", " \"kalman_nue_short\": \"0.9987\",\n", " \"mix_all_points\": \"True\",\n", " \"nguyen_widrow_weights_short\": \"True\",\n", " \"repeated_energy_update\": \"True\",\n", " \"short_energy_error_threshold\": \"0.1\",\n", " \"short_energy_fraction\": \"1.0\",\n", " \"short_force_error_threshold\": \"1.0\",\n", " \"short_force_fraction\": \"0.1\",\n", " \"use_old_weights_charge\": \"False\",\n", " \"use_old_weights_short\": \"False\",\n", " \"write_weights_epoch\": \"5\",\n", " \"center_symmetry_functions\": \"True\",\n", " \"precondition_weights\": \"True\",\n", " \"global_activation_short\": \"[['t', 't', 'l']]\",\n", " \"global_hidden_layers_short\": \"2\",\n", " \"global_nodes_short\": \"[[15, 15]]\"\n", " },\n", " \"training_data\": \"<pyiron_contrib.atomistics.atomistics.job.trainingcontainer.TrainingStorage object at 0x7ff3c9504460>\"\n", "})</pre>" ], "text/plain": [ "DataContainer({'parameters': DataContainer({'runner_mode': 1, 'symfunction_short': [], 'elements': None, 'number_of_elements': 0, 'bond_threshold': 0.5, 'nn_type_short': 1, 'use_short_nn': True, 'optmode_charge': 1, 'optmode_short_energy': 1, 'optmode_short_force': 1, 'points_in_memory': 1000, 'scale_symmetry_functions': True, 'cutoff_type': 1, 'test_fraction': 0.1, 'use_short_forces': True, 'epochs': 30, 'kalman_lambda_short': 0.98, 'kalman_nue_short': 0.9987, 'mix_all_points': True, 'nguyen_widrow_weights_short': True, 'repeated_energy_update': True, 'short_energy_error_threshold': 0.1, 'short_energy_fraction': 1.0, 'short_force_error_threshold': 1.0, 'short_force_fraction': 0.1, 'use_old_weights_charge': False, 'use_old_weights_short': False, 'write_weights_epoch': 5, 'center_symmetry_functions': True, 'precondition_weights': True, 'global_activation_short': [['t', 't', 'l']], 'global_hidden_layers_short': 2, 'global_nodes_short': [[15, 15]]}), 'training_data': <pyiron_contrib.atomistics.atomistics.job.trainingcontainer.TrainingStorage object at 0x7ff3c9504460>})" ] }, "execution_count": 13, "metadata": {}, "output_type": "execute_result" } ], "source": [ "mode1.input" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "notes" } }, "source": [ "Here, we will only explain the global keywords which are relevant for all modes. The remaining keywords will be explained in following chapters. If a keyword is not specified on the pyiron-side, the **RuNNer** Fortran program uses default values, if possible.\n", "For a more detailed explanation of all RuNNer keywords, take a look at [the RuNNer documentation](https://theochemgoettingen.gitlab.io/RuNNer)." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "notes" } }, "source": [ "| Keyword | Default | Description |\n", "|---------|---------|:-------------|\n", "|runner_mode | 1| Choose the operating mode of RuNNer.\n", "|symfunction_short | empty `SymmetryFunctionSet` |Specification of the symmetry functions for a specific element with a specific neighbor element combination for the short-range NN.\n", "|elements | None| The element symbols of all elements in the system in arbitrary order. The number of specified elements must fit to the value of the keyword number_of_elements. Will be automatically set by `pyiron`.\n", "|number_of_elements | 0| Specify the number of chemical elements in the system. Will be automatically set by `pyiron`.\n", "|bond_threshold | 0.5| Threshold for the shortest bond in the structure in Bohr units. If a shorter bond occurs RuNNer will stop with an error message in runner_mode 2 and 3. In runner_mode 1 the structure will be eliminated from the data set.\n", "|nn_type_short | 1| Specify the NN type of the short-range part (atomic or pair-based energy expression).\n", "|use_short_nn | True| Use the a short range NN. \n", "|points_in_memory | 1000| This keyword controls memory consumption and IO and is therefore important to achieve an optimum performance of RuNNer. Has a different meaning depending on the current runner_mode.\n", "|use_short_forces | True| Use forces for fitting the short range NN weights." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "#### Adding Training Data" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "notes" } }, "source": [ "As of yet, this job does not have a training dataset. However, as you already saw for the EAM potential, adding a new training dataset to the job is as simple as calling `add_training_data`:" ] }, { "cell_type": "code", "execution_count": 14, "metadata": { "slideshow": { "slide_type": "fragment" } }, "outputs": [ { "data": { "text/plain": [ "176" ] }, "execution_count": 14, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# The if-conditions prevents you from accidentally adding the same\n", "# structures twice to the training dataset.\n", "if len(mode1.training_data) == 0:\n", " mode1.add_training_data(data_lithium)\n", "\n", "len(mode1.training_data)" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "notes" } }, "source": [ "By calling `add_training_data` multiple times, it is very easy to combine several independent training datasets for one fit." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "notes" } }, "source": [ "#### Specification of RuNNer Parameters\n", "\n", "While many of the default parameters in `RunnerFit` are suited for a wide range of calculations, you still need to carefully check each of them before starting a fit. Special attention must be given to the atom-centered symmetry functions as they have to be tailored to the system under investigation." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "notes" } }, "source": [ "#### Generating SFs with `runnerase`" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "notes" } }, "source": [ "`RunnerFit` builds on the RuNNer ASE interface which is publicly available as `runnerase`. For further information check out the [runnerase documentation](https://runner-suite.gitlab.io/runnerase).\n", "\n", "`runnerase` provides a `generate_symmetryfunction` procedure, which makes it easy to tailor SFs to the corresponding training dataset. You can either generate radial SFs by setting `sftype=2`, or angular SFs with `sftype=3`. The algorithm will then automatically generate one set of SFs for each pair or each triplet of elements in the dataset. The number of SFs per set can be specified with the `amount` argument. Finally, `generate_symmetryfunctions` comes with several different `algorithm`s for choosing the parameters of the SFs:\n", "* **Radial SFs:** One can choose from `algorithm=turn` and `algorithm=half`. `turn` will choose the SF coefficients such that the turning points of all SFs are equally spaced between the cutoff radius and the minimum distance between any given element pair. `half` will make sure that the SFs are equally spaced at $f(G) = 0.5$.\n", "* **Angular SFs:** One can choose from `algorithm=turn`, `algorithm=half`, or `algorithm=literature`. While the first two algorithms behave similarly to the ones for radial SF, `literature` will return SF coefficients that have proven to be a reliable choice for most systems in previous publications.\n", "\n", "In most RuNNer-related publications, a combination of `algorithm=turn` for radial SFs and `algorithm=literature` for angular SFs has been used." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "notes" } }, "source": [ "However, `runnerase` does not operate on pyiron objects like the `TrainingContainer`. Therefore, we transform the `TrainingContainer` with our lithium structures into a List of ASE Atoms objects. The `container_to_ase` function is defined in pyiron_contrib. " ] }, { "cell_type": "code", "execution_count": 15, "metadata": { "slideshow": { "slide_type": "fragment" } }, "outputs": [], "source": [ "dataset = container_to_ase(data_lithium)" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "notes" } }, "source": [ "In the following, we have prepared two interactive plotting functions for you, so you can try out different parameters for the SFs." ] }, { "cell_type": "code", "execution_count": 16, "metadata": { "slideshow": { "slide_type": "skip" } }, "outputs": [ { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "a16558439a0c451d8e6fea4a851c3607", "version_major": 2, "version_minor": 0 }, "text/plain": [ "interactive(children=(IntSlider(value=6, description='amount', max=12), Dropdown(description='algorithm', opti…" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "@widgets.interact(amount=(0, 12, 1), algorithm=['turn', 'half'],\n", " cutoff_function=[True, False], show_legend=[True, False])\n", "def update(amount=6, algorithm='turn', cutoff_function=True, show_legend=False):\n", " # Clear the plot.\n", " plt.clf()\n", " ax = plt.gca()\n", " \n", " # Generate the symmetry functions.\n", " radials = generate_symmetryfunctions(dataset, sftype=2, algorithm=algorithm,\n", " cutoff=12.0, amount=amount)\n", " radials.plot.radial(cutoff_function=cutoff_function, show_legend=show_legend, axes=ax)\n", " plt.show()" ] }, { "cell_type": "code", "execution_count": 17, "metadata": { "scrolled": false, "slideshow": { "slide_type": "skip" } }, "outputs": [ { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "10565efc82154d67bcdad4d31fc3ac29", "version_major": 2, "version_minor": 0 }, "text/plain": [ "interactive(children=(IntSlider(value=4, description='amount', max=12), Dropdown(description='algorithm', inde…" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "@widgets.interact(amount=(0, 12, 1), algorithm=['half', 'turn', 'literature'],\n", " show_legend=[True, False])\n", "def update(amount = 4, algorithm='literature', show_legend=False):\n", " plt.clf()\n", " ax = plt.gca()\n", " angulars = generate_symmetryfunctions(dataset, sftype=3, amount=amount,\n", " algorithm=algorithm, cutoff=12.0)\n", " angulars.plot.angular(axes=ax, show_legend=show_legend)" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "#### Adding SFs to the Job" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "notes" } }, "source": [ "The parameter `mode1.parameters.symfunction_short` is, in fact, a so-called `SymmetryFunctionSet` object. They function similar to a folder: you can either store `SymmetryFunction` objects directly (= a file), or create more `SymmetryFunctionSet`s in them (= another folder).\n", "\n", "When `generate_symmetryfunctions` is called, it returns a `SymmetryFunctionSet` itself. Two `SymmetryFunctionSet`s can easily be combined using the `+` operator. This way, we can add a collection of radial symmetry functions to our job." ] }, { "cell_type": "code", "execution_count": 18, "metadata": { "slideshow": { "slide_type": "-" } }, "outputs": [], "source": [ "# Reset the symmetry function container.\n", "mode1.parameters.symfunction_short.reset()\n", "\n", "# Generate radial symmetry functions.\n", "radials = generate_symmetryfunctions(dataset, sftype=2, algorithm='half',\n", " cutoff=12.0)\n", "\n", "mode1.parameters.symfunction_short += radials" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "notes" } }, "source": [ "All SFs stored in `radials` can be accessed through its `storage` property. As you can see, `radials` essentially organizes a list of SFs in a convenient storage format." ] }, { "cell_type": "code", "execution_count": 19, "metadata": { "slideshow": { "slide_type": "fragment" } }, "outputs": [ { "data": { "text/plain": [ "[SymmetryFunction(sftype=2, cutoff=12.0, elements=['Li', 'Li'], coefficients=[0.0, 0.0]),\n", " SymmetryFunction(sftype=2, cutoff=12.0, elements=['Li', 'Li'], coefficients=[0.004675055980246072, 0.0]),\n", " SymmetryFunction(sftype=2, cutoff=12.0, elements=['Li', 'Li'], coefficients=[0.010843416275634649, 0.0]),\n", " SymmetryFunction(sftype=2, cutoff=12.0, elements=['Li', 'Li'], coefficients=[0.01939424193215976, 0.0]),\n", " SymmetryFunction(sftype=2, cutoff=12.0, elements=['Li', 'Li'], coefficients=[0.03192971575337408, 0.0]),\n", " SymmetryFunction(sftype=2, cutoff=12.0, elements=['Li', 'Li'], coefficients=[0.05159916711157465, 0.0])]" ] }, "execution_count": 19, "metadata": {}, "output_type": "execute_result" } ], "source": [ "radials.storage" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "notes" } }, "source": [ "Similarly, we can generate a set of angular symmetry functions and add them to the job as well." ] }, { "cell_type": "code", "execution_count": 20, "metadata": { "slideshow": { "slide_type": "subslide" } }, "outputs": [], "source": [ "# Generate angular symmetry functions. \n", "angulars = generate_symmetryfunctions(dataset, sftype=3, amount=4,\n", " algorithm='literature', cutoff=12.0)\n", "\n", "mode1.parameters.symfunction_short += angulars" ] }, { "cell_type": "code", "execution_count": 21, "metadata": { "slideshow": { "slide_type": "fragment" } }, "outputs": [ { "data": { "text/plain": [ "[SymmetryFunction(sftype=3, cutoff=12.0, elements=['Li', 'Li', 'Li'], coefficients=[0.0, -1.0, 1]),\n", " SymmetryFunction(sftype=3, cutoff=12.0, elements=['Li', 'Li', 'Li'], coefficients=[0.0, -1.0, 2]),\n", " SymmetryFunction(sftype=3, cutoff=12.0, elements=['Li', 'Li', 'Li'], coefficients=[0.0, -1.0, 4]),\n", " SymmetryFunction(sftype=3, cutoff=12.0, elements=['Li', 'Li', 'Li'], coefficients=[0.0, -1.0, 8]),\n", " SymmetryFunction(sftype=3, cutoff=12.0, elements=['Li', 'Li', 'Li'], coefficients=[0.0, 1.0, 1]),\n", " SymmetryFunction(sftype=3, cutoff=12.0, elements=['Li', 'Li', 'Li'], coefficients=[0.0, 1.0, 2]),\n", " SymmetryFunction(sftype=3, cutoff=12.0, elements=['Li', 'Li', 'Li'], coefficients=[0.0, 1.0, 4]),\n", " SymmetryFunction(sftype=3, cutoff=12.0, elements=['Li', 'Li', 'Li'], coefficients=[0.0, 1.0, 8])]" ] }, "execution_count": 21, "metadata": {}, "output_type": "execute_result" } ], "source": [ "angulars.storage" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "notes" } }, "source": [ "When we look at the `input` of the job again, you will find that all symmetry functions appear." ] }, { "cell_type": "code", "execution_count": 22, "metadata": { "slideshow": { "slide_type": "subslide" } }, "outputs": [ { "data": { "application/json": { "parameters": { "bond_threshold": "0.5", "center_symmetry_functions": "True", "cutoff_type": "1", "elements": "None", "epochs": "30", "global_activation_short": "[['t', 't', 'l']]", "global_hidden_layers_short": "2", "global_nodes_short": "[[15, 15]]", "kalman_lambda_short": "0.98", "kalman_nue_short": "0.9987", "mix_all_points": "True", "nguyen_widrow_weights_short": "True", "nn_type_short": "1", "number_of_elements": "0", "optmode_charge": "1", "optmode_short_energy": "1", "optmode_short_force": "1", "points_in_memory": "1000", "precondition_weights": "True", "repeated_energy_update": "True", "runner_mode": "1", "scale_symmetry_functions": "True", "short_energy_error_threshold": "0.1", "short_energy_fraction": "1.0", "short_force_error_threshold": "1.0", "short_force_fraction": "0.1", "symfunction_short": "[('Li', 2, 'Li', 0.0, 0.0, 12.0), ('Li', 2, 'Li', 0.004675055980246072, 0.0, 12.0), ('Li', 2, 'Li', 0.010843416275634649, 0.0, 12.0), ('Li', 2, 'Li', 0.01939424193215976, 0.0, 12.0), ('Li', 2, 'Li', 0.03192971575337408, 0.0, 12.0), ('Li', 2, 'Li', 0.05159916711157465, 0.0, 12.0), ('Li', 3, 'Li', 'Li', 0.0, -1.0, 1, 12.0), ('Li', 3, 'Li', 'Li', 0.0, -1.0, 2, 12.0), ('Li', 3, 'Li', 'Li', 0.0, -1.0, 4, 12.0), ('Li', 3, 'Li', 'Li', 0.0, -1.0, 8, 12.0), ('Li', 3, 'Li', 'Li', 0.0, 1.0, 1, 12.0), ('Li', 3, 'Li', 'Li', 0.0, 1.0, 2, 12.0), ('Li', 3, 'Li', 'Li', 0.0, 1.0, 4, 12.0), ('Li', 3, 'Li', 'Li', 0.0, 1.0, 8, 12.0)]", "test_fraction": "0.1", "use_old_weights_charge": "False", "use_old_weights_short": "False", "use_short_forces": "True", "use_short_nn": "True", "write_weights_epoch": "5" }, "training_data": "<pyiron_contrib.atomistics.atomistics.job.trainingcontainer.TrainingStorage object at 0x7ff3c9504460>" }, "text/html": [ "<pre>DataContainer({\n", " \"parameters\": {\n", " \"runner_mode\": \"1\",\n", " \"symfunction_short\": \"[('Li', 2, 'Li', 0.0, 0.0, 12.0), ('Li', 2, 'Li', 0.004675055980246072, 0.0, 12.0), ('Li', 2, 'Li', 0.010843416275634649, 0.0, 12.0), ('Li', 2, 'Li', 0.01939424193215976, 0.0, 12.0), ('Li', 2, 'Li', 0.03192971575337408, 0.0, 12.0), ('Li', 2, 'Li', 0.05159916711157465, 0.0, 12.0), ('Li', 3, 'Li', 'Li', 0.0, -1.0, 1, 12.0), ('Li', 3, 'Li', 'Li', 0.0, -1.0, 2, 12.0), ('Li', 3, 'Li', 'Li', 0.0, -1.0, 4, 12.0), ('Li', 3, 'Li', 'Li', 0.0, -1.0, 8, 12.0), ('Li', 3, 'Li', 'Li', 0.0, 1.0, 1, 12.0), ('Li', 3, 'Li', 'Li', 0.0, 1.0, 2, 12.0), ('Li', 3, 'Li', 'Li', 0.0, 1.0, 4, 12.0), ('Li', 3, 'Li', 'Li', 0.0, 1.0, 8, 12.0)]\",\n", " \"elements\": \"None\",\n", " \"number_of_elements\": \"0\",\n", " \"bond_threshold\": \"0.5\",\n", " \"nn_type_short\": \"1\",\n", " \"use_short_nn\": \"True\",\n", " \"optmode_charge\": \"1\",\n", " \"optmode_short_energy\": \"1\",\n", " \"optmode_short_force\": \"1\",\n", " \"points_in_memory\": \"1000\",\n", " \"scale_symmetry_functions\": \"True\",\n", " \"cutoff_type\": \"1\",\n", " \"test_fraction\": \"0.1\",\n", " \"use_short_forces\": \"True\",\n", " \"epochs\": \"30\",\n", " \"kalman_lambda_short\": \"0.98\",\n", " \"kalman_nue_short\": \"0.9987\",\n", " \"mix_all_points\": \"True\",\n", " \"nguyen_widrow_weights_short\": \"True\",\n", " \"repeated_energy_update\": \"True\",\n", " \"short_energy_error_threshold\": \"0.1\",\n", " \"short_energy_fraction\": \"1.0\",\n", " \"short_force_error_threshold\": \"1.0\",\n", " \"short_force_fraction\": \"0.1\",\n", " \"use_old_weights_charge\": \"False\",\n", " \"use_old_weights_short\": \"False\",\n", " \"write_weights_epoch\": \"5\",\n", " \"center_symmetry_functions\": \"True\",\n", " \"precondition_weights\": \"True\",\n", " \"global_activation_short\": \"[['t', 't', 'l']]\",\n", " \"global_hidden_layers_short\": \"2\",\n", " \"global_nodes_short\": \"[[15, 15]]\"\n", " },\n", " \"training_data\": \"<pyiron_contrib.atomistics.atomistics.job.trainingcontainer.TrainingStorage object at 0x7ff3c9504460>\"\n", "})</pre>" ], "text/plain": [ "DataContainer({'parameters': DataContainer({'runner_mode': 1, 'symfunction_short': [('Li', 2, 'Li', 0.0, 0.0, 12.0), ('Li', 2, 'Li', 0.004675055980246072, 0.0, 12.0), ('Li', 2, 'Li', 0.010843416275634649, 0.0, 12.0), ('Li', 2, 'Li', 0.01939424193215976, 0.0, 12.0), ('Li', 2, 'Li', 0.03192971575337408, 0.0, 12.0), ('Li', 2, 'Li', 0.05159916711157465, 0.0, 12.0), ('Li', 3, 'Li', 'Li', 0.0, -1.0, 1, 12.0), ('Li', 3, 'Li', 'Li', 0.0, -1.0, 2, 12.0), ('Li', 3, 'Li', 'Li', 0.0, -1.0, 4, 12.0), ('Li', 3, 'Li', 'Li', 0.0, -1.0, 8, 12.0), ('Li', 3, 'Li', 'Li', 0.0, 1.0, 1, 12.0), ('Li', 3, 'Li', 'Li', 0.0, 1.0, 2, 12.0), ('Li', 3, 'Li', 'Li', 0.0, 1.0, 4, 12.0), ('Li', 3, 'Li', 'Li', 0.0, 1.0, 8, 12.0)], 'elements': None, 'number_of_elements': 0, 'bond_threshold': 0.5, 'nn_type_short': 1, 'use_short_nn': True, 'optmode_charge': 1, 'optmode_short_energy': 1, 'optmode_short_force': 1, 'points_in_memory': 1000, 'scale_symmetry_functions': True, 'cutoff_type': 1, 'test_fraction': 0.1, 'use_short_forces': True, 'epochs': 30, 'kalman_lambda_short': 0.98, 'kalman_nue_short': 0.9987, 'mix_all_points': True, 'nguyen_widrow_weights_short': True, 'repeated_energy_update': True, 'short_energy_error_threshold': 0.1, 'short_energy_fraction': 1.0, 'short_force_error_threshold': 1.0, 'short_force_fraction': 0.1, 'use_old_weights_charge': False, 'use_old_weights_short': False, 'write_weights_epoch': 5, 'center_symmetry_functions': True, 'precondition_weights': True, 'global_activation_short': [['t', 't', 'l']], 'global_hidden_layers_short': 2, 'global_nodes_short': [[15, 15]]}), 'training_data': <pyiron_contrib.atomistics.atomistics.job.trainingcontainer.TrainingStorage object at 0x7ff3c9504460>})" ] }, "execution_count": 22, "metadata": {}, "output_type": "execute_result" } ], "source": [ "mode1.input" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "### Mode 1: Calculation of SF Values" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "notes" } }, "source": [ "In **RuNNer**'s mode 1 the following steps are performed:\n", "- calculation of SF values,\n", "- splitting of data set in train and test data set.\n", "\n", "The most important keywords for RuNNer mode 1 are summarized in the following table. Previously unmentioned keywords are marked in bold font." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "notes" } }, "source": [ "| Keyword | Default | Description |\n", "|---------|---------|:-------------|\n", "|runner_mode | 1| \n", "|symfunction_short | empty `SymmetryFunctionSet`| Specification of the symmetry functions for a specific element with a specific neighbor element combination for the short-range NN.\n", "|elements | None| The element symbols of all elements in the system in arbitrary order. The number of specified elements must fit to the value of the keyword number_of_elements.\n", "|number_of_elements | 0| Specify the number of chemical elements in the system.\n", "|points_in_memory | 1000| This keyword controls memory consumption and IO and is therefore important to achieve an optimum performance of RuNNer. Has a different meaning depending on the current runner_mode.\n", "|**cutoff_type** | 1| This keyword determines the cutoff function to be used for the symmetry functions.\n", "|**test_fraction** | 0.1| Threshold for splitting between training and testing set in runner_mode 1.\n", "|use_short_forces | True| Use forces for fitting the short range NN weights.\n", "|**random_seed** | None | The seed for ensuring reproducible results. Will be chosen automatically by pyiron if none was supplied." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "notes" } }, "source": [ "Finally, starting mode 1 is as simple as calling the `run` function. For safety, we reset the `runner_mode` parameter to 1. " ] }, { "cell_type": "code", "execution_count": 23, "metadata": { "scrolled": true, "slideshow": { "slide_type": "fragment" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "DataContainer({'parameters': DataContainer({'runner_mode': 1, 'elements': None, 'number_of_elements': 0, 'bond_threshold': 0.5, 'nn_type_short': 1, 'use_short_nn': True, 'optmode_charge': 1, 'optmode_short_energy': 1, 'optmode_short_force': 1, 'points_in_memory': 1000, 'scale_symmetry_functions': True, 'cutoff_type': 1, 'test_fraction': 0.1, 'use_short_forces': True, 'epochs': 30, 'kalman_lambda_short': 0.98, 'kalman_nue_short': 0.9987, 'mix_all_points': True, 'nguyen_widrow_weights_short': True, 'repeated_energy_update': True, 'short_energy_error_threshold': 0.1, 'short_energy_fraction': 1.0, 'short_force_error_threshold': 1.0, 'short_force_fraction': 0.1, 'use_old_weights_charge': False, 'use_old_weights_short': False, 'write_weights_epoch': 5, 'center_symmetry_functions': True, 'precondition_weights': True, 'global_activation_short': [['t', 't', 'l']], 'global_hidden_layers_short': 2, 'global_nodes_short': [[15, 15]], 'symfunction_short': [('Li', 2, 'Li', 0.0, 0.0, 12.0), ('Li', 2, 'Li', 0.004675055980246072, 0.0, 12.0), ('Li', 2, 'Li', 0.010843416275634649, 0.0, 12.0), ('Li', 2, 'Li', 0.01939424193215976, 0.0, 12.0), ('Li', 2, 'Li', 0.03192971575337408, 0.0, 12.0), ('Li', 2, 'Li', 0.05159916711157465, 0.0, 12.0), ('Li', 3, 'Li', 'Li', 0.0, -1.0, 1, 12.0), ('Li', 3, 'Li', 'Li', 0.0, -1.0, 2, 12.0), ('Li', 3, 'Li', 'Li', 0.0, -1.0, 4, 12.0), ('Li', 3, 'Li', 'Li', 0.0, -1.0, 8, 12.0), ('Li', 3, 'Li', 'Li', 0.0, 1.0, 1, 12.0), ('Li', 3, 'Li', 'Li', 0.0, 1.0, 2, 12.0), ('Li', 3, 'Li', 'Li', 0.0, 1.0, 4, 12.0), ('Li', 3, 'Li', 'Li', 0.0, 1.0, 8, 12.0)]}), 'training_data': <pyiron_contrib.atomistics.atomistics.job.trainingcontainer.TrainingStorage object at 0x7ff3c9504460>})\n", "The job fit_mode1 was saved and received the ID: 238\n" ] } ], "source": [ "# Run Mode 1.\n", "mode1.parameters.runner_mode = 1\n", "mode1.run(delete_existing_job=True)" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "notes" } }, "source": [ "The output of the calculation is stored in the `output` property of the job." ] }, { "cell_type": "code", "execution_count": 24, "metadata": { "slideshow": { "slide_type": "fragment" } }, "outputs": [ { "data": { "application/json": { "sfvalues": "<pyiron_contrib.atomistics.runner.storageclasses.HDFSymmetryFunctionValues object at 0x7ff3c72def20>", "splittraintest": "HDFSplitTrainTest(n_train=159, n_test=17)" }, "text/html": [ "<pre>DataContainer({\n", " \"sfvalues\": \"<pyiron_contrib.atomistics.runner.storageclasses.HDFSymmetryFunctionValues object at 0x7ff3c72def20>\",\n", " \"splittraintest\": \"HDFSplitTrainTest(n_train=159, n_test=17)\"\n", "})</pre>" ], "text/plain": [ "DataContainer({'sfvalues': <pyiron_contrib.atomistics.runner.storageclasses.HDFSymmetryFunctionValues object at 0x7ff3c72def20>, 'splittraintest': HDFSplitTrainTest(n_train=159, n_test=17)})" ] }, "execution_count": 24, "metadata": {}, "output_type": "execute_result" } ], "source": [ "mode1.output" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "notes" } }, "source": [ "As you can see, `output` is a `DataContainer` with two nodes: the calculated SF values (`sfvalues`) and the split between training and testing data (`splittraintest`). The data is encapsulated in corresponding objects, e.g. `HDFSplitTrainTest`.\n", "\n", "_For those who are interested: the object `HDFSplitTraintTest` wraps a similar object that is provided by the runnerase package (`RunnerSplitTrainTest`). This is necessary to provide the runnerase object with the capabilities to read and write itself to and from HDF format. Apart from these additional functions, the two classes behave completely the same. All output values of the RunnerFit job are stored in this way. `HDFSymmetryFunctionValues` is an exception: because SF values are very large, they are stored on the pyiron-side in a flat storage array. Therefore, `HDFSymmetryFunctionValues` and `RunnerSymmetryFunctionValues` behave differently. In order to work with `HDFSymmetryFunctionValues` more conveniently, we therefore convert it back to the `RunnerSymmetryFunctionValues` class by calling its `to_runnerase` routine._" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "notes" } }, "source": [ "We store the two different output values in variables and access their plotting interfaces." ] }, { "cell_type": "code", "execution_count": 25, "metadata": { "slideshow": { "slide_type": "fragment" } }, "outputs": [], "source": [ "split = mode1.output['splittraintest']\n", "sfvalues = mode1.output['sfvalues'].to_runnerase()" ] }, { "cell_type": "code", "execution_count": 26, "metadata": { "slideshow": { "slide_type": "subslide" } }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "<Figure size 1008x432 with 1 Axes>" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "fig, ax = plt.subplots(figsize=(14, 6))\n", "split.plot.pie()\n", "plt.show()" ] }, { "cell_type": "code", "execution_count": 27, "metadata": { "scrolled": false, "slideshow": { "slide_type": "subslide" } }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "<Figure size 1008x432 with 1 Axes>" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "fig, ax = plt.subplots(figsize=(14, 6))\n", "sfvalues.plot.boxplot()\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "notes" } }, "source": [ "The boxplot above shows the distribution of SF values in the entire dataset for each SF. Outliers are depicted with black kites and every point corresponds to one atom.\n", "\n", "This plot can give clues about outliers in the datatset which are difficult to fit. For example, symmetry function 7 shows very large values for one atom. This could indicate, that two atoms are getting unreasonably close (for radial SFs) or that their angle is very narrow (for angular SFs). Investigating such structures and, if necessary, removing them from the training dataset, can often improve a fit. " ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "### Mode 2: Potential Training" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "notes" } }, "source": [ "In ``mode 2``, the magic happens and your data will be fitted. Again, we summarize important keywords in a table. There are many other keywords which allow you to finetune your potential. However, the selection below should give you many possibilities to change the outcome of the training process." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "notes" } }, "source": [ "| Keyword | Default | Description |\n", "|---------|---------|:-------------|\n", "|runner_mode | 1| Must be set to 2.\n", "|nn_type_short | 1| Specify the NN type of the short-range part.\n", "|use_short_nn | True| Use the a short range NN. Whether an atomic or pair-based energy expression is used is determined via the keyword nn_type_short.\n", "|**optmode_short_energy** | 1| Specify the optimization algorithm for the short-range energy contributions.\n", "|**optmode_short_force** | 1| Specify the optimization algorithm for the short-range forces.\n", "|points_in_memory | 1000| This keyword controls memory consumption and IO and is therefore important to achieve an optimum performance of RuNNer. Has a different meaning depending on the current runner_mode.\n", "|**scale_symmetry_functions** | True| Rescale symmetry functions to a certain interval (the default interval is 0 to 1). This has numerical advantages if the orders of magnitudes of different symmetry functions are very different. If the minimum and maximum value for a symmetry function is the same for all structures, rescaling is not possible and RuNNer will terminate with an error. The interval can be specified by the keywords \n", "|use_short_forces | True| Use forces for fitting the short range NN weights.\n", "|**epochs** | 30| The number of epochs for fitting. If 0 is specified, RuNNer will calculate the error and terminate without adjusting weights.\n", "|**kalman_lambda_short** | 0.98| Kalman filter parameter $\\lambda$ for the short range NN weight updates.\n", "|**kalman_nue_short** | 0.9987| Kalman filter parameter $\\nu$ for the short range weight updates.\n", "|**mix_all_points** | True| Randomly reorder the data points in the data set at the beginning of each new epoch.\n", "|**nguyen_widrow_weights_short** | True| Initialize the short-range NN weights according to the scheme proposed by Nguyen and Widrow. The initial weights and bias values in the hidden layer are chosen such that the input space is evenly distributed over the nodes. This may speed up the training process.\n", "|**repeated_energy_update** | True| If this keyword is set, the weights of the short-range NN are updated a second time after the force update with respect to the total energies in the data set. This usually results in a more accurate potential energy fitting at the cost of slightly detiorated forces.\n", "|**center_symmetry_functions** | True| Shift the symmetry function values individually for each symmetry function such that the average is moved to zero. This may have numerical advantages, because zero is the center of the non-linear regions of most activation functions.\n", "|**precondition_weights** | True| Shift the weights of the atomic NNs right after the initialization so that the standard deviation of the NN energies is the same as the standard deviation of the reference energies.\n", "|**global_activation_short** | [['t' 't' 'l']]| Set the activation function for each hidden layer and the output layer in the short range NNs of all elements. \n", "|**global_hidden_layers_short** | 2| Set the default number of hidden layers in the short-range NNs of all elements. Internally 1 is added to maxnum_layers_short, which also includes the output layer.\n", "|**global_nodes_short** | [[15 15]]| Set the default number of nodes in the hidden layers of the short-range NNs in case of nn_type_short 1. In the array, the entries 1 - maxnum_layersshort - 1 refer to the hidden layers. The first entry (0) refers to the nodes in the input layer and is determined automatically from the symmetry functions." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "notes" } }, "source": [ "During the fitting process of the NN, the error function $\\Gamma$ is minimized, which is defined as " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\\begin{equation}\n", " \\Gamma = \\mathrm{RMSE}(E)=\\frac{1}{N_\\mathrm{struct}} \\sum_{i}^{N_\\mathrm{\\mathrm{struct}}} (E_{\\mathrm{NN}}^{i} - E_{\\mathrm{ref}}^{i})^2,\n", "\\end{equation}" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "if only energy fitting is used, which defines simultaneously the root-mean squared error of the energies $\\mathrm{RMSE}(E)$. This defines the differences of the reference data and the NNP predictions." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "notes" } }, "source": [ "In order to run mode 2, we will restart the previous calculation, thereby creating a new job with its own folder structure. This way, we can try different combinations of parameters without overwriting any of the previous results. \n", "\n", "Moreover, we will change some of the default parameters of the job. We reduce the number of epochs to 15 to keep the runtime short for this tutorial. Apart from that, we turn on force fitting (`use_short_forces=True`). This is turned off by default as force fitting is much more computationally demanding than pure energy fitting.\n", "\n", "The next cell will run a few minutes." ] }, { "cell_type": "code", "execution_count": 28, "metadata": { "scrolled": true, "slideshow": { "slide_type": "subslide" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "DataContainer({'parameters': DataContainer({'runner_mode': 2, 'elements': None, 'number_of_elements': 0, 'bond_threshold': 0.5, 'nn_type_short': 1, 'use_short_nn': 1, 'optmode_charge': 1, 'optmode_short_energy': 1, 'optmode_short_force': 1, 'points_in_memory': 1000, 'scale_symmetry_functions': 1, 'cutoff_type': 1, 'test_fraction': 0.1, 'use_short_forces': True, 'epochs': 15, 'kalman_lambda_short': 0.98, 'kalman_nue_short': 0.9987, 'mix_all_points': 1, 'nguyen_widrow_weights_short': 1, 'repeated_energy_update': 1, 'short_energy_error_threshold': 0.1, 'short_energy_fraction': 1.0, 'short_force_error_threshold': 1.0, 'short_force_fraction': 0.1, 'use_old_weights_charge': 0, 'use_old_weights_short': 0, 'write_weights_epoch': 5, 'center_symmetry_functions': 1, 'precondition_weights': 1, 'global_activation_short': [['t', 't', 'l']], 'global_hidden_layers_short': 2, 'global_nodes_short': [[15, 15]], 'symfunction_short': [('Li', 2, 'Li', 0.0, 0.0, 12.0), ('Li', 2, 'Li', 0.004675055980246072, 0.0, 12.0), ('Li', 2, 'Li', 0.010843416275634649, 0.0, 12.0), ('Li', 2, 'Li', 0.01939424193215976, 0.0, 12.0), ('Li', 2, 'Li', 0.03192971575337408, 0.0, 12.0), ('Li', 2, 'Li', 0.05159916711157465, 0.0, 12.0), ('Li', 3, 'Li', 'Li', 0.0, -1.0, 1.0, 12.0), ('Li', 3, 'Li', 'Li', 0.0, -1.0, 2.0, 12.0), ('Li', 3, 'Li', 'Li', 0.0, -1.0, 4.0, 12.0), ('Li', 3, 'Li', 'Li', 0.0, -1.0, 8.0, 12.0), ('Li', 3, 'Li', 'Li', 0.0, 1.0, 1.0, 12.0), ('Li', 3, 'Li', 'Li', 0.0, 1.0, 2.0, 12.0), ('Li', 3, 'Li', 'Li', 0.0, 1.0, 4.0, 12.0), ('Li', 3, 'Li', 'Li', 0.0, 1.0, 8.0, 12.0)]}), 'training_data': <pyiron_contrib.atomistics.atomistics.job.trainingcontainer.TrainingStorage object at 0x7ff3c6db91b0>})\n", "The job fit_mode2 was saved and received the ID: 239\n" ] } ], "source": [ "# Run Mode 2.\n", "mode2 = mode1.restart('fit_mode2')\n", "mode2.parameters.runner_mode = 2\n", "mode2.parameters.epochs = 15\n", "mode2.parameters.use_short_forces = True\n", "mode2.run(delete_existing_job=True)" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "notes" } }, "source": [ "After the job has finished, we can first take a look at the behaviour of the error function, i.e. the RMSE. The `output` of mode 2 consists of three properties: the results of the fitting process (`fitresults`), the optimized weights and the symmetry function scaling data for shifting to zero mean and unit variance (`scaling`)." ] }, { "cell_type": "code", "execution_count": 29, "metadata": { "scrolled": true, "slideshow": { "slide_type": "subslide" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Epoch | RMSE(E) / eV/atom | RMSE(F) / eV/Bohr |\n", "=================================================\n", " | Train | Test | Train | Test |\n", "-------------------------------------------------\n", " 0 | 0.1355 | 0.1938 | 0.1403 | 0.1291 |\n", " 1 | 0.0285 | 0.2956 | 0.0604 | 0.0515 |\n", " 2 | 0.0147 | 0.2408 | 0.0548 | 0.0469 |\n", " 3 | 0.0171 | 0.0410 | 0.0438 | 0.0373 |\n", " 4 | 0.0158 | 0.0542 | 0.0360 | 0.0322 |\n", " 5 | 0.0196 | 0.0065 | 0.0319 | 0.0288 | <- Best Epoch\n", " 6 | 0.0182 | 0.0290 | 0.0295 | 0.0273 |\n", " 7 | 0.0048 | 0.2361 | 0.0281 | 0.0259 |\n", " 8 | 0.0054 | 0.1001 | 0.0271 | 0.0255 |\n", " 9 | 0.0048 | 0.1364 | 0.0265 | 0.0248 |\n", " 10 | 0.0062 | 0.3651 | 0.0259 | 0.0241 |\n", " 11 | 0.0038 | 0.2871 | 0.0254 | 0.0237 |\n", " 12 | 0.0029 | 0.0764 | 0.0247 | 0.0230 |\n", " 13 | 0.0033 | 0.0739 | 0.0243 | 0.0227 |\n", " 14 | 0.0022 | 0.0977 | 0.0240 | 0.0224 |\n", " 15 | 0.0021 | 0.1520 | 0.0235 | 0.0219 |\n" ] } ], "source": [ "mode2.output['fitresults'].table()" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "notes" } }, "source": [ "The `table` function already shows you that both the energy and force RMSE are declining. The best epoch is determined by the energy RMSE on the **test** set that is lowest.\n", "\n", "A more accessible analysis can be obtained by looking at the plots of this data." ] }, { "cell_type": "code", "execution_count": 30, "metadata": { "slideshow": { "slide_type": "subslide" } }, "outputs": [ { "data": { "image/png": "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FP3iIRYiRVekiOobGDzhdQODIe596BUefjryRUfkzz90b+TK0O2jh0c5PnTs2FNGeQ4zfNIJz3f8Y0ccH60oDQyGeGjtprgt6uK2MAIuAPZYa+sAjDEPADcDKoxEZEIUVa9UIeSARNgY+GQSeUNm0HsfC8aY4Wl0I53qC4F4L0pPNlpXVJDN97707riY7ncypxpp/H+fuXZczxUOR4unY4qpyCU0oqgKDt9vR789ovgKRZuMhEacEwyFoj/DPPWnnSfJYllQUQLY4cLpaAFlj7l99LAdvn2yc4+eevRc7CjHjnu+41/f2pMXpaONuseLeC6MZgL7RtxuBi50KIuIiEyQRPmAezKXLq9MmKzH03vvnEQuSk+W/X2rl8Z1UQQT+767XC7SXUBa7LYheHPbvpMWdn9xx8Uxy3EmTlVQx6t4LoxOyxhzN3A3wKxZsxxOIyIiY5XIH3ATnd57ZyRyUarszknGgjqes8dt8wVjzEXAV62110ZvfwnAWvuvo52v5gsiIiIikmyGOrslYmEXj9kTsiudMcYD7AKuBlqA14E/s9ZuG+18FUYiIiIiInIqCdmVzlobNMZ8BniKSLvun52sKBIRERERETkbcVsYAVhrnwSedDqHiIiIiIgkN5fTAURERERERJymwkhERERERFKeCiMREREREUl5KoxERERERCTlqTASEREREZGUp8JIRERERERSngojERERERFJeSqMREREREQk5RlrrdMZJoQxph1odDrHCMXAIadDpCC9787Re+8cvffO0PvuHL33ztF77xy99xNjtrW2ZLQ7kqYwijfGmDestSuczpFq9L47R++9c/TeO0Pvu3P03jtH771z9N5PPk2lExERERGRlKfCSEREREREUp4Ko8nzI6cDpCi9787Re+8cvffO0PvuHL33ztF77xy995NMa4xERERERCTlacRIRERERERSngqjCWaMWW2M2WmM2WOM+aLTeVKFMabcGPO8MWa7MWabMeYvnc6USowxbmPMW8aY3zudJZUYYwqMMb8xxtQaY3YYYy5yOlOqMMb8dfTfmq3GmF8bYzKdzpSsjDE/M8a0GWO2jjhWaIx5xhizO/pzipMZk9VJ3vtvR//N2WyMedQYU+BgxKQ02vs+4r6/NcZYY0yxE9mSnQqjCWSMcQM/AK4DqoE7jTHVzqZKGUHgb6211cBK4NN672PqL4EdTodIQf8JrLXWngOci/4bxIQxZibwOWCFtXYR4AbucDZVUvs5sPq4Y18EnrXWzgOejd6WifdzTnzvnwEWWWuXALuAL8U6VAr4OSe+7xhjyoF3Ak2xDpQqVBhNrAuAPdbaOmttAHgAuNnhTCnBWrvfWrsxet1P5APiTGdTpQZjTBlwA/ATp7OkEmNMPrAK+CmAtTZgrT3iaKjU4gGyjDEeIBtodThP0rLWrgM6jzt8M/CL6PVfAO+OZaZUMdp7b6192lobjN7cAJTFPFiSO8nfeYDvAPcAahAwSVQYTayZwL4Rt5vRh/OYM8ZUAMuAVx2Okiq+S+Qf6rDDOVJNJdAO/G90GuNPjDE5TodKBdbaFuDfiHxrux/ostY+7WyqlDPNWrs/ev0AMM3JMCnso8AfnA6RCowxNwMt1tq3nc6SzFQYSVIxxuQCjwB/Za31OZ0n2Rlj3gW0WWvfdDpLCvIAy4H/ttYuA3rQdKKYiK5nuZlIcVoK5BhjPuBsqtRlI+119Q16jBlj/oHINPZfOZ0l2RljsoG/B/7R6SzJToXRxGoBykfcLosekxgwxqQRKYp+Za1d43SeFHEJcJMxpoHI1NGrjDH/52yklNEMNFtrh0ZGf0OkUJLJ9w6g3lrbbq0dBNYAFzucKdUcNMbMAIj+bHM4T0oxxnwYeBfwfqt9X2JhDpEvYt6O/r4tAzYaY6Y7mioJqTCaWK8D84wxlcaYdCKLcR93OFNKMMYYImstdlhr/8PpPKnCWvsla22ZtbaCyN/356y1+uY8Bqy1B4B9xpgF0UNXA9sdjJRKmoCVxpjs6L89V6PGF7H2OPCh6PUPAY85mCWlGGNWE5k+fZO1ttfpPKnAWrvFWjvVWlsR/X3bDCyP/h6QCaTCaAJFFyN+BniKyC/Jh6y125xNlTIuAT5IZMRiU/RyvdOhRCbZZ4FfGWM2A0uBf3E2TmqIjtL9BtgIbCHyu1Q70k8SY8yvgVeABcaYZmPMx4BvANcYY3YTGcH7hpMZk9VJ3vvvA3nAM9Hftfc6GjIJneR9lxgwGgEVEREREZFUpxEjERERERFJeSqMREREREQk5akwEhERERGRlKfCSEREREREUp4KIxERERERSXkqjEREJO4ZY0IjWvFvMsZ8cQKfu8IYs3Wink9ERBKTx+kAIiIiY9BnrV3qdAgREUleGjESEZGEZYxpMMZ8yxizxRjzmjFmbvR4hTHmOWPMZmPMs8aYWdHj04wxjxpj3o5eLo4+ldsY82NjzDZjzNPGmCzH/lAiIuIIFUYiIpIIso6bSve+Efd1WWsXA98Hvhs99l/AL6y1S4BfAd+LHv8e8KK19lxgObAtenwe8ANrbQ1wBLh1Uv80IiISd4y11ukMIiIip2SM6bbW5o5yvAG4ylpbZ4xJAw5Ya4uMMYeAGdbawejx/dbaYmNMO1Bm//927hiXgigKA/B/IgqV2IHGDuwFUYnqFaISG7AKjW1IRCWhFZtQsIFXyFW8K5lGocCb3O9r5txbTO6U/5w509pyco/dJHettb2+vkyy2Vq7+oNHA2BN6BgBMHftm/onlpP6I2ZwAYYjGAEwdweT61OvH5Mc9vo4yUOv75MskqSqNqpq+68OCcB680YMgDnYqqrnyfq2tfb1y+6dqnrJqutz1PfOktxU1UWStyQnff88yXVVnWbVGVokef3twwOw/swYATBbfcZov7X2/t9nAWDefEoHAAAMT8cIAAAYno4RAAAwPMEIAAAYnmAEAAAMTzACAACGJxgBAADDE4wAAIDhfQIm/nqplUKR2AAAAABJRU5ErkJggg==\n", "text/plain": [ "<Figure size 1008x432 with 1 Axes>" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "fig, ax = plt.subplots(1, 1, figsize=(14, 6))\n", "mode2.output['fitresults'].plot.rmse_e()\n", "plt.show()" ] }, { "cell_type": "code", "execution_count": 31, "metadata": { "slideshow": { "slide_type": "subslide" } }, "outputs": [ { "data": { "image/png": "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vv71r3PFFVfQ0dFBXl4eDz30ENu3b+fZZ5/F3bn++ut54okn+PznP89LL7000Hs10RSMMigUCrKsupyt6jESERERkUkwNBSdqv109Pb28tJLL/HGN74RgHg8zoIFCwA4//zzed/73seNN97IjTfeeMp7XXHFFfzN3/wN73vf+7jpppuoqqrioYce4qGHHmL16tUAdHR0sH37dhYvzmxHg4JRhtXXVvCzR16muydKfl442+WIiIiIyDR2qp6dF++4fWAYXbqc4lLq33P7hNTg7pxzzjk8/fTTw8798pe/5IknnuDnP/85n/nMZ3jxxRdPeq9PfOITvPWtb+WBBx7giiuu4Ne//jXuzic/+Un+7M/+bNC1u3fvnpD6R6M5RhlWX1uJu7N9b0u2SxERERGRGW7hVTdhoZxBbRbKYeFVN03Ye+Tm5tLc3DwQjKLRKC+//DKJRILGxkZe97rX8S//8i8cO3aMjo4OioqKBuYODbVz507OO+88Pv7xj3PxxRezdetW3vzmN/Od73yHjo4OAPbt28fhw4dPep+JoGCUYcsXl2Nm2s9IRERERDKubOWlLFl7CznFpUCyp2jJ2lvOaFW6oQKBAD/5yU/4+Mc/zgUXXMCqVat46qmniMfj3HzzzZx33nmsXr2aj370o5SUlHDddddx7733jrj4wpe//GXOPfdczj//fMLhMNdccw1vetObeO9738tll13Geeedx9vf/nba29spKyvjiiuu4Nxzz83I4gvm7hN+02xYs2aNr1+/PttljOhTX/kVBblh/teH3pDtUkRERERkmtmyZQtnn312tsuYdkb63Mxsg7uvGel69RhNghW1FWzf20IsFs92KSIiIiIiMgIFo0mworaSaCzOrn1Hs12KiIiIiIiMQMFoEtTXVACwVfOMRERERESmJAWjSTCnKJ/55UVs2639jERERERk/GbKugCT5XQ+LwWjSVJfU0HD7sMkEvpDLSIiIiJjl5eXR2trq8LRGLk7ra2t5OXljet12uB1ktTXVvL4+lfY33ycqnlzsl2OiIiIiEwTVVVVNDU10dys0UdjlZeXR1VV1bheo2A0SVbUVgLQsOuwgpGIiIiIjFk4HKa2tjbbZcx4CkYTrHXzM+x/4qf0HT9CTnEpC6+6ibKVlzKvLMKcSB5bdx3m6kuXZ7tMERERERFJo2A0gVo3P8OeB+/EY30A9B0/wp4H7wSSuxDX11bSoAUYRERERESmHC2+MIH2P/HTgVDUz2N97H/ipwDU11bQcrST1rbObJQnIiIiIiKjUDCaQH3Hj5y0fUVN/zwj9RqJiIiIiEwlCkYTKKe49KTtixeUkJcTYutubfQqIiIiIjKVKBhNoIVX3YSFcga1WSiHhVfdBEAwGGB5TQUNuxSMRERERESmEgWjCVS28lKWrL2FcKQEgGBuAUvW3kLZyksHrllRW0HjwWN0dPVmqUoRERERERlKwWiCla28lPM//K/klFRQtLh+UCgCqE/NM9qm1elERERERKYMBaMMKaquo71pO+6JQe1nVZcRDAa0bLeIiIiIyBSiYJQhkao64t0d9LQcGNSemxOidlGp5hmJiIiIiEwhCkYZUlRdB0B707Zh51bUVrCz6Qh90dhklyUiIiIiIiNQMMqQnDnlhIvm0rG3Ydi5+ppK4vEEOxtbs1CZiIiIiIgMpWCUIWZGUVX/PCMfdK6upgLQRq8iIiIiIlOFglEGRarriHUeo/fo4PlERYW5VM2bQ4M2ehURERERmRIUjDKof55RR+NIw+kq2LanhUQiMeyciIiIiIhMLgWjDMotnU+ooIj2pu3DztXXVtLdE2XvwbbJL0xERERERAZRMMogMyNSXTdyj1Gt5hmJiIiIiEwVCkYZVlRVR9/xI/QeG7wCXcXcCGUlBdrPSERERERkClAwyrDISecZVbJ1V/OwVetERERERGRyKRhlWH7FIoJ5BbQ3Dt/otb62grb2bg4f6chCZSIiIiIi0k/BKMPMAkSq6ugYYQGGFbWVgOYZiYiIiIhkm4LRJCiqWk7v0UNEO9oGtS+qnENhfg5bNc9IRERERCSrJiUYmdl3zOywmb2U1vZFM9tqZi+Y2b1mVpJ27pNmtsPMGszszZNRYyZFqusBhg2nCwSMupoKGnarx0hEREREJJsmq8foe8DaIW0PA+e6+/nANuCTAGa2Eng3cE7qNd8ws+Ak1ZkRBfOqCYRz6RhpnlFNBQeaj3OsoycLlYmIiIiICExSMHL3J4AjQ9oecvdY6ukzQFXq+AbgR+7e6+67gB3AqyajzkyxQJBI1TLam4YHoxPzjDScTkREREQkW6bKHKM/AX6VOl4ENKada0q1DWNmHzSz9Wa2vrl5ag9Hi1TX09Oyn1hX+6D22qpSwqGghtOJiIiIiGRR1oORmf09EAPuGu9r3f2b7r7G3ddUVFRMfHETqKhqOQDtQ1anC4eCnFVdph4jEREREZEsymowMrPbgGuB9/mJXU73AdVpl1Wl2qa1ggW1WCg84jyjFbUV7N5/lJ7eaBYqExERERGRrAUjM1sL3A5c7+5daafuB95tZrlmVgssB57NRo0TKRAMEVl41igbvVaSSDjb97ZkoTIREREREZms5bp/CDwN1JtZk5n9KfA1oAh42Mw2mdkdAO7+MnA3sBl4EPgLd49PRp2ZFqlaTvfhRuK9XYPaly+pwMy00auIiIiISJaEJuNN3P09IzR/+yTXfwb4TOYqyo6i6noO8HM6mnYw56zzB9oL8sIsWVBCw27NMxIRERERyYasL74wmxQurMUCwVGH0+3Y00IsnshCZSIiIiIis5uC0SQKhHMpWFBLxwj7GdXXVtAbjbN735ERXikiIiIiIpmkYDTJiqrr6Dy4h3hf76D2+pr+jV41z0hEREREZLIpGE2ySHUdJOJ07t85qH1ucT7zyiKaZyQiIiIikgUKRpMssnAZmI08z6imkobdzZzY0klERERERCaDgtEkC+bmUTBvyYgbvdbXVtDe2cv+5uNZqExEREREZPZSMMqCouo6Og+8QiIWHdS+olbzjEREREREskHBKAsiVXV4PEbngV2D2ueXF1EcyWPrLs0zEhERERGZTApGWRCpXg7YsOF0ZkZ9TQUNu9VjJCIiIiIymRSMsiCUV0h+xSLaGxuGnauvqaD5SAdHjnVloTIRERERkdlJwShLItV1dO7ficdjg9pPzDPScDoRERERkcmiYJQlRdV1JKJ9dB7aM6h9ycK55OaE2KrhdCIiIiIik0bBKEsiVcsBhs0zCgYDLF9Srh4jEREREZFJpGCUJeHCOeSVzqejcfuwcytqKmk82EZnd18WKhMRERERmX0UjLIoUl1He9N2PJEY1F5fW4E7bNNwOhERERGRSaFglEWRqjoSfd10NzcNaj9rcTnBgGnZbhERERGRSaJglEVF1XUAw5btzssJUbOoVPOMREREREQmiYJRFuUUl5Izp3zYAgyQXLZ7Z2MrfdF4FioTEREREZldFIyyrKh/npEPn2cUiyd4pak1S5WJiIiIiMweCkZZFqmuI97dQU/rgUHtdTUVgDZ6FRERERGZDApGWVZUXQ8M38+ouDCPRZXFWoBBRERERGQSKBhlWc6ccsKRubSPMM+orqaSbbubSQxZzltERERERCaWglGWmRmR6uV0NG7D3QedW1FbQVdPlKZDx7JUnYiIiIjI7KBgNAUUVdcT7TxG79HB84lW1FYCsFXzjEREREREMkrBaAqIVC8HoKNp8HC68rmFlM7Jp2GX5hmJiIiIiGSSgtEUkFe6gFBB0bB5RmZGfU0lDbsPDxtmJyIiIiIiE0fBaAowMyJVdSNu9FpfW8GRY900H+3MQmUiIiIiIrODgtEUUVS9nL7jrfQeG7yha/88I+1nJCIiIiKSOQpGU0Skfz+jIfOMqubNoSAvzFbNMxIRERERyRgFoykiv3wRwdyCYcPpAoEAdTUVbNutHiMRERERkUxRMJoiLBAgUrV8xI1eV9RWsu/wcY539mShMhERERGRmU/BaAqJVNfRe/QQ0Y62Qe11NRUAWrZbRERERCRDFIymkKLUfkbtTdsHtZ9VXUY4FGDbbgUjEREREZFMUDCaQgrmLSEQzh02zygcCrK0qoytWplORERERCQjFIymEAsEiSxaNuI8o/raSnbvO0JPXywLlYmIiIiIzGwKRlNMpLqOnpZ9xLraB7WvqK0gnnB27m3JUmUiIiIiIjOXgtEUU1RdB0DHvh2D2pcvqcBMCzCIiIiIiGSCgtEUUzC/BguFhw2nK8zPYfH8uWzVfkYiIiIiIhNOwWiKCYTCFC5YSkdjw7BzdbUVbN/TQjyeyEJlIiIiIiIzl4LRFFRUXUfX4UbivV2D2lfUVNDbF2PP/qNZqkxEREREZGZSMJqCItV14E5H0+B5RvW1lQBatltEREREZIJNSjAys++Y2WEzeymtrdTMHjaz7anHual2M7OvmtkOM3vBzC6cjBqnksjCpVggSHvT4HlGpXMKqCiN0KCNXkVEREREJtRk9Rh9D1g7pO0TwG/dfTnw29RzgGuA5amvDwL/Pkk1ThmBcC4FC2qGbfQKyWW7G3Ydxt2zUJmIiIiIyMw0pmCU6sWpPt03cfcngCNDmm8Avp86/j5wY1r7nZ70DFBiZgtO972nq6KqOjoP7iHe1zuovb6mkuOdvRxsaR/llSIiIiIiMl5jCkae7J54YILfe567H0gdHwTmpY4XAY1p1zWl2oYxsw+a2XozW9/cPLOGl0Wq6yARp/PAK4Pa62srAM0zEhERERGZSOMZSrfRzC7ORBGp4DXusWHu/k13X+PuayoqKjJQWfZEFi0DMzr2Dl62e2FFMUWFudroVURERERkAoXGce0lwM1mthvoBIxkpjn/NN/7kJktcPcDqaFy/V0g+4D0YXtVqbZZJZibT0Hl4mELMJgZ9TUVNGijVxERERGRCTOeHqM3A0uB1wPXAdemHk/X/cCtqeNbgfvS2m9JzWu6FDiWNuRuVolU19G5/xUSseig9vraSg61dnD0eHeWKhMRERERmVnGE4wOAlcA7yMZZPq/TsnMfgg8DdSbWZOZ/SnweeCNZrYdeEPqOSTnMr0C7AD+A/jwOGqcUYqq6/B4jM4Duwa119ckhw2q10hEREREZGKMZyjdfcAxYAPQe4prB3H394xy6uoRrnXgL8Zz/5kqUrUcgI6mbRRV1w201ywqJTccpGFXM5eevyRb5YmIiIiIzBjjCUZV7j50LyLJoFB+hPyKRbQ3bmPBZWntwQDLlpRrZToRERERkQkynqF0T5nZeRmrREYUqaqjc99OPB4b1F5fU8neA210dfdlqTIRERERkZnjlMHIzF40sxeAK0ku2d1gZi+ktUsGFVXXk4j20nVo76D2+toK3J3te1uyVJmIiIiIyMwxlqF012a8ChlV/zyj9sZtFC5cOtC+fHE5gYDRsOswF9QvzFZ5IiIiIiIzwil7jNx9T/8XUEJyie7rgJJUm2RQODKH3NL5dDQO3s8oLzdMzaJStmqjVxERERGRMzbmOUZm9lfAXUBl6us/zewjmSpMTiiqqqNj33Y8kRjUXl9Twc7GVqKxeJYqExERERGZGcaz+MKfApe4+z+6+z8ClwL/IzNlSbpI9XLivd10NzcNal9RW0k0FmdX05EsVSYiIiIiMjOMJxgZkN41EU+1SYYVVdcDyXlG6epSG71q2W4RERERkTMznn2MvgusM7N7U89vBL494RXJMDnFpeTMKaejaRvz1rxhoH1OJI8FFcU07NY8IxERERGRMzHmYOTu/2Zmj5Fcthvgj939uYxUJcMUVddxbOcLuDtmJzrqVtRW8OyLjSQSTiCgDjwRERERkdMxnqF0uPtGd/8q8F/ApoxUJCOKVNUR6+6gp/XAoPb6mko6u/vYd/hYlioTEREREZn+xrLB66Vm9piZ/dTMVpvZS8BLwCEzW5v5EgWSCzAAw5btrq/VPCMRERERkTM1lh6jrwGfBX4IPAJ8wN3nA1cBn8tgbZImt6SScKRk2AIMlaURSoryadB+RiIiIiIip20swSjk7g+5+38DB939GQB335rZ0iSdmRGpqqOjaRvuPqh9RW0FDbvVYyQiIiIicrrGEozSdxXtHnLOkUlTVF1HtKON3rbBIai+tpLWti6aj3ZkqTIRERERkeltLKvSnW9mx0nuWZSfOib1PC9jlckwkeo6ADoat5M3d95Ae/88o4ZdzVTMjWSlNhERERGR6WwsPUZXASXuXuTuIXcvTn0VuXs40wXKCXllCwjlR2hvbBjUvnh+Cfl5YRq0AIOIiIiIyGkZSzB6P7DezH5kZreZ2fxMFyUjMzMi1XV0NG0f1B4IBKhbUq6NXkVERERETtMpg5G7/7m7Xwh8GpgLfM/Mnjazz5rZVWYWzHSRckKkqo6+Yy30HW8d1F5fW0nToWO0d/ZmqTIRERERkelrzBu8uvtWd/+Su68FXg88CbwDWJep4mS4otQ8o6HLdtfXJOcZbVOvkYiIiIjIuI1lg9evm9mV6W3u3u3uD7j7R9x9TebKk6HyK6oI5ubT0Th4ON1Z1eWEggEt2y0iIiIichrG0mO0Dfiime02sy+Y2epMFyWjs0CASNXyYQsw5ISDLK0qZas2ehURERERGbexzDH6irtfBrwGaAW+Y2ZbzeyfzKwu4xXKMJGqOnqPHiLacWxQe31tJbv2HaG3L5alykREREREpqfxzDHa4+7/4u6rgfcANwJbMlWYjK5/ntHQ1elW1FYSjyfY2dg60stERERERGQUYw5GZhYys+vM7C7gV0ADcFPGKpNRFcxbTCCcO2w43fIl5ZiheUYiIiIiIuMUOtUFZvZGkj1EbwGeBX4EfNDdOzNcm4zCgiEKF51FR9PglekiBblUzSvRPCMRERERkXEaS4/RJ4GngLPd/Xp3/y+Fouwrqq6ju3kfse6OQe31tRVs391MPJ7IUmUiIiIiItPPWBZfeL27fwtoM7ObzewfAcxssZm9KuMVyogiVaPMM6qppKcvxt4DbVmoSkRERERkehrzHCPgG8BlJIfVAbQDX5/wimRMChfUYsHQ8I1eaysB2Kp5RiIiIiIiYzaeYHSJu/8F0APg7keBnIxUJacUCIUpXLiUjiHBqKykgPK5hTRonpGIiIiIyJiNJxhFzSwIOICZVQCayJJFRVV1dB3eS7y3e1D7itoKGnYdxt2zVJmIiIiIyPQynmD0VeBeoNLMPgM8CXw2I1XJmEQW14M7Hft2DGqvr6nkWEcPh1o7RnmliIiIiIikO+Vy3f3c/S4z2wBcDRhwo7trg9csKlywFAJBOhq3MWfpeQPtA/OMdh1mfnlRtsoTEREREZk2xhyMANx9K7A1Q7XIOAVzcimcXzNsAYaFFcVECnJo2HWY1158VpaqExERERGZPsY8lM7M1pjZvWa20cxeMLMXzeyFTBYnpxapXk7nwd0kor0DbYGAUV9TScNuLcAgIiIiIjIW45ljdBfwXeBtwHXAtalHyaKiqjpIxOnY/8qg9vraCg62tNPW3j3KK0VEREREpN94glGzu9/v7rvcfU//V8YqkzGJVC0Ds2HLdtfXJOcZbVOvkYiIiIjIKY1njtE/mdm3gN8CA+O23P2nE16VjFkwt4CCyuph84xqF80lJxxk667DvOq8xVmqTkRERERkehhPMPpjYAUQ5sT+RQ4oGGVZpLqe5k2PkYhFCYTCAIRCQZZVl7NVG72KiIiIiJzSeILRxe5en7FK5LQVVddxeP3DdB3cTaRq+UB7fW0FP3vkZbp7ouTnhbNYoYiIiIjI1DaeOUZPmdnKjFUipy2yaBkA7Y0Ng9pX1Fbi7mzf25KNskREREREpo3xBKNLgU1m1jCRy3Wb2f80s5fN7CUz+6GZ5ZlZrZmtM7MdZvZjM8s50/eZyUIFReSVL6Kjcfug9mWLyzEzGnYdzlJlIiIiIiLTw3iG0q2d6Dc3s0XAR4GV7t5tZncD7wbeAnzJ3X9kZncAfwr8+0S//0xSVF1H60tP4Yk4FggCkJ8XpmbhXBo0z0hERERE5KTG3GOUvkT3BC/XHQLyzSwEFAAHgNcDP0md/z5w4wS8z4wWqa4jEe2l69DgH0l9bQU7GluIxeJZqkxEREREZOobz1C6Cefu+4B/BfaSDETHgA1Am7vHUpc1AYuyU+H0UVRVB0D7kOF0K2or6YvG2bXvaDbKEhERERGZFrIajMxsLnADUAssBAoZx5A9M/ugma03s/XNzbN7uFg4MofcufPoGLIAQ31NBQBbNc9IRERERGRUpwxGZnaZmVmG3v8NwC53b3b3KMk9ka4ASlJD6wCqgH0jvdjdv+nua9x9TUVFRYZKnD6KquvoaNqOJxIDbXOK8plfXsS23bM7OIqIiIiInMxYeoxuATaY2Y/M7DYzmz+B778XuNTMClLh62pgM/Ao8PbUNbcC903ge85Ykeo64r3ddLcMzpEraitp2H2YRMKzVJmIiIiIyNR2ymDk7n/u7hcCnwbmAt8zs6fN7LNmdpWZBU/3zd19HclFFjYCL6bq+SbwceBvzGwHUAZ8+3TfYzYpqk7OMxo6nK6upoKOrj72Nx/PRlkiIiIiIlPeeFal2+ruX3L3tSRXjXsSeAew7kwKcPd/cvcV7n6uu7/f3Xvd/RV3f5W7L3P3d7h775m8x2yRU1xGTnHZiAswANrPSERERERkFKe1+IK7d7v7A+7+EXdfM9FFyemLVNfR0bQN9xPD5uaVRZgTyaNht4KRiIiIiMhIsroqnUy8ouo6Yl3t9Bw5MNBmZtTXVrJVG72KiIiIiIxIwWiGiaT2M+rYu21Q+4raClqOdtLa1pmNskREREREprRxByMzKzyTBRcks3LnVhIunEN70+BgVF/TP89IvUYiIiIiIkONZR+jgJm918x+aWaHga3AATPbbGZfNLNlmS9TxsrMkvOMGrcPmme0eEEJ+bkhtmqekYiIiIjIMGPpMXoEOAv4JDDf3avdvRK4EngG+BczuzmDNco4FVXXEe04Sl/bid6hYDDAsiUV6jESERERERnBWILRPnf/P+7+grsn+hvd/Yi73+PubwN+nLkSZbwiqf2Mhg6nW1FbQdOhNjq6tPq5iIiIiEi6sQSjs/sPzOyhkS5w9+iEVSRnLK9sAcH8CB2Nw+cZucO23eo1EhERERFJN97FFyoyUoVMKLMARVXLaR8SjJYtLiMYDNCgYCQiIiIiMshYgtF8M7vNzFYDlumCZGJEquvoO9ZC3/EjA2054RBLq0pp2KUFGERERERE0o0lGH0auAj4MlBlZi+a2Y/M7B/M7G2ZLE5OX1F1PcCwXqP6mgp2Nh2hLxrLRlkiIiIiIlPSKYORu3/T3T/i7q9x93LgGuD7QB9wY4brk9OUX1FFMDefjqH7GdVWEo8n2NnYmqXKRERERESmntCpLjAz87QNcdy9CWgCfjXaNZJ9FggQWTR8nlHdkuQ0sYbdzZy9dF42ShMRERERmXLGMpTuUTP7iJktTm80sxwze72ZfR+4NTPlyZmIVC+n98hBop3HBtqKCnOpmjdH84xERERERNKMJRitBeLAD81sv5ltNrNdwHbgPcCX3f17GaxRTlP/fkYdjdsHtdfXVrJtTwuJRGKkl4mIiIiIzDpjmWPU4+7fcPcrgCXA1cBqd1/i7v/D3Z/LeJVyWgrnLSEQzhm20Wt9TQXdPVH2HmzLTmEiIiIiIlPMuPYxcveoux9w97YM1SMTyIIhCheeNWyj1xW1lQA07NJ+RiIiIiIiMIZgZGa3px2/Y8i5z2aiKJk4RdX1dDfvI9bdMdBWPreQspICzTMSEREREUkZS4/Ru9OOPznk3NoJrEUyIDnPyOlo2jGovb6mkq27mtFigiIiIiIiYwtGNsrxSM9liilcUIsFQ7Q3Ngxqr6+toK29m8NHOkZ5pYiIiIjI7DGWYOSjHI/0XKaYQChM4YKldDQNXplO84xERERERE4YSzC6wMyOm1k7cH7/cer5eRmuTyZApLqOrkN7iPd2D7QtqpxDYX4OWzXPSERERERkTMt1B9292N2L3D2Udlzk7uHJKFLOTFF1HbjTsW/nQFsgYNTVVNCwWz1GIiIiIiJjWZXuYjObn/b8FjO7z8y+YmalmS1PJkLhwrMgEKSjaeiy3RUcaD7OsY6eLFUmIiIiIjI1jGUo3f8D+gDM7Crg88CdwHHgm5krTSZKMCeXwvlLhi/AUJOcZ7RNvUYiIiIiMsuNJRgF3f1I6vhdwDfd/R53/wdgWeZKk4kUqaqj68BuEtHegbalVaWEQ0HNMxIRERGRWW9MwcjMQqnjq4FH0s6FRrhepqCi6jo8Eadj/ysDbaFQkGWLy7TRq4iIiIjMemMJRj8EHjez+4Bu4HcAZrYMOJbB2mQCRaqWAUZH4+B5RvU1Fezef5Se3mh2ChMRERERmQLGsirdZ4C/Bb4HXOnu/XsXBYCPZK40mUjB3ALyK6uH7WdUX1tJIuFs39uSpcpERERERLJvLD1GuPsz7n6vu3emtW1z942ZK00mWlF1HR37d5KInegdWr6kAjPTRq8iIiIiMqudco6Qmd1/svPufv3ElSOZFKmu4/CG39B1cDeRquUAFOSFWbKghIbdmmckIiIiIrPXWBZPuAxoJDnXaB1gGa1IMqYoFYbaG7cNBCNIDqd77NkdxOIJQsExdSKKiIiIiMwoY/kteD7wKeBc4CvAG4EWd3/c3R/PZHEysUIFReSVLxy20Wt9bQW90Ti79x0Z5ZUiIiIiIjPbWBZfiLv7g+5+K3ApsAN4zMz+MuPVyYQrqqqjo2kHnogPtPVv9Kp5RiIiIiIyW41p3JSZ5ZrZTcB/An8BfBW4N5OFSWZEqutIRHvpOrR3oG1ucT7zyiKaZyQiIiIis9ZYFl+4k+QwugeA/+3uL2W8KsmYSFUdAB2N2yhcUDvQXl9byXNb9uHumGkamYiIiIjMLmPpMboZWA78FfC0mR1PfbWb2fHMlicTLaeohNySStpH2Oi1vbOX/c36kYqIiIjI7HPKHiN3HzE8mVkQeM+EVyQZF6muo23bRtwTmCV/vCtqT8wzWlQ5J5vliYiIiIhMulP2GJlZsZl90sy+ZmZvtKS/JLkIwzsyX6JMtKLqOuK9XXQ37xtom19eRHEkT/OMRERERGRWGss+Rj8AjgJPA/8D+HuSexn9kbtvylxpkimR6nogOc+ooLIaADOjvqaCrVqZTkRERERmobHMMVrq7re5+/8jOXRuJfBmhaLpK3dOGTnFpbQP2c9oRW0lzUc6OHKsK0uViYiIiIhkx1iCUbT/wN3jQJO790xUAWZWYmY/MbOtZrbFzC4zs1Ize9jMtqce507U+0lSpLqejsZtuPtAW3dv8kf9l5+5l49+9l6e3LgrW+WJiIiIiEyqsQSjC9JXogPOn+BV6b4CPOjuK4ALgC3AJ4Dfuvty4Lep5zKBiqqWE+tqp/fIQQCe3LiL+x99eeB8S1sX37pnncKRiIiIiMwKpwxG7h509+LUV5G7h9KOi8/kzc1sDnAV8O3Ue/W5extwA/D91GXfB248k/eR4SLVyf2M+pftvvvBTfRF44Ou6YvGuesXG0kkEpNen4iIiIjIZBpLj1Em1QLNwHfN7Dkz+5aZFQLz3P1A6pqDwLysVThD5c6dR6hwDh2pYNTSNvK8omMdPXz4//yUO378NOte2EtXT3TE60REREREprOxrEqX6fe/EPiIu68zs68wZNicu7uZ+UgvNrMPAh8EWLx4caZrnVHMjKKq5bSn5hmVlxSMGI6KCnI5r24BGzY38cSGVwgGA6yoreTClYu48OxFzCsrykL1IiIiIiITK9vBqInkYg7rUs9/QjIYHTKzBe5+wMwWACNuruPu3wS+CbBmzZoRw5OMLrK4nqMN6+k71sI7167iW/esGzScLicc5P3XX8SVF9YSjyfYvreF57bsY+OWffzg/g384P4NLKwsZvWKZEhaXlNBKJjtTkgRERERkfHLajBy94Nm1mhm9e7eAFwNbE593Qp8PvV4XxbLnLGKqk7MM7rywiuA5Fyj1rYuykoKeOfaVVx5YS3AQE/RitpK3vOW1RxqbWfT1v1s3LKPX/++gV8+sYWC/BwuqFvA6rMXcUH9QooKc7P2vYmIiIiIjIelL9eclQLMVgHfAnKAV4A/Jjn36W5gMbAHeKe7HznZfdasWePr16/PbLEzjHuC5//v/6Rk2QXUvOVPTvs+3T1RXtpxkOe27OO5Lfs41tGDmVG3pJzVZy/iwpVVLKosxswmsHoRERERkfExsw3uvmakc9keSkdqo9iRirt6kkuZdcwCFFXX0d60/Yzuk58X5uJzq7n43GoSCWfXviPJIXebm/jRrzbxo19toqI0woVnL2L12Ys4e2kl4VBwgr4LEREREZEzl/VgJNkVqVpO2/bn6Gs/Qk5R6RnfLxAwzqou46zqMt7+pvM5cqxroCfp0Wd38OvfN5CbE+L81JC7VSsWUlKUPwHfiYiIiIjI6VMwmuWKqusB6GjcTunKSyb8/qVzCrj60uVcfely+qIxXt5xiOe2JoPSH15qBGBpdRkXrkj2JtUsmqshdyIiIiIy6RSMZrn8ymoCOfm0N27LSDBKlxMOsTo1nM5vdBoPtrEx1Zt0z29e4CcPv8Dc4vyBa85dNp/cHP0RFREREZHM02+ds5wFAkSqltHR2DC572vG4gVzWbxgLje+/lyOdfTwfGqVu6c37eaRdTsIh4Kcs2xeMiitWET53MJJrVFEREREZg8FI6Gouo59r7xItPM44cLirNQwJ5LHVWuWctWapcRicbbuak7tmdTEpq37+S5/YPGCkoHepGXVZQQC2jNJRERERCaGgpEQSe1n1NG0jbn1I65eOKlCoSDnLp/Pucvnc/N1F3KguX1gAYefP7aZ+x55maLCXFatWMiFZ1dxXt0CNm5u4u4HN9HS1kX5kD2YRERERERORcFIKJi/hEA4h/bGqRGM0pkZCyuLWVhZzFtfczYdXb28uO3AwAIOv9uwCwMw6N+Sq6Wti2/dsw5A4UhERERExkTBSAgEQxQuPIuOxm3ZLuWUIgW5XLaqhstW1RCPJ9i+t4UvfudRuntjg67ri8a5+8FNCkYiIiIiMiaapCFAcp5Rd/M+Yt0d2S5lzILBACtqK4eFon4tbV3EYvFJrkpEREREpiMFIwH65xk5Hft2ZLuUcSsvKRj13Mf/7Zds2rpvEqsRERERkelIwUgAKFxQiwVD02I43VDvXLuKnHBwUFtOOMhbrzobgC985zG++J1HOdB8PBvliYiIiMg0oDlGAkAgnEPhglrap2Ew6p9HdPeDm2ht66IsbVW6d629gAd/38C9v3mR2//tl1xzZT03Xn0eBXnhLFctIiIiIlOJgpEMiFTXcfCZXxHv7SGYm5ftcsblygtrR1xoIRQKcu1rVnLlhbX8+Feb+MXjW3hy4y7efc1qrrywlkDAslCtiIiIiEw15v1rHE9za9as8fXr12e7jGmt6fGfcGjdgwDkFJey8KqbKFt5aZarmlg7G1v5/n3r2bG3hbOqy7j1hjUsW1ye7bJEREREZBKY2QZ3H3F/GgUjAaB18zPsefD7eCw60GahHJasvWXGhaNEwnnyuV386IHnaGvv4aqLlvKua1Yxtzg/26WJiIiISAadLBhpKJ0AsP+Jnw4KRQAe66Pp0f+mdMWrsMDMWacjEDCuumgpF59Tzc8eeYlf/W4rz764lz96w3lcc2U9oVDw1DcRERERkRlFPUYCwIYvfGDUc8HcAiJVy4hU1VG0uI6CysVYcOZk6oMt7fznzzewccs+5pcX8f7rLmL12YuyXZaIiIiITDD1GMkp5RSX0nf8yLD2YH4hc5dfSHvjNo7tfAGAQDiXwkVnUVRVR6S6jsIFtQRC03eVt/nlRXzsj1/L8w37ufP+DXzxu49xQf1C3n/dRSysLM52eSIiIiIyCdRjJED/HKM78VjfQNvQOUbRjmO0N22jo3EbHU3b6G5ObpxqwRCFC5ZSVJ0KSgvPIpiTm5Xv40zFYnF+/dQ2fvqbF+nri7H2yhX80Ru0vLeIiIjITKDFF2RMWjc/w/4nfkrf8SNjWpUu1t1BR9N22hu30dG0na5De8AdAkEK5y9JDr2rrqNw0TJCeQWT+J2cuWPt3fz4wed5fP1OigvzeNc1q7jqoqVa3ltERERkGlMwkkkR7+2mY99OOpq20d7YQNeB3XgiDhj5ldWpHqXlRKrqCBcUZbvcMXmlsZXv37+e7XtaWFpdxq3Xr2H5Ei3vLSIiIjIdKRhJViSivXTu33Vi+N3+nQMr3+WVLSRSvZyi6noiVXXkFJVkt9iTcHd+/9xu/uuXz9HW3s2VF9bynmtWMXfO9OoFExEREZntFIxkSkjEY3Qd3J0cete4jY59O0j09QCQW1JBpDo59C5SVUfOnHLMptawte6eKPc9+hIPPLGVUDDAjVefyzWvXkFYy3uLiIiITAsKRjIleSJO1+FGOhq3DcxTivd0AhAuKqUoNeyuqLqO3NL5UyYoHWxp565fbGTD5ibmlRVx83UXcuHZi6ZMfSIiIiIyMgUjmRbcE/S07B/oUWpv2kas8zgAoYKiZI9Saonw/IpFmJ3YdHa8C0dMhBe2HeDO+9ez//Bxzq9bwPuvv4hFlXMy+p4iIiIicvoUjGRacnd6jx5KhaTtdDQ2DOy1lNx0djmR6joS0T4OrvvVSZcaz5RYPMHDT23jJw+/QF9fjDdfUc9NbziPgvycjL6viIiIiIyfgpHMGL3HWpOr3u1toKNpO71HD416bU5xKed96AuTUtexjh7ufnATj/1hJ0WFebxr7QW8Zs1ZWt5bREREZApRMJIZK9rRxgvf+Nio5y+6/VuTWA280tTKnfetZ9ueFmoXlXLrDWuoq6mY1BpEREREZGQnC0aBkRpFpotwpISc4tJRzhoHnvoF8d7uSatnaVUZ//ThN/EX77mctvZuPv2Nh/j6D3/PkWNdk1aDiIiIiIyfeoxk2mvd/Ax7Hrxz8ByjYJi8svl0H24kmFfI/EvWUrH6dQRz8iatrp7eKPc9+jK/fHwLwWCAG19/Dte8+mxywlreW0RERCQbNJROZrzRVqXrPLCL/b+/j+OvvESooIj5l1xDxarXEAjnTlpth1qTy3uvf7mJytIIN193IRetrNLy3iIiIiKTTMFIZr2OfTvY/+R9tO/ZQqhwDgsuvYbyC15DIBSetBpeTC3vve/wcc5bPp9brl/Donla3ltERERksigYiaS0721g/5P30dG0jXBkLgsuewtl57+aQDA0Ke8fiyd4+Olt3PPQC/T2xXjT5fXc9MbzeG7LPu5+cBMtbV2UlxTwzrWruPLC2kmpSURERGS2UDASSePutO/dyv7f/YzO/TvJKS5lwWXXUnbu5dgkBaTjHT3c/evnefTZHeSGg0TjTjyeGDifEw7ygbddonAkIiIiMoEUjERG4O4c3/Uy+5/8GV0Hd5NTUsHCy6+ldOWlWGByFkjY1XSEf/r6r4mlhaJ+5SUFfPVTfzQpdYiIiIjMBicLRpPz3+MiU5CZMWfpuRTXnsOxnS+w/8n72P3Adznw9AMsvOJ65q64GAtkdkX72qrSEUMRQEublvgWERERmSzax0hmPTOjZNkFnH3rP7D0xg9jwRC7fvEfbP7upzm6dT3uIweXiVJeUjDqua/91+9p2H2YmdKzKyIiIjJVaSidyBDuCY42bODAk/fRc+Qg+RVVLLzyBuYsW5WRJbaf3LiLb92zjr5ofKAtHAqyoraCHY2tdPdEWbyghDdeVscVq2vIy528lfREREREZhLNMRI5DZ5IcGTLsxx46uf0Hj1EwbzFLLzyRoqXnjfhAenJjbu4+8FNtLZ1UZa2Kl1PX4ynntvNw09tY8+Bo+Tnhnj1RUt5w2V1VGmpbxEREZFxUTASOQOeiNP68jMceOrn9B1roXDBUhZeeQNFNSsnbZNWd2f73hZ+8/Q2nnl+L7F4gpVL5/GGy5ez5pxqQkGNihURERE5FQUjkQng8RgtLz3Fgad+QbT9CJGq5Sy84gaKlqyY1DqOd/Tw2B928ttnttN8tJOSojxef8lyXveqZZSdZL6SiIiIyGw35YORmQWB9cA+d7/WzGqBHwFlwAbg/e7ed7J7KBjJZEnEorS8+CQHn/4l0Y42ItX1LHr1jUSqlk9uHYkEzzcc4OGnt/F8w37MjItWVvGGy5Zz7rL5k9abJSIiIjJdTIdg9DfAGqA4FYzuBn7q7j8yszuA59393092DwUjmWyJWJTmTY9zcN0DxDqPU1SzkoVX3kBk4VmTXsuh1nYeWbeDR5/dSUdXLwvKi3jDZXVctWYphfk5k16PiIiIyFQ0pYORmVUB3wc+A/wNcB3QDMx395iZXQZ82t3ffLL7KBhJtiSivRx+7jEOrfsVse4Oipeex8IrbqBwQc2k19IXjbPuhT385pntbN/TQk44yOWranjjZXXUVpVOej0iIiIiU8lUD0Y/AT4HFAEfA24DnnH3Zanz1cCv3P3ck91HwUiyLd7Xw+GNj3Do2QeJ93QxZ9kqFl55AwWV1VmpZ/e+Izz89Haeem4XvdE4yxaX8YbL6rj0/CXkhINZqUlEREQkm6ZsMDKza4G3uPuHzey1jDMYmdkHgQ8CLF68+KI9e/ZMUuUio4v3dnN4w2849IeHiPd2U1J/EQuvuJ788kVZqaezu4/fbXiFh5/ezoHm40QKcnntxUu5+tLlzCsrykpNIiIiItkwlYPR54D3AzEgDygG7gXejIbSyTQX6+nk8B8e5tCG35Do62XuiotZeMX15JXNz0o97s7mnYd4+OltrH+5CXfn/LqFvPGy5axasZBAQEt+i4iIyMw2ZYNRuv4eo9TiC/8N3JO2+MIL7v6Nk71ewUimqlh3B4ee/TWHN/6WRCxK6cpLWXD5teTNnZe1mo4c6+KRdTt4ZN0O2tq7KZ9byBsuXc5rLj6LOZG8rNUlIiIikknTMRgtJblcdynwHHCzu/ee7PUKRjLVRTuPc+jZBzn83KN4PE7ZuZez4PJryZ1TTuvmZ9j/xE/pO36EnOJSFl51E2UrL814TbF4gg0vN/Hw09vYvPMQoWCAS85fzBsvq2P5knIt+S0iIiIzyrQIRmdKwUimi2hHGwfX/YrmTY/j7kQWLafzwE48Fh24xkI5LFl7y6SEo35Nh47x22e288SGV+juibJkwVzecNlyrlhdQ15ueNLqEBEREckUBSORKaiv/QgHn36A5k2PjXg+p7iU8z70hcktCujpjfL753bz8NPb2Hugjfy8MK++sJY3XFZH1bw5k16PiIiIyEQ5WTAKTXYxIpKUU1TK4jfdPGow6jt+hGhHG+FIyaTWlZcb5upLl/P6S5axfU8LDz+9jUfW7eChp7axcuk83nD5ctacU00oqMUaREREZOZQj5FIlr14x+30HT8y6vn8ikUU15xDUc1KiqqWEwjnTmJ1Scc6enj8Dzv5zTPbaTnaSUlRPq+/ZBmve9UytrxyiLsf3ERLWxflJQW8c+0qrrywdtJrFBERETkVDaUTmcJaNz/DngfvxGN9A20WymHBpW/BAgGO795Mx74deDyGBUNEqpZTXLOS4ppzyK+swmzyem4SiQSbtu7n4ae388K2/bhDwIxE2t8jOeEgH3jbJQpHIiIiMuUoGIlMcadalS7e10tH03aO736Z47s309OyD4BQQRHFS1ZSXLuSoiXnkFNUMmk1H2pt51NffoDu3tiwc3MieXzpEzeQl6PRuiIiIjJ1KBiJzDB97W2070mGpOO7NxPragcgr3xhKiidQ6SqjmBOZofdvff2u0Y9FwgY1fNKOGtxGcsWl7OsuoyFlcXaSFZERESyRosviMwwOUUllJ17BWXnXoF7gu7DTamQ9DLNmx7j8IbfJIfdLVp2YtjdvOoJH3ZXXlJAS1vXsPbiwlxef+lydu5t4Znn9/DIuh0A5OeGqK0qY9niMs6qLmfZ4nLmFudPaE0iIiIip0M9RiIzTCLalxp2lwxK3c1NAITyIxQtWZkKSivJKS494/d6cuMuvnXPOvqi8YG2oXOMEgnnQMtxdja2snNvCzv2trL3wFHiieTfPWUlBamQlOxZql1USq6G4ImIiEgGaCidyCwW7TjG8T2bTwy76zwGQF7pfIprz6G45hwi1XUEc/JO6/5PbtzF3Q9uorWti7IxrkrXF42xe99RduxtYUcqMDUf7QRSQ/Dml7CsuoyzFid7lRZWFBMI2GnVJyIiItJPwUhEAHB3elr2DfQmtTduw2NRLBCkcNFZFNecQ3HNSgrmLcEmeS7QsfbugZC0o7GVnY2tdPdEgeQQvKXVZYN6lkqKNARPRERExkfBSERGlIhF6di3g+O7Xk4OuzvcCEAwr5DiJWdTXLOSoppzyJ1TNvm1JZwDzckheDsak0PwGtOG4JWXFCR7lKrLOWtxmYbgiYiIyCkpGInImEQ7j9O+Z8vAsuDRjjYAcufOSw67W7KSosX1BHNP9NacaqnxidQXjbFr3xF27D3Rs9SSNgRv8fyS1PC7ZO+ShuCJiIhIOgUjERk3d6en9UAqJL1MR+M2EtE+CASJLFxKcc1K3J2D6x4ctjntkrW3ZCwcDXWsvZsde0/0Kr3SlDYELy/M0tQqeMtSw/DmpA3B658f1dLWRfkY50eJiIjI9KVgJCJnLBGL0rlv50BvUtehvcDIf3/kFJdy3oe+MLkFpvQPwesPSjv3trD3YBuJ/iF4cwtZVl1GIGD84aVGorHEibqHrKgnIiIiM4uCkYhMuFhXO89/7X+Oer649lzyK6rIr1hEfkUVeWULCASzMweoty85BG9nqmdp596WEfdfAijMz+HD776cirmFlM8tJC83PMnVioiISKZog1cRmXChgiJyikvpO35k2LlAKIdo5zHa92zBE6k9jgJB8krnk1+xiIKKqlRoqiJcNBezzM4Dys0JsaK2khW1lQNt7739rhGv7ezu44vffWzgeVFhbiokRaiYW0hFaSEVqePy0gh5WvBBRERkRtC/6CJy2hZedRN7Hrxz2Byjxak5Rh6P0XP0EN2Hm+hu2Uf34SY69+3g6JZnB64P5uYPhKSBHqbyRYMWeMiE8pKCEXuNSufk81c3X0Xz0Q5ajnbSfKSD5qOdNB5s47ktTYOG3gEUF+ZSXpoKTXOToal8biEVpclHBScREZHpQf9ii8hp619gYbRV6SwYIr88GXTSxXq66GnZR1dzE93NTXQ376P15adJ9PUMXJMzpzz52sqqgce8ufOwQHBCan/n2lV865519EXjJ94zHOTd16xm+ZJyli8pH/aaRMI53tlD85H+wJQMTc1HO9m7/ygbN48hOA0cJ4OTlhgXERGZGjTHSESmBHen7/gRupsb6W7eNxCYeo4cBE+GDQuGyCtbOGw4Xqiw+LSG4/WvStfa1kXZBKxKl0g4xzp6kr1NRzoHBaeWVM9TLD4kOEXyBoWm8iE9TycLTlpVT0REZHy0+IKITFuJWJSe1gMDQak71csU7Tw2cE0oPzLCcLyFBMK5Wax8uETCOdbenQpLqdB0pJOW1HHLyYLTkF6nvQeOcs/DLw7r8dKqeiIiIqNTMBKRGSfW1U53c/pwvCZ6Wvcn91oCwMidWzloZbz8ikXkllRgFgAmd3PasThZcDp8pJOWtk7iQ4LTUHm5Id7y6rMpKsylqCA3+Zj2lRPW0D0REZm9FIxEZFbwRILetma6W5oGDcfrPXqY/j2XAuEc8soXYcEwXft3nlg1j8nfnHa8Egmnrb2b5qMd/O9vPHxa98gNBykqzCUyKDTlDQtR6efDoYmZ1yUiIpJtWq5bRGYFCwTIK51HXuk85tZdNNAe7+ulp3X/oOF47Y0NMOQ/hjzWx+4HvkPLpscJ5UcI5RcRKogkjwuKUm2RgXOBnNyMLzWeLhAwSucUUDqnYNRV9cpLCvjSx2+gs7uP9s5e2rt6ae/spSPtOPnVQ3tXH4ePdNLe1UtXd98I75iUlxMaNTQlA1XesPOhYOCk34vmR4mIyFSjYCQiM14wJ5fCBbUULjjxi/eGL3xg5IsTCbAAPUcPE9u/k1hXx8DiD0NZMDQkLKUFqKFBqiAVpkITs2HsO9eu4vH7f8ZluTsoDvRyPJHL073LeM3aGwkGAxRH8iiO5I35frF4gs704NQ15DGtfX9zOx1dvXT3REe9X35eePhQvoJcIoW5HGpp5/fP7R6YT9XS1sW37llHPJ7gNRefdcafjYiIyOlQMBKRWWm0zWlzikupf8/fDTx3d+K93cS624l1dxDr6kg+dnck29Kedx1uJNbdQbync9T3DYRzh4Sl9J6pouHn8gqx4PC/qs/OO0RepAFLxACYE+zlzZEGavMOAePveQkFA8wpymdO0dj3j4rF4rR39SV7n4aEqI6042PtPTQdOkZ7Zy+9fbER79UXjfP//vsZvvXTZ8nLCZGfGyI3N5x8zEk+5uWGycsNkZ8bJjcn+ZiXEyJvpHN5yXO5OaEJ79VTb5eIyMykYCQis9Jom9MuvOqmQdeZGaG8AkJ5BTB33pju7Yk4sZ6uYcEpGazaB4WqniOHiHV3DNrDaahgbsGQIBXh6LaNA6FooNZEjH2P30Pp2a8aWGAik0KhIHOL85lbPPYw1ReNc9vf/2jU82+96mx6eqP09Mbo6YvS3RujtzfK8Y6eZHtfjJ7e6LD9okZjRioghQeFrWSgCo8QtkYJYKn2DS838Z17nx1YDbC/twuYNuFIwU5EZGQKRiIyK51qc9ozYYEg4YIiwgVFUDa21yRiUWLdnSd6pgaCVHrPVDt97UfpOtw4apCKth9l47/+GaG8QkL5EYIjDOdLPi88cVwQIZibPylhKiccPOn8qHdfs2pM94nFE/T0Runti9HdGxsIU90DbdETAWtIyOrujXH0eDc9fe1pIWzknqyx6IvG+eZ/P8Njf9hJOBQkJxwkFAwQDgeTz0NBwuEA4VAw7evE+f7XhENBQqFA8vpQMO18IHXPIIHAmfV+Pblx16CNjadjsBMRyRQFIxGZtcpWXjplVqALhMLkFJWQU1QyputfuON2oiMMBQzmFlB54esHhau+Y810HdhFrLtj0Cp8g1ggLSwVDl98YthcqgiBnPzTGqZ2svlRYxUKBogUJBd6mAiJhNPbFxvokerpD1sDISv5/D9/sXHE18fiCRKJBO1dMaLRONFY6mvgODFsj6rTEQwGyAkFhgSnVNAa0paTCmOh/nAWCvDQU9sG7X0FyWD3nz/fwNzifHLCoYGQlhMe/BUIZD44n4p6u0QkkxSMRESmoUWjDAWsfuN7Rw177k6ir3eEXql2Yj2dacP+2uk5eii5+ER3J4wWpgLBtLA0uAdqxDCVWslvoudHTYRAwMjPC5OfFwZGHxr44JNbKe96hSsLXxkIdU92LqWlYCn/+OdvOul7JBJOLB6nL5oMSgPBKR4nGk0MhKm+tGAViyXoGxSwktf2xeLEYidCV/9revtidHT2Eo0nhgW0vliC0bboON7Zy2e++duT1h8MWDI0jRaeUsEseS400D74ulCqByzt/JDX5oRDA8/TVzecCb1dCnYiU5uCkYjINHQ6QwHNjGBuHsHcPHJLKsb0Pskw1T3yohMDYSoZtHpa9w9cM3Qp9IEagiE8EceGnLdEjL2//gEdjduwQDD5FQxhwSAWSD4GAsHU89S59MdB15+4LjDidSfuacHguIYQvueCEPZSA2FL9v7MCfbypqIG/Ny6U742EDByAqGsbbLr7nz0cz+jdYRhjHOK8vjIe6+kLxqjL3oinA0cR+P0xWLJUBaN0RdLb08ed3ZHiUZj9MUSycfUa8+kpywQMHJSwaqjq4/EkD83fdE4//GTdax/uZFQMEAoFCTc/xhKPoaCgYHj9HPhUJBgMNXTNobXhIKBMxrKOBOCnchMpw1eRURkQrknkiv5pfVADcyX6ung0LoHR31tqLAYj8fxRByPx/B4nP7NeTPGAsMCV6D/+ZAQ1nVoDx4fPh8pEM6lYtVrCYRzCITCqcccLJQzcDz0XLItnLxuhJUHM+HJjbtGHsZ4/Y0Z++U8kUgM9Golv2InesbSgtWJ45HD2W+f2T7qeyyaN4dYLBnCorFEqjctQSweHy2jn5ZgMHAiNAVPBKnk8/Tj4SHr6ef30NM7/M9OpCCHP7npVeQO9KKFyM1JPYaD5OQkH4PBwKTumzaUertkptAGryIiMmnMAsnFH/IKgeEr+R3d8uyoS6Wf96EvDGv3RCIVlOJ4IjboMTHwPD44UI1yvSfiJIZelxbChr8uTmLIdSNJRHs5/Nyjg4Y2ju9DC6QFp9zkY1qosvRANRCsRmgLp64NjRzGVuQcmPRhjIFAgNycALk5Z/Yrx/Nb9426aMcX//baEV/j7sQTPmpo6n+M9Q9t7D8fTxCPJZLDHEd8TVpb6vr09+juiQ45lxgxFAF0dPXx1f988pTfv5kNCko5OckhhwMhKic0aMjiiXCVas8JDhzn5oQIhwc/Tx/qODSATffeLoU6GSv1GImIyKRq3fzMiPOjlqy9ZcoshjGaF++4/aShzj2Bx2IkYn3Jr2jqKxY98TzWh8fS2qNp1/Zfl3ruw86nnRslpJ0OCwQpXLh0lBAWHnRsQ3q7hh5b+rXBidtHKhu9XRPpo5+9d8RgN7c4n0984PX09iUX7uhN9Zj19p3oOeuNxujri9EbjdPXlxzK2NuX6l3rO/GavmhsoL03Gid+GsMYzRjUW5UTDnKotWPEe+WGg7zq/MUEAwGCwQDBgA15DBAMWvIx/TiY3j7Ctalhi6G0x2AgvS1AKGip65LHgdS9ThXqILk65gfedsm0+HMDCnYTTT1GIiIyZWRyqfRMO9X+V2YBLJwMBpnmniARjSZDVqyPRHRwqBoatjzaR9Nj/z3yvRJxsADx3m4SnW2pe0VJxHpJxKJ4LHqaVdrgQDVC0BrW05XePhC6clnS9gpvLtyKefIX3P7erur4dvra54ww9HF888cybdTVGN9yI9XzSzLynvF44kRg6g9V4whf/aFr/+HjI96/NxpnyyuHiccTxBOefOw/TiRIJCb/P98DgWS46g9LXT19w4ZT9m8o/evfNySHR6ZCWTJkpQc0GyH0DX4+ENqClrpPepgbEvpS7xUI9tc49Pq016S+1j2/h+/+7A/qrZsk6jESEREZh9bNz0zLUAen7vEaTbInLDqk5yua1gOW1rMVi5KI9qauTR770NcNCXMeG3y/CZsYZDb6whuBYNp8suELdwwLWSdbxGPQvUY+1960jYPPPjwQ7AA8EGLx1e+i7JzLkr1tU2BJ9JF89LP3jroa41c/9Uejvq5/KGMikSAWTwan/uPkYyLtfCK1cmPyMR4/0RZPDA5c8dS9Bo4TQ47TgtpDT20btb7z6xYMuz4ed2KJBIl4gtgIYS/9eTYFzKgojQya5xYOJvdC698TbeS5cCceB107ZGGS0Ij3658zl7zuVEv4T9XeOvUYiYiITJCptP/VeJ2qx2s0yZ6wXALhidk36mTcPTm3Kzo4MG3+7j+N+prFb77lxPyw9DlhQ+ePDZuDFh98LhEnHu0dPl9tlLlo410YZOigQkvEaHz4Lhofviv5PBBM9ayFT8wjGzZ3LDykfWhb+nDH9N638Ilr++eujTGIne5qjGZGKGgQDJATHtdHNWE2bm4aNdR94gOvP+37untaaDsRmoaGvmEBLq19UAhMnesPh/2v++EDm0Z8/4Q7S6tKT8x3Sz12dseSc+aGzo/rnzs3Afup9evv6epfvXFoAGs82DZsVcq+aJy7H9w0ZXuNFIxERERmiekwjNFSvTyBYAgoGGjPKS4dtber4oKrJrHCE0ZeGGTkRTy2/udnR73Pote8PTVkMb1HbUiPXF8Psa72QT1znup1O92VG8caxPJ2vkDCBv+CG7YEwR0PcXBdKLmyYyCQvJ8ZBIJpzwMQSJ23ZBtp1w48T52zQGD4cwtiAUt7Hhh8fJJ5bGeyxP5JPzuzgeFxZDD0PfzUtlGD3Ufed+W479cfvNLD1GgLivTvpRYdWFgk7XkqfA1auCT1vP/aXftGDmEjbRkwVSgYiYiIzCLTtcfrdHu7MslSv/ATOvVvxicLdvMvWXvaNbg7Ho+lBaUh4WrEoY59w4NYdMj16UEs2jvie8d7u9n3+D2nXfuEsaGh6UQoy+lqhxFCnW35BVvbXsKsf+hjf9gKDg5v6UMn05f2Twt/jOGak953aFvafd9zHtjmiQt2yf3UkqsXZtrJhmBOVQpGIiIiMuVNh96uk8lUsDOzVO9OmPQetok02ty0cFEp537gn5M9Z56ARHzg2BOp56ljT8Qh7Zwn4jBwnEgdx9PO+Ynnp7z3CO+Ven3L80+M+D15Ik4gnJtc9j8WTdaWiJ3oBUzvDfT+HsD+7yPZCzgZcmDYGMywJWDz/bzY+DssGE5ugB0MpR2nVoRM9bxaKIQFQgRCocHtIx6HU5tfh1PtqePUPSw0/LX09xQOkaneukxSMBIREZFpYbr2dsH0DnajhbpFr7lpUlZgPBPHd700ak9d3Tv/5rTv6+4nwttJwtOJkJUKXfFUgBsyt40Rr4nR9OjdoxVA0eIVyX3W4rHkNgGJ5GO8t/tEezya3LstHk2GwFTbhO58jKWFqeSjhULkHG8dsbcup/F3wHUT+P4TR8FIREREZBJM12A3E0PdRPTUJYfwjW0o5ek6vOE3owa7mrf8yWnfNxnAomkBKjZiyBrUPuJxf+CKJq9PJHvgPBHnSFvziO890vczVWQ1GJlZNXAnya3RHfimu3/FzEqBHwM1wG7gne5+NFt1ioiIiMxmCnXZkbFgFwhggcyuNNnR2DBqqJuqst1jFAP+1t03mlkRsMHMHgZuA37r7p83s08AnwA+nsU6RURERGQamq6hDqZ3sJuKC6acSlaDkbsfAA6kjtvNbAuwCLgBeG3qsu8Dj6FgJCIiIiKzzHQNdtMx1GW7x2iAmdUAq4F1wLxUaAI4SHKonYiIiIiITBPTLdSNbcvjDDOzCHAP8Nfufjz9nLs7o+xcZmYfNLP1Zra+uXnkCV4iIiIiIiKnkvVgZGZhkqHoLnf/aar5kJktSJ1fABwe6bXu/k13X+PuayoqKianYBERERERmXGyGowsuRvUt4Et7v5vaafuB25NHd8K3DfZtYmIiIiIyOyR7TlGVwDvB140s02ptk8BnwfuNrM/BfYA78xOeSIiIiIiMhtke1W6JwEb5fTVk1mLiIiIiIjMXlmfYyQiIiIiIpJtCkYiIiIiIjLrKRiJiIiIiMisp2AkIiIiIiKznoKRiIiIiIjMeubu2a5hQphZM8mlvaeKcqAl20XMQvrcs0efffbos88Ofe7Zo88+e/TZZ48++4mxxN0rRjoxY4LRVGNm6919TbbrmG30uWePPvvs0WefHfrcs0efffbos88effaZp6F0IiIiIiIy6ykYiYiIiIjIrKdglDnfzHYBs5Q+9+zRZ589+uyzQ5979uizzx599tmjzz7DNMdIRERERERmPfUYiYiIiIjIrKdgNMHMbK2ZNZjZDjP7RLbrmS3MrNrMHjWzzWb2spn9VbZrmk3MLGhmz5nZL7Jdy2xiZiVm9hMz22pmW8zssmzXNFuY2f9M/V3zkpn90Mzysl3TTGVm3zGzw2b2UlpbqZk9bGbbU49zs1njTDXKZ//F1N85L5jZvWZWksUSZ6SRPve0c39rZm5m5dmobaZTMJpAZhYEvg5cA6wE3mNmK7Nb1awRA/7W3VcClwJ/oc9+Uv0VsCXbRcxCXwEedPcVwAXoZzApzGwR8FFgjbufCwSBd2e3qhnte8DaIW2fAH7r7suB36aey8T7HsM/+4eBc939fGAb8MnJLmoW+B7DP3fMrBp4E7B3sguaLRSMJtargB3u/oq79wE/Am7Ick2zgrsfcPeNqeN2kr8gLspuVbODmVUBbwW+le1aZhMzmwNcBXwbwN373L0tq0XNLiEg38xCQAGwP8v1zFju/gRwZEjzDcD3U8ffB26czJpmi5E+e3d/yN1jqafPAFWTXtgMN8qfeYAvAbcDWiAgQxSMJtYioDHteRP65XzSmVkNsBpYl+VSZosvk/yLOpHlOmabWqAZ+G5qGOO3zKww20XNBu6+D/hXkv9rewA45u4PZbeqWWeeux9IHR8E5mWzmFnsT4BfZbuI2cDMbgD2ufvz2a5lJlMwkhnFzCLAPcBfu/vxbNcz05nZtcBhd9+Q7VpmoRBwIfDv7r4a6ETDiSZFaj7LDSTD6UKg0Mxuzm5Vs5cnl9fV/6BPMjP7e5LD2O/Kdi0znZkVAJ8C/jHbtcx0CkYTax9Qnfa8KtUmk8DMwiRD0V3u/tNs1zNLXAFcb2a7SQ4dfb2Z/Wd2S5o1moAmd+/vGf0JyaAkmfcGYJe7N7t7FPgpcHmWa5ptDpnZAoDU4+Es1zOrmNltwLXA+1z7vkyGs0j+R8zzqX9vq4CNZjY/q1XNQApGE+sPwHIzqzWzHJKTce/Pck2zgpkZybkWW9z937Jdz2zh7p909yp3ryH55/0Rd9f/nE8Cdz8INJpZfarpamBzFkuaTfYCl5pZQervnqvRwheT7X7g1tTxrcB9WaxlVjGztSSHT1/v7l3Zrmc2cPcX3b3S3WtS/942ARem/h2QCaRgNIFSkxH/Evg1yX8k73b3l7Nb1axxBfB+kj0Wm1Jfb8l2USIZ9hHgLjN7AVgFfDa75cwOqV66nwAbgRdJ/luqHekzxMx+CDwN1JtZk5n9KfB54I1mtp1kD97ns1njTDXKZ/81oAh4OPVv7R1ZLXIGGuVzl0lg6gEVEREREZHZTj1GIiIiIiIy6ykYiYiIiIjIrKdgJCIiIiIis56CkYiIiIiIzHoKRiIiIiIiMuspGImIyJRnZvG0pfg3mdknJvDeNWb20kTdT0REpqdQtgsQEREZg253X5XtIkREZOZSj5GIiExbZrbbzL5gZi+a2bNmtizVXmNmj5jZC2b2WzNbnGqfZ2b3mtnzqa/LU7cKmtl/mNnLZvaQmeVn7ZsSEZGsUDASEZHpIH/IULp3pZ075u7nAV8Dvpxq+7/A9939fOAu4Kup9q8Cj7v7BcCFwMup9uXA1939HKANeFtGvxsREZlyzN2zXYOIiMhJmVmHu0dGaN8NvN7dXzGzMHDQ3cvMrAVY4O7RVPsBdy83s2agyt170+5RAzzs7stTzz8OhN39nyfhWxMRkSlCPUYiIjLd+SjH49GbdhxHc3BFRGYdBSMREZnu3pX2+HTq+Cng3anj9wG/Sx3/FvhzADMLmtmcySpSRESmNv2PmIiITAf5ZrYp7fmD7t6/ZPdcM3uBZK/Pe1JtHwG+a2Z/BzQDf5xq/yvgm2b2pyR7hv4cOJDp4kVEZOrTHCMREZm2UnOM1rh7S7ZrERGR6U1D6UREREREZNZTj5GIiIiIiMx66jESEREREZFZT8FIRERERERmPQUjERERERGZ9RSMRERERERk1lMwEhERERGRWU/BSEREREREZr3/H2dILrLNoAyUAAAAAElFTkSuQmCC\n", "text/plain": [ "<Figure size 1008x432 with 1 Axes>" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "fig, ax = plt.subplots(1, 1, figsize=(14, 6))\n", "mode2.output['fitresults'].plot.rmse_f()\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "notes" } }, "source": [ "The RMSE of the test set is consistently lower than that of the training set. This is because we are using a very small test set including only 17 structures. In contrast to that, you could identify overfitting, if the train RMSE were much lower than the test RMSE.\n", "\n", "Nevertheless, the RMSE is a rather strong reduction of the really complex potential energy surface (PES) and can only be understood as a rule of thumb for the quality of the NNP fit." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "### Mode 3: Potential Evaluation" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "notes" } }, "source": [ "**RuNNer** ``mode 3`` is the prediction mode and brings the NNP to application. " ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "notes" } }, "source": [ "| Keyword | Default | Description |\n", "|---------|---------|:-------------|\n", "|runner_mode | 1| Must be set to 3.\n", "|calculate_forces | True| Calculate the atomic forces in runner_mode 3 and write them to the files runner.out and nnforces.out." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "notes" } }, "source": [ "We start the calculation following the same pattern as for mode 2." ] }, { "cell_type": "code", "execution_count": 32, "metadata": { "slideshow": { "slide_type": "subslide" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "DataContainer({'parameters': DataContainer({'runner_mode': 3, 'elements': None, 'number_of_elements': 0, 'bond_threshold': 0.5, 'nn_type_short': 1, 'use_short_nn': 1, 'optmode_charge': 1, 'optmode_short_energy': 1, 'optmode_short_force': 1, 'points_in_memory': 1000, 'scale_symmetry_functions': 1, 'cutoff_type': 1, 'test_fraction': 0.1, 'use_short_forces': 1, 'epochs': 15, 'kalman_lambda_short': 0.98, 'kalman_nue_short': 0.9987, 'mix_all_points': 1, 'nguyen_widrow_weights_short': 1, 'repeated_energy_update': 1, 'short_energy_error_threshold': 0.1, 'short_energy_fraction': 1.0, 'short_force_error_threshold': 1.0, 'short_force_fraction': 0.1, 'use_old_weights_charge': 0, 'use_old_weights_short': 0, 'write_weights_epoch': 5, 'center_symmetry_functions': 1, 'precondition_weights': 1, 'global_activation_short': [['t', 't', 'l']], 'global_hidden_layers_short': 2, 'global_nodes_short': [[15, 15]], 'calculate_forces': True, 'symfunction_short': [('Li', 2, 'Li', 0.0, 0.0, 12.0), ('Li', 2, 'Li', 0.004675055980246072, 0.0, 12.0), ('Li', 2, 'Li', 0.010843416275634649, 0.0, 12.0), ('Li', 2, 'Li', 0.01939424193215976, 0.0, 12.0), ('Li', 2, 'Li', 0.03192971575337408, 0.0, 12.0), ('Li', 2, 'Li', 0.05159916711157465, 0.0, 12.0), ('Li', 3, 'Li', 'Li', 0.0, -1.0, 1.0, 12.0), ('Li', 3, 'Li', 'Li', 0.0, -1.0, 2.0, 12.0), ('Li', 3, 'Li', 'Li', 0.0, -1.0, 4.0, 12.0), ('Li', 3, 'Li', 'Li', 0.0, -1.0, 8.0, 12.0), ('Li', 3, 'Li', 'Li', 0.0, 1.0, 1.0, 12.0), ('Li', 3, 'Li', 'Li', 0.0, 1.0, 2.0, 12.0), ('Li', 3, 'Li', 'Li', 0.0, 1.0, 4.0, 12.0), ('Li', 3, 'Li', 'Li', 0.0, 1.0, 8.0, 12.0)]}), 'training_data': <pyiron_contrib.atomistics.atomistics.job.trainingcontainer.TrainingStorage object at 0x7ff3c6db9630>})\n", "The job fit_mode3 was saved and received the ID: 240\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/home/kalm/dcmnts/uni/promotion/src/runnerase/runnerase/io/ase.py:313: VisibleDeprecationWarning: Creating an ndarray from ragged nested sequences (which is a list-or-tuple of lists-or-tuples-or ndarrays with different lengths or shapes) is deprecated. If you meant to do this, you must specify 'dtype=object' when creating the ndarray.\n", " forces = np.array([i.get_forces() for i in pred_structures])\n" ] } ], "source": [ "# Run Mode 3.\n", "mode3 = mode2.restart('fit_mode3')\n", "mode3.parameters.runner_mode = 3\n", "mode3.parameters.calculate_forces = True\n", "mode3.run(delete_existing_job=True)" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "notes" } }, "source": [ "As we turned on `calculate_forces`, mode 3 will give us the energy and force for each structure in the training and testing datasets. Take a look at the `output` to see that we now have access to all possible output properties." ] }, { "cell_type": "code", "execution_count": 33, "metadata": { "slideshow": { "slide_type": "fragment" } }, "outputs": [ { "data": { "text/plain": [ "['sfvalues',\n", " 'splittraintest',\n", " 'fitresults',\n", " 'weights',\n", " 'scaling',\n", " 'energy',\n", " 'forces']" ] }, "execution_count": 33, "metadata": {}, "output_type": "execute_result" } ], "source": [ "mode3.output.list_nodes()" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "notes" } }, "source": [ "For a more detailed analyze, we can have a look at the atomic energy and force prediction of the NNP compared to the reference values. For a perfect fit, all points will be on the diagonal of the plot. In this plot, we can identify, for example, whether some energies ranges are not well described in our data set. This could be related to our first data set analysis above." ] }, { "cell_type": "code", "execution_count": 34, "metadata": { "scrolled": false, "slideshow": { "slide_type": "subslide" } }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "<Figure size 1008x432 with 2 Axes>" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "fig, ax = plt.subplots(1, 1, figsize=(14, 6))\n", "mode3.plot.energy_scatter_histogram()\n", "plt.show()" ] }, { "cell_type": "code", "execution_count": 35, "metadata": { "scrolled": false, "slideshow": { "slide_type": "subslide" } }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "<Figure size 1008x432 with 2 Axes>" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "fig, ax = plt.subplots(1, 1, figsize=(14, 6))\n", "mode3.plot.force_scatter_histogram(axis=0)\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "### LAMMPS: Using the Potential" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "notes" } }, "source": [ "After successfully running modes 1 through 3, the potential is ready for application. Via [n2p2](https://compphysvienna.github.io/n2p2/index.html), the NNP can be used in combination with LAMMPS to drive large-scale atomistic simulations.\n", "\n", "As was done for previous potentials, we create a pandas dataframe holding all the relevant pieces of information about the potential using `get_lammps_potential`. **API break:** In our case, we need to specifically define the `elements` present in the simulations. Otherwise, the mapping between species in n2p2 and LAMMPS might be off." ] }, { "cell_type": "code", "execution_count": 36, "metadata": { "scrolled": false, "slideshow": { "slide_type": "fragment" } }, "outputs": [ { "data": { "text/html": [ "<div>\n", "<style scoped>\n", " .dataframe tbody tr th:only-of-type {\n", " vertical-align: middle;\n", " }\n", "\n", " .dataframe tbody tr th {\n", " vertical-align: top;\n", " }\n", "\n", " .dataframe thead th {\n", " text-align: right;\n", " }\n", "</style>\n", "<table border=\"1\" class=\"dataframe\">\n", " <thead>\n", " <tr style=\"text-align: right;\">\n", " <th></th>\n", " <th>Name</th>\n", " <th>Filename</th>\n", " <th>Model</th>\n", " <th>Species</th>\n", " <th>Config</th>\n", " </tr>\n", " </thead>\n", " <tbody>\n", " <tr>\n", " <th>0</th>\n", " <td>RuNNer-Li</td>\n", " <td>[/home/kalm/dcmnts/uni/promotion/work/workshop_bochum/handson_notebook/workshop_preparation/introduction/training/fit_lithium/fit_mode3_hdf5/fit_mode3/input.nn, /home/kalm/dcmnts/uni/promotion/wor...</td>\n", " <td>RuNNer</td>\n", " <td>[Li]</td>\n", " <td>[pair_style hdnnp 6.350126526766093 dir \"./\" showew yes showewsum 0 resetew no maxew 100 cflength 1.8897261328 cfenergy 0.0367493254\\n, pair_coeff * * Li\\n]</td>\n", " </tr>\n", " </tbody>\n", "</table>\n", "</div>" ], "text/plain": [ " Name \\\n", "0 RuNNer-Li \n", "\n", " Filename \\\n", "0 [/home/kalm/dcmnts/uni/promotion/work/workshop_bochum/handson_notebook/workshop_preparation/introduction/training/fit_lithium/fit_mode3_hdf5/fit_mode3/input.nn, /home/kalm/dcmnts/uni/promotion/wor... \n", "\n", " Model Species \\\n", "0 RuNNer [Li] \n", "\n", " Config \n", "0 [pair_style hdnnp 6.350126526766093 dir \"./\" showew yes showewsum 0 resetew no maxew 100 cflength 1.8897261328 cfenergy 0.0367493254\\n, pair_coeff * * Li\\n] " ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "pot = mode3.get_lammps_potential(elements=['Li'])\n", "\n", "display(pot)" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "notes" } }, "source": [ "As a first application, we are going to calculate the energy-volume curve of bulk lithium. This requires the minimization of structures with different cell geometries, a suitable first test for the stability of a new HDNNP.\n", "\n", "We create a new subproject for these calculations:" ] }, { "cell_type": "code", "execution_count": 37, "metadata": { "slideshow": { "slide_type": "skip" } }, "outputs": [ { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "3aecc6ad968d4852bacd5e622c8cfb44", "version_major": 2, "version_minor": 0 }, "text/plain": [ " 0%| | 0/7 [00:00<?, ?it/s]" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "if 'E_V_curve' in pr.list_groups():\n", " pr['E_V_curve'].remove_jobs(silently=True)\n", "pr_ev = pr.create_group('E_V_curve')" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "notes" } }, "source": [ "Next, we create Li bulk structures, varying the cell parameter `a` between 3.0 and 4.0 Angstrom. For each structure, we create a LAMMPS job that minimizes the energy of the system." ] }, { "cell_type": "code", "execution_count": 38, "metadata": { "slideshow": { "slide_type": "skip" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "<pyiron_atomistics.lammps.base.Input object at 0x7ff3c94d24a0>\n", "The job job_a_3_0 was saved and received the ID: 241\n", "reading output\n", "<pyiron_atomistics.lammps.base.Input object at 0x7ff3c94d3700>\n", "The job job_a_3_167 was saved and received the ID: 242\n", "reading output\n", "<pyiron_atomistics.lammps.base.Input object at 0x7ff3c94901f0>\n", "The job job_a_3_333 was saved and received the ID: 243\n", "reading output\n", "<pyiron_atomistics.lammps.base.Input object at 0x7ff3c9436ef0>\n", "The job job_a_3_5 was saved and received the ID: 244\n", "reading output\n", "<pyiron_atomistics.lammps.base.Input object at 0x7ff3c4769ab0>\n", "The job job_a_3_667 was saved and received the ID: 245\n", "reading output\n", "<pyiron_atomistics.lammps.base.Input object at 0x7ff3c9403e80>\n", "The job job_a_3_833 was saved and received the ID: 246\n", "reading output\n", "<pyiron_atomistics.lammps.base.Input object at 0x7ff3c9401c30>\n", "The job job_a_4_0 was saved and received the ID: 247\n", "reading output\n" ] } ], "source": [ "a_list = np.linspace(3.0, 4.0, 7)\n", "for a in a_list:\n", " job_name = f'job_a_{a:.4}'.replace('.', '_')\n", " job = pr_ev.create.job.Lammps(job_name, delete_existing_job=True)\n", " job.structure = pr_ev.create_ase_bulk('Li', a=a)\n", " job.potential = pot\n", " job.calc_minimize()\n", " job.run(delete_existing_job=True)" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "notes" } }, "source": [ "Finally, we create a plot from the collected data." ] }, { "cell_type": "code", "execution_count": 39, "metadata": { "slideshow": { "slide_type": "skip" } }, "outputs": [ { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "a35e6dc45f4e41fe8ef98df2d29ac5f4", "version_major": 2, "version_minor": 0 }, "text/plain": [ " 0%| | 0/7 [00:00<?, ?it/s]" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "image/png": "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\n", "text/plain": [ "<Figure size 432x288 with 1 Axes>" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "volume_list = []\n", "energy_list = []\n", "for job in pr_ev.iter_jobs(status='finished'):\n", " min_volume = job['output/generic/volume'][-1]\n", " min_energy = job['output/generic/energy_tot'][-1]\n", " \n", " volume_list.append(min_volume)\n", " energy_list.append(min_energy)\n", "\n", "volume_list = np.array(volume_list)\n", "energy_list = np.array(energy_list)\n", "\n", "fig, ax = plt.subplots(1, 1)\n", "args = np.argsort(volume_list)\n", "ax.plot(volume_list[args], energy_list[args], '-x')\n", "plt.xlabel('Volume [$\\mathrm{\\AA^3}$]')\n", "plt.ylabel('Energy [eV]')\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "notes" } }, "source": [ "## Next steps" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "notes" } }, "source": [ "Great that you have already come this far in the notebook! If you still have some time left, we invite you to play with a few key parameters of RuNNer to experience firsthand how they can influence the fit.\n", "\n", "**Important:** Feel free to change whatever parameters you find interesting. However, keep in mind that using a very large neural network architecture or a significantly bigger portion of the full dataset will result in very long training times much exceeding the timeframe of this tutorial.\n", "\n", "Here are a few suggestions:" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "notes" } }, "source": [ "1. Choose a different training dataset.\n", "2. Change `precondition_weights` to `False`.\n", "3. Experience overfitting by choosing a larger neural network architecture. We recommend 3 hidden layers with 25 nodes each.\n", "4. Experience a really quick fit by setting `use_short_forces` to `False`.\n", "5. Observe that the training outcome can vary depending on different choices of the variable `random_seed`." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Resources\n", "\n", "Here is a collection of all the resources mentioned in the text. These are a very good starting points towards using RuNNer in your own research!\n", "\n", "* Technical Documentation:\n", " * [The RuNNer documentation](https://theochemgoettingen.gitlab.io/RuNNer).\n", " * [The runnerase documentation](https://runner-suite.gitlab.io/runnerase/).\n", " * [The n2p2 documentation](https://compphysvienna.github.io/n2p2/index.html).\n", "* Second Generation HDNNP:\n", " * [J. Behler, M. Parrinello, Phys. Rev. Lett. 2007, 98, 146401](https://www.doi.org/10.1103/PhysRevLett.98.146401).\n", " * [J. Behler, International Journal of Quantum Chemistry 2015, 115, 1032–1050](https://www.doi.org/10.1002/qua.24890).\n", " * [J. Behler, Angewandte Chemie International Edition 2017, 56, 12828–12840](https://www.doi.org/10.1002/anie.201703114).\n", "* Third Generation HDNNP:\n", " * [N. Artrith, T. Morawietz, J. Behler, Phys. Rev. B 2011, 83, 153101](https://www.doi.org/10.1103/PhysRevB.83.153101).\n", " * [T. Morawietz, V. Sharma, J. Behler, J. Chem. Phys. 2012, 136, 064103](https://www.doi.org/10.1063/1.3682557).\n", "* Fourth Generation HDNNP:\n", " * [T. W. Ko, J. A. Finkler, S. Goedecker, J. Behler, Nature Communications 2021, 12, 398](https://www.doi.org/10.1038/s41467-020-20427-2).\n", " * [T. W. Ko, J. A. Finkler, S. Goedecker, J. Behler, Acc. Chem. Res. 2021, 54, 808–817](https://www.doi.org/10.1021/acs.accounts.0c00689).\n", "* Atom-centered Symmetry Functions:\n", " * [J. Behler, The Journal of Chemical Physics 2011, 134, 074106.](https://www.doi.org/10.1063/1.3553717).\n", "* Further Reading / Tutorial Reviews:\n", " * [J. Behler, Journal of Physics: Condensed Matter 2014, 26, 183001](https://www.doi.org/10.1088/0953-8984/26/18/183001).\n", " * [J. Behler, Phys. Chem. Chem. Phys. 2011, 13, 17930–17955](https://www.doi.org/10.1039/C1CP21668F).\n", " * [J. Behler, International Journal of Quantum Chemistry 2015, 115, 1032–1050](https://www.doi.org/10.1002/qua.24890)." ] } ], "metadata": { "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.10.5" } }, "nbformat": 4, "nbformat_minor": 4 }