diff --git a/camd/analysis.py b/camd/analysis.py index 56546834..4407a815 100644 --- a/camd/analysis.py +++ b/camd/analysis.py @@ -328,6 +328,7 @@ def __init__( self.space = None self.plot = plot self.initial_seed_indices = initial_seed_indices + self.current_analysis = None super(StabilityAnalyzer, self).__init__() @staticmethod @@ -436,7 +437,7 @@ def analyze(self, campaign, finalize=False): self.plot_hull( filtered, new_experimental_results.index, filename="hull.png" ) - + self.current_analysis = new_data # Compute summary metrics summary = self.get_summary( new_seed, diff --git a/camd/experiment/dft.py b/camd/experiment/dft.py index eb7f2b38..40220db6 100644 --- a/camd/experiment/dft.py +++ b/camd/experiment/dft.py @@ -868,7 +868,11 @@ def get_qmpy_formation_energy(total_e, formula, n_atoms): def get_mp_formation_energy( - total_e, formula, potcar_symbols, hubbards={}, explain=False + total_e, + formula, + potcar_symbols, + hubbards={}, + explain=False ): """ Helper function to computer mp-compatible formation @@ -902,7 +906,9 @@ def get_mp_formation_energy( "is_hubbard": is_hubbard, }, ) - entry = compatibility.process_entry(entry) + # process_entry has a bad try/except block that makes it difficult to catch errors, + # use this instead + entry = compatibility.process_entries([entry])[0] if explain: print(compatibility.explain(entry)) energy = entry.energy @@ -911,6 +917,31 @@ def get_mp_formation_energy( return energy / comp.num_atoms +def get_mp_formation_energy_from_m3gnet(total_e, structure, explain=False): + """ + Hack to get materials-project compatible formation energy from m3gnet + by overriding potcar/hubbard values with default values from MPRelaxSet + """ + vaspset = MPRelaxSet(structure) + potcar_symbols = ["PBE {}".format(sym) for sym in vaspset.potcar_symbols] + symbols = [s.split()[1] for s in potcar_symbols] + symbols = [re.split(r"_", s)[0] for s in symbols] + if not vaspset.incar.get("LDAU", False): + hubbards = {} + else: + us = vaspset.incar.get("LDAUU") + js = vaspset.incar.get("LDAUJ") + if len(js) != len(us): + js = [0] * len(us) + if len(us) == len(symbols): + hubbards = {symbols[i]: us[i] - js[i] for i in range(len(symbols))} + elif sum(us) == 0 and sum(js) == 0: + hubbards = {} + return get_mp_formation_energy( + total_e, structure.composition.formula, potcar_symbols=potcar_symbols, + hubbards=hubbards, explain=explain) + + def update_dataframe_row(dataframe, index, update_dict, add_columns=False): """ Method to update a dataframe row via an update_dictionary diff --git a/examples/adaboost_atf_structure_discovery.ipynb b/examples/adaboost_atf_structure_discovery.ipynb index 61f9d252..35dc81e0 100644 --- a/examples/adaboost_atf_structure_discovery.ipynb +++ b/examples/adaboost_atf_structure_discovery.ipynb @@ -339,7 +339,7 @@ ], "metadata": { "kernelspec": { - "display_name": "Python 3 (ipykernel)", + "display_name": "Python 3", "language": "python", "name": "python3" }, @@ -353,7 +353,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.7.12" + "version": "3.9.12" } }, "nbformat": 4, diff --git a/examples/binary_sulfides_mp.pickle b/examples/binary_sulfides_mp.pickle new file mode 100644 index 00000000..884d6343 Binary files /dev/null and b/examples/binary_sulfides_mp.pickle differ diff --git a/examples/main_tutorial.ipynb b/examples/main_tutorial.ipynb index f0b38224..7b39a914 100644 --- a/examples/main_tutorial.ipynb +++ b/examples/main_tutorial.ipynb @@ -15,16 +15,111 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 1, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Requirement already satisfied: camd in /Users/josephmontoya/PycharmProjects/camd/camd_public (2022.7.26)\n", + "Requirement already satisfied: python-dateutil==2.8.2 in /Users/josephmontoya/miniconda3/envs/camd/lib/python3.9/site-packages (from camd) (2.8.2)\n", + "Requirement already satisfied: networkx==2.5.1 in /Users/josephmontoya/miniconda3/envs/camd/lib/python3.9/site-packages (from camd) (2.5.1)\n", + "Requirement already satisfied: matplotlib==3.5.2 in /Users/josephmontoya/miniconda3/envs/camd/lib/python3.9/site-packages (from camd) (3.5.2)\n", + "Requirement already satisfied: matminer==0.7.8 in /Users/josephmontoya/miniconda3/envs/camd/lib/python3.9/site-packages (from camd) (0.7.8)\n", + "Requirement already satisfied: awscli in /Users/josephmontoya/miniconda3/envs/camd/lib/python3.9/site-packages (from camd) (1.25.37)\n", + "Requirement already satisfied: boto3==1.24.12 in /Users/josephmontoya/miniconda3/envs/camd/lib/python3.9/site-packages (from camd) (1.24.12)\n", + "Requirement already satisfied: docopt==0.6.2 in /Users/josephmontoya/miniconda3/envs/camd/lib/python3.9/site-packages (from camd) (0.6.2)\n", + "Requirement already satisfied: taburu==2020.5.9 in /Users/josephmontoya/miniconda3/envs/camd/lib/python3.9/site-packages (from camd) (2020.5.9)\n", + "Requirement already satisfied: GPy==1.10.0 in /Users/josephmontoya/miniconda3/envs/camd/lib/python3.9/site-packages (from camd) (1.10.0)\n", + "Requirement already satisfied: watchtower==2.1.1 in /Users/josephmontoya/miniconda3/envs/camd/lib/python3.9/site-packages (from camd) (2.1.1)\n", + "Requirement already satisfied: qmpy-tri>=2021.7.21 in /Users/josephmontoya/miniconda3/envs/camd/lib/python3.9/site-packages (from camd) (2022.7.21)\n", + "Requirement already satisfied: botocore<1.28.0,>=1.27.12 in /Users/josephmontoya/miniconda3/envs/camd/lib/python3.9/site-packages (from boto3==1.24.12->camd) (1.27.37)\n", + "Requirement already satisfied: jmespath<2.0.0,>=0.7.1 in /Users/josephmontoya/miniconda3/envs/camd/lib/python3.9/site-packages (from boto3==1.24.12->camd) (1.0.1)\n", + "Requirement already satisfied: s3transfer<0.7.0,>=0.6.0 in /Users/josephmontoya/miniconda3/envs/camd/lib/python3.9/site-packages (from boto3==1.24.12->camd) (0.6.0)\n", + "Requirement already satisfied: cython>=0.29 in /Users/josephmontoya/miniconda3/envs/camd/lib/python3.9/site-packages (from GPy==1.10.0->camd) (0.29.30)\n", + "Requirement already satisfied: six in /Users/josephmontoya/miniconda3/envs/camd/lib/python3.9/site-packages (from GPy==1.10.0->camd) (1.16.0)\n", + "Requirement already satisfied: scipy>=1.3.0 in /Users/josephmontoya/miniconda3/envs/camd/lib/python3.9/site-packages (from GPy==1.10.0->camd) (1.7.3)\n", + "Requirement already satisfied: paramz>=0.9.0 in /Users/josephmontoya/miniconda3/envs/camd/lib/python3.9/site-packages (from GPy==1.10.0->camd) (0.9.5)\n", + "Requirement already satisfied: numpy>=1.7 in /Users/josephmontoya/miniconda3/envs/camd/lib/python3.9/site-packages (from GPy==1.10.0->camd) (1.22.4)\n", + "Requirement already satisfied: requests>=2.27.1 in /Users/josephmontoya/miniconda3/envs/camd/lib/python3.9/site-packages (from matminer==0.7.8->camd) (2.28.1)\n", + "Requirement already satisfied: tqdm>=4.64.0 in /Users/josephmontoya/miniconda3/envs/camd/lib/python3.9/site-packages (from matminer==0.7.8->camd) (4.64.0)\n", + "Requirement already satisfied: scikit-learn>=1.1.0 in /Users/josephmontoya/miniconda3/envs/camd/lib/python3.9/site-packages (from matminer==0.7.8->camd) (1.1.1)\n", + "Requirement already satisfied: pandas>=1.4.2 in /Users/josephmontoya/miniconda3/envs/camd/lib/python3.9/site-packages (from matminer==0.7.8->camd) (1.4.3)\n", + "Requirement already satisfied: monty>=2022.4.26 in /Users/josephmontoya/miniconda3/envs/camd/lib/python3.9/site-packages (from matminer==0.7.8->camd) (2022.4.26)\n", + "Requirement already satisfied: future>=0.18.2 in /Users/josephmontoya/miniconda3/envs/camd/lib/python3.9/site-packages (from matminer==0.7.8->camd) (0.18.2)\n", + "Requirement already satisfied: pymatgen>=2022.5.17 in /Users/josephmontoya/miniconda3/envs/camd/lib/python3.9/site-packages (from matminer==0.7.8->camd) (2022.7.25)\n", + "Requirement already satisfied: sympy>=1.10.1 in /Users/josephmontoya/miniconda3/envs/camd/lib/python3.9/site-packages (from matminer==0.7.8->camd) (1.10.1)\n", + "Requirement already satisfied: jsonschema>=4.5.1 in /Users/josephmontoya/miniconda3/envs/camd/lib/python3.9/site-packages (from matminer==0.7.8->camd) (4.7.2)\n", + "Requirement already satisfied: pymongo>=4.1.1 in /Users/josephmontoya/miniconda3/envs/camd/lib/python3.9/site-packages (from matminer==0.7.8->camd) (4.2.0)\n", + "Requirement already satisfied: pyparsing>=2.2.1 in /Users/josephmontoya/miniconda3/envs/camd/lib/python3.9/site-packages (from matplotlib==3.5.2->camd) (3.0.8)\n", + "Requirement already satisfied: pillow>=6.2.0 in /Users/josephmontoya/miniconda3/envs/camd/lib/python3.9/site-packages (from matplotlib==3.5.2->camd) (9.2.0)\n", + "Requirement already satisfied: kiwisolver>=1.0.1 in /Users/josephmontoya/miniconda3/envs/camd/lib/python3.9/site-packages (from matplotlib==3.5.2->camd) (1.4.4)\n", + "Requirement already satisfied: cycler>=0.10 in /Users/josephmontoya/miniconda3/envs/camd/lib/python3.9/site-packages (from matplotlib==3.5.2->camd) (0.11.0)\n", + "Requirement already satisfied: fonttools>=4.22.0 in /Users/josephmontoya/miniconda3/envs/camd/lib/python3.9/site-packages (from matplotlib==3.5.2->camd) (4.34.4)\n", + "Requirement already satisfied: packaging>=20.0 in /Users/josephmontoya/miniconda3/envs/camd/lib/python3.9/site-packages (from matplotlib==3.5.2->camd) (21.3)\n", + "Requirement already satisfied: decorator<5,>=4.3 in /Users/josephmontoya/miniconda3/envs/camd/lib/python3.9/site-packages (from networkx==2.5.1->camd) (4.4.2)\n", + "Requirement already satisfied: indexed==1.0.0 in /Users/josephmontoya/miniconda3/envs/camd/lib/python3.9/site-packages (from taburu==2020.5.9->camd) (1.0.0)\n", + "Requirement already satisfied: lxml in /Users/josephmontoya/miniconda3/envs/camd/lib/python3.9/site-packages (from qmpy-tri>=2021.7.21->camd) (4.9.1)\n", + "Requirement already satisfied: python-memcached in /Users/josephmontoya/miniconda3/envs/camd/lib/python3.9/site-packages (from qmpy-tri>=2021.7.21->camd) (1.59)\n", + "Requirement already satisfied: bokeh==0.12.15 in /Users/josephmontoya/miniconda3/envs/camd/lib/python3.9/site-packages (from qmpy-tri>=2021.7.21->camd) (0.12.15)\n", + "Requirement already satisfied: PyYAML in /Users/josephmontoya/miniconda3/envs/camd/lib/python3.9/site-packages (from qmpy-tri>=2021.7.21->camd) (5.4.1)\n", + "Requirement already satisfied: ase in /Users/josephmontoya/miniconda3/envs/camd/lib/python3.9/site-packages (from qmpy-tri>=2021.7.21->camd) (3.22.1)\n", + "Requirement already satisfied: pexpect in /Users/josephmontoya/miniconda3/envs/camd/lib/python3.9/site-packages (from qmpy-tri>=2021.7.21->camd) (4.8.0)\n", + "Requirement already satisfied: PuLP in /Users/josephmontoya/miniconda3/envs/camd/lib/python3.9/site-packages (from qmpy-tri>=2021.7.21->camd) (2.6.0)\n", + "Requirement already satisfied: pytest in /Users/josephmontoya/miniconda3/envs/camd/lib/python3.9/site-packages (from qmpy-tri>=2021.7.21->camd) (7.1.2)\n", + "Requirement already satisfied: Django in /Users/josephmontoya/miniconda3/envs/camd/lib/python3.9/site-packages (from qmpy-tri>=2021.7.21->camd) (3.1.14)\n", + "Requirement already satisfied: django-extensions in /Users/josephmontoya/miniconda3/envs/camd/lib/python3.9/site-packages (from qmpy-tri>=2021.7.21->camd) (3.1.5)\n", + "Requirement already satisfied: Jinja2>=2.7 in /Users/josephmontoya/miniconda3/envs/camd/lib/python3.9/site-packages (from bokeh==0.12.15->qmpy-tri>=2021.7.21->camd) (3.1.1)\n", + "Requirement already satisfied: tornado>=4.3 in /Users/josephmontoya/miniconda3/envs/camd/lib/python3.9/site-packages (from bokeh==0.12.15->qmpy-tri>=2021.7.21->camd) (6.2)\n", + "Requirement already satisfied: docutils<0.17,>=0.10 in /Users/josephmontoya/miniconda3/envs/camd/lib/python3.9/site-packages (from awscli->camd) (0.16)\n", + "Requirement already satisfied: colorama<0.4.5,>=0.2.5 in /Users/josephmontoya/miniconda3/envs/camd/lib/python3.9/site-packages (from awscli->camd) (0.4.4)\n", + "Requirement already satisfied: rsa<4.8,>=3.1.2 in /Users/josephmontoya/miniconda3/envs/camd/lib/python3.9/site-packages (from awscli->camd) (4.7.2)\n", + "Requirement already satisfied: urllib3<1.27,>=1.25.4 in /Users/josephmontoya/miniconda3/envs/camd/lib/python3.9/site-packages (from botocore<1.28.0,>=1.27.12->boto3==1.24.12->camd) (1.26.11)\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Requirement already satisfied: attrs>=17.4.0 in /Users/josephmontoya/miniconda3/envs/camd/lib/python3.9/site-packages (from jsonschema>=4.5.1->matminer==0.7.8->camd) (21.4.0)\n", + "Requirement already satisfied: pyrsistent!=0.17.0,!=0.17.1,!=0.17.2,>=0.14.0 in /Users/josephmontoya/miniconda3/envs/camd/lib/python3.9/site-packages (from jsonschema>=4.5.1->matminer==0.7.8->camd) (0.18.1)\n", + "Requirement already satisfied: pytz>=2020.1 in /Users/josephmontoya/miniconda3/envs/camd/lib/python3.9/site-packages (from pandas>=1.4.2->matminer==0.7.8->camd) (2022.1)\n", + "Requirement already satisfied: ruamel.yaml>=0.17.0 in /Users/josephmontoya/miniconda3/envs/camd/lib/python3.9/site-packages (from pymatgen>=2022.5.17->matminer==0.7.8->camd) (0.17.21)\n", + "Requirement already satisfied: palettable>=3.1.1 in /Users/josephmontoya/miniconda3/envs/camd/lib/python3.9/site-packages (from pymatgen>=2022.5.17->matminer==0.7.8->camd) (3.3.0)\n", + "Requirement already satisfied: spglib>=1.9.9.44 in /Users/josephmontoya/miniconda3/envs/camd/lib/python3.9/site-packages (from pymatgen>=2022.5.17->matminer==0.7.8->camd) (1.16.3)\n", + "Requirement already satisfied: uncertainties>=3.1.4 in /Users/josephmontoya/miniconda3/envs/camd/lib/python3.9/site-packages (from pymatgen>=2022.5.17->matminer==0.7.8->camd) (3.1.7)\n", + "Requirement already satisfied: pybtex in /Users/josephmontoya/miniconda3/envs/camd/lib/python3.9/site-packages (from pymatgen>=2022.5.17->matminer==0.7.8->camd) (0.24.0)\n", + "Requirement already satisfied: plotly>=4.5.0 in /Users/josephmontoya/miniconda3/envs/camd/lib/python3.9/site-packages (from pymatgen>=2022.5.17->matminer==0.7.8->camd) (5.9.0)\n", + "Requirement already satisfied: tabulate in /Users/josephmontoya/miniconda3/envs/camd/lib/python3.9/site-packages (from pymatgen>=2022.5.17->matminer==0.7.8->camd) (0.8.10)\n", + "Requirement already satisfied: charset-normalizer<3,>=2 in /Users/josephmontoya/miniconda3/envs/camd/lib/python3.9/site-packages (from requests>=2.27.1->matminer==0.7.8->camd) (2.1.0)\n", + "Requirement already satisfied: certifi>=2017.4.17 in /Users/josephmontoya/miniconda3/envs/camd/lib/python3.9/site-packages (from requests>=2.27.1->matminer==0.7.8->camd) (2022.6.15)\n", + "Requirement already satisfied: idna<4,>=2.5 in /Users/josephmontoya/miniconda3/envs/camd/lib/python3.9/site-packages (from requests>=2.27.1->matminer==0.7.8->camd) (3.3)\n", + "Requirement already satisfied: pyasn1>=0.1.3 in /Users/josephmontoya/miniconda3/envs/camd/lib/python3.9/site-packages (from rsa<4.8,>=3.1.2->awscli->camd) (0.4.8)\n", + "Requirement already satisfied: threadpoolctl>=2.0.0 in /Users/josephmontoya/miniconda3/envs/camd/lib/python3.9/site-packages (from scikit-learn>=1.1.0->matminer==0.7.8->camd) (3.1.0)\n", + "Requirement already satisfied: joblib>=1.0.0 in /Users/josephmontoya/miniconda3/envs/camd/lib/python3.9/site-packages (from scikit-learn>=1.1.0->matminer==0.7.8->camd) (1.1.0)\n", + "Requirement already satisfied: mpmath>=0.19 in /Users/josephmontoya/miniconda3/envs/camd/lib/python3.9/site-packages (from sympy>=1.10.1->matminer==0.7.8->camd) (1.2.1)\n", + "Requirement already satisfied: asgiref<4,>=3.2.10 in /Users/josephmontoya/miniconda3/envs/camd/lib/python3.9/site-packages (from Django->qmpy-tri>=2021.7.21->camd) (3.5.2)\n", + "Requirement already satisfied: sqlparse>=0.2.2 in /Users/josephmontoya/miniconda3/envs/camd/lib/python3.9/site-packages (from Django->qmpy-tri>=2021.7.21->camd) (0.4.2)\n", + "Requirement already satisfied: ptyprocess>=0.5 in /Users/josephmontoya/miniconda3/envs/camd/lib/python3.9/site-packages (from pexpect->qmpy-tri>=2021.7.21->camd) (0.7.0)\n", + "Requirement already satisfied: iniconfig in /Users/josephmontoya/miniconda3/envs/camd/lib/python3.9/site-packages (from pytest->qmpy-tri>=2021.7.21->camd) (1.1.1)\n", + "Requirement already satisfied: tomli>=1.0.0 in /Users/josephmontoya/miniconda3/envs/camd/lib/python3.9/site-packages (from pytest->qmpy-tri>=2021.7.21->camd) (2.0.1)\n", + "Requirement already satisfied: pluggy<2.0,>=0.12 in /Users/josephmontoya/miniconda3/envs/camd/lib/python3.9/site-packages (from pytest->qmpy-tri>=2021.7.21->camd) (1.0.0)\n", + "Requirement already satisfied: py>=1.8.2 in /Users/josephmontoya/miniconda3/envs/camd/lib/python3.9/site-packages (from pytest->qmpy-tri>=2021.7.21->camd) (1.11.0)\n", + "Requirement already satisfied: MarkupSafe>=2.0 in /Users/josephmontoya/miniconda3/envs/camd/lib/python3.9/site-packages (from Jinja2>=2.7->bokeh==0.12.15->qmpy-tri>=2021.7.21->camd) (2.1.1)\n", + "Requirement already satisfied: tenacity>=6.2.0 in /Users/josephmontoya/miniconda3/envs/camd/lib/python3.9/site-packages (from plotly>=4.5.0->pymatgen>=2022.5.17->matminer==0.7.8->camd) (8.0.1)\n", + "Requirement already satisfied: ruamel.yaml.clib>=0.2.6 in /Users/josephmontoya/miniconda3/envs/camd/lib/python3.9/site-packages (from ruamel.yaml>=0.17.0->pymatgen>=2022.5.17->matminer==0.7.8->camd) (0.2.6)\n", + "Requirement already satisfied: latexcodec>=1.0.4 in /Users/josephmontoya/miniconda3/envs/camd/lib/python3.9/site-packages (from pybtex->pymatgen>=2022.5.17->matminer==0.7.8->camd) (2.0.1)\n" + ] + } + ], "source": [ - "!pip install camd" + "# !pip install camd" ] }, { "cell_type": "code", - "execution_count": 1, + "execution_count": 2, "metadata": { "pycharm": { "name": "#%%\n" @@ -49,9 +144,23 @@ }, { "cell_type": "code", - "execution_count": 2, + "execution_count": 3, "metadata": {}, "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Fetching elastic_tensor_2015.json.gz from https://ndownloader.figshare.com/files/13220603 to /Users/josephmontoya/miniconda3/envs/camd/lib/python3.9/site-packages/matminer/datasets/elastic_tensor_2015.json.gz\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Fetching https://ndownloader.figshare.com/files/13220603 in MB: 1.1182079999999999MB [00:00, 162.60MB/s] \n" + ] + }, { "data": { "text/html": [ @@ -128,7 +237,7 @@ "4 SiRu2 62 256.8 101.9" ] }, - "execution_count": 2, + "execution_count": 3, "metadata": {}, "output_type": "execute_result" } @@ -143,7 +252,7 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": 4, "metadata": { "pycharm": { "name": "#%%\n" @@ -226,7 +335,7 @@ "726 Ir3W 194 351.3 193.3" ] }, - "execution_count": 3, + "execution_count": 4, "metadata": {}, "output_type": "execute_result" } @@ -240,7 +349,7 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": 5, "metadata": { "pycharm": { "name": "#%%\n" @@ -323,7 +432,7 @@ "992 CsBr 225 6.5 4.6" ] }, - "execution_count": 4, + "execution_count": 5, "metadata": {}, "output_type": "execute_result" } @@ -336,7 +445,7 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": 6, "metadata": { "pycharm": { "name": "#%%\n" @@ -346,7 +455,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "4001aa2eeb294e11a82d2df1f8cfa427", + "model_id": "d937906b13624616807c44a88294c853", "version_major": 2, "version_minor": 0 }, @@ -370,7 +479,7 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": 7, "metadata": { "pycharm": { "name": "#%%\n" @@ -614,7 +723,7 @@ "[5 rows x 137 columns]" ] }, - "execution_count": 6, + "execution_count": 7, "metadata": {}, "output_type": "execute_result" } @@ -636,7 +745,7 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": 8, "metadata": { "pycharm": { "name": "#%%\n" @@ -1091,7 +1200,7 @@ "[590 rows x 135 columns]" ] }, - "execution_count": 7, + "execution_count": 8, "metadata": {}, "output_type": "execute_result" } @@ -1105,7 +1214,7 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": 9, "metadata": { "pycharm": { "name": "#%%\n" @@ -1128,7 +1237,7 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": 10, "metadata": { "pycharm": { "name": "#%%\n" @@ -1157,7 +1266,7 @@ }, { "cell_type": "code", - "execution_count": 10, + "execution_count": 11, "metadata": { "pycharm": { "name": "#%%\n" @@ -1176,7 +1285,7 @@ }, { "cell_type": "code", - "execution_count": 11, + "execution_count": 12, "metadata": { "pycharm": { "name": "#%%\n" @@ -1217,7 +1326,7 @@ }, { "cell_type": "code", - "execution_count": 12, + "execution_count": 13, "metadata": { "pycharm": { "name": "#%%\n" @@ -1228,12 +1337,12 @@ "name": "stderr", "output_type": "stream", "text": [ - "/Users/josephmontoya/miniconda3/envs/camd/lib/python3.7/site-packages/ipykernel_launcher.py:14: SettingWithCopyWarning: \n", + ":14: SettingWithCopyWarning: \n", "A value is trying to be set on a copy of a slice from a DataFrame.\n", "Try using .loc[row_indexer,col_indexer] = value instead\n", "\n", "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " \n" + " candidate_data['bulk_modulus_pred'] = y_predicted\n" ] }, { @@ -1306,7 +1415,7 @@ "55 TaC 323.9 328.280252" ] }, - "execution_count": 12, + "execution_count": 13, "metadata": {}, "output_type": "execute_result" } @@ -1319,7 +1428,7 @@ }, { "cell_type": "code", - "execution_count": 13, + "execution_count": 14, "metadata": { "pycharm": { "name": "#%%\n" @@ -1453,7 +1562,7 @@ "725 IrW 51 334.2 182.8 (Ir, W)" ] }, - "execution_count": 13, + "execution_count": 14, "metadata": {}, "output_type": "execute_result" } @@ -1477,7 +1586,7 @@ }, { "cell_type": "code", - "execution_count": 14, + "execution_count": 15, "metadata": {}, "outputs": [], "source": [ @@ -1503,7 +1612,7 @@ }, { "cell_type": "code", - "execution_count": 15, + "execution_count": 16, "metadata": {}, "outputs": [], "source": [ @@ -1520,7 +1629,7 @@ }, { "cell_type": "code", - "execution_count": 16, + "execution_count": 17, "metadata": { "pycharm": { "name": "#%%\n" @@ -1540,7 +1649,7 @@ "413 WC 385.2\n", "1103 Re 365.1\n", " formula bulk_modulus\n", - "413 WC 385.2\n", + "919 W2C 335.8\n", "455 W2C 334.2\n", "1045 W2C 333.4\n", " formula bulk_modulus\n", @@ -1560,7 +1669,7 @@ }, { "cell_type": "code", - "execution_count": 17, + "execution_count": 18, "metadata": { "pycharm": { "name": "#%%\n" @@ -1784,7 +1893,7 @@ "181 CrIr3 221 307.2 214.0 (Cr, Ir)" ] }, - "execution_count": 17, + "execution_count": 18, "metadata": {}, "output_type": "execute_result" } @@ -1810,7 +1919,7 @@ }, { "cell_type": "code", - "execution_count": 18, + "execution_count": 19, "metadata": { "pycharm": { "name": "#%%\n" @@ -1823,7 +1932,7 @@ }, { "cell_type": "code", - "execution_count": 19, + "execution_count": 20, "metadata": { "pycharm": { "name": "#%%\n" @@ -1847,7 +1956,7 @@ }, { "cell_type": "code", - "execution_count": 20, + "execution_count": 21, "metadata": { "pycharm": { "name": "#%%\n" @@ -2091,7 +2200,7 @@ "[5 rows x 137 columns]" ] }, - "execution_count": 20, + "execution_count": 21, "metadata": {}, "output_type": "execute_result" } @@ -2117,7 +2226,7 @@ }, { "cell_type": "code", - "execution_count": 21, + "execution_count": 22, "metadata": { "pycharm": { "name": "#%%\n" @@ -2138,7 +2247,7 @@ }, { "cell_type": "code", - "execution_count": 22, + "execution_count": 23, "metadata": { "pycharm": { "name": "#%%\n" @@ -2169,7 +2278,7 @@ }, { "cell_type": "code", - "execution_count": 23, + "execution_count": 24, "metadata": {}, "outputs": [], "source": [ @@ -2193,7 +2302,7 @@ }, { "cell_type": "code", - "execution_count": 24, + "execution_count": 25, "metadata": { "pycharm": { "name": "#%%\n" @@ -2209,66 +2318,105 @@ "Iteration: 0\n", "Campaign 0 state: Getting new results\n", "Campaign 0 state: Analyzing results\n", + " /Users/josephmontoya/PycharmProjects/camd/camd_public/camd/analysis.py:91: FutureWarning:The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", + " /Users/josephmontoya/PycharmProjects/camd/camd_public/camd/campaigns/base.py:167: FutureWarning:The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", + " /Users/josephmontoya/PycharmProjects/camd/camd_public/camd/campaigns/base.py:172: FutureWarning:The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", "Campaign 0 state: Agent RegressorAgent hypothesizing\n", "Campaign 0 state: Running experiments\n", " Waiting for next round ...\n", "Iteration: 1\n", "Campaign 1 state: Getting new results\n", "Campaign 1 state: Analyzing results\n", + " /Users/josephmontoya/PycharmProjects/camd/camd_public/camd/analysis.py:91: FutureWarning:The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", + " /Users/josephmontoya/PycharmProjects/camd/camd_public/camd/campaigns/base.py:167: FutureWarning:The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", + " /Users/josephmontoya/PycharmProjects/camd/camd_public/camd/campaigns/base.py:172: FutureWarning:The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", "Campaign 1 state: Agent RegressorAgent hypothesizing\n", "Campaign 1 state: Running experiments\n", " Waiting for next round ...\n", "Iteration: 2\n", "Campaign 2 state: Getting new results\n", "Campaign 2 state: Analyzing results\n", + " /Users/josephmontoya/PycharmProjects/camd/camd_public/camd/analysis.py:91: FutureWarning:The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", + " /Users/josephmontoya/PycharmProjects/camd/camd_public/camd/campaigns/base.py:167: FutureWarning:The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", + " /Users/josephmontoya/PycharmProjects/camd/camd_public/camd/campaigns/base.py:172: FutureWarning:The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", "Campaign 2 state: Agent RegressorAgent hypothesizing\n", "Campaign 2 state: Running experiments\n", " Waiting for next round ...\n", "Iteration: 3\n", "Campaign 3 state: Getting new results\n", "Campaign 3 state: Analyzing results\n", + " /Users/josephmontoya/PycharmProjects/camd/camd_public/camd/analysis.py:91: FutureWarning:The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", + " /Users/josephmontoya/PycharmProjects/camd/camd_public/camd/campaigns/base.py:167: FutureWarning:The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", + " /Users/josephmontoya/PycharmProjects/camd/camd_public/camd/campaigns/base.py:172: FutureWarning:The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", "Campaign 3 state: Agent RegressorAgent hypothesizing\n", "Campaign 3 state: Running experiments\n", " Waiting for next round ...\n", "Iteration: 4\n", "Campaign 4 state: Getting new results\n", "Campaign 4 state: Analyzing results\n", + " /Users/josephmontoya/PycharmProjects/camd/camd_public/camd/analysis.py:91: FutureWarning:The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", + " /Users/josephmontoya/PycharmProjects/camd/camd_public/camd/campaigns/base.py:167: FutureWarning:The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", + " /Users/josephmontoya/PycharmProjects/camd/camd_public/camd/campaigns/base.py:172: FutureWarning:The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", "Campaign 4 state: Agent RegressorAgent hypothesizing\n", "Campaign 4 state: Running experiments\n", " Waiting for next round ...\n", "Iteration: 5\n", "Campaign 5 state: Getting new results\n", "Campaign 5 state: Analyzing results\n", + " /Users/josephmontoya/PycharmProjects/camd/camd_public/camd/analysis.py:91: FutureWarning:The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", + " /Users/josephmontoya/PycharmProjects/camd/camd_public/camd/campaigns/base.py:167: FutureWarning:The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", + " /Users/josephmontoya/PycharmProjects/camd/camd_public/camd/campaigns/base.py:172: FutureWarning:The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", "Campaign 5 state: Agent RegressorAgent hypothesizing\n", "Campaign 5 state: Running experiments\n", " Waiting for next round ...\n", "Iteration: 6\n", "Campaign 6 state: Getting new results\n", "Campaign 6 state: Analyzing results\n", + " /Users/josephmontoya/PycharmProjects/camd/camd_public/camd/analysis.py:91: FutureWarning:The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", + " /Users/josephmontoya/PycharmProjects/camd/camd_public/camd/campaigns/base.py:167: FutureWarning:The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", + " /Users/josephmontoya/PycharmProjects/camd/camd_public/camd/campaigns/base.py:172: FutureWarning:The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", "Campaign 6 state: Agent RegressorAgent hypothesizing\n", "Campaign 6 state: Running experiments\n", " Waiting for next round ...\n", "Iteration: 7\n", "Campaign 7 state: Getting new results\n", "Campaign 7 state: Analyzing results\n", + " /Users/josephmontoya/PycharmProjects/camd/camd_public/camd/analysis.py:91: FutureWarning:The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", + " /Users/josephmontoya/PycharmProjects/camd/camd_public/camd/campaigns/base.py:167: FutureWarning:The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", + " /Users/josephmontoya/PycharmProjects/camd/camd_public/camd/campaigns/base.py:172: FutureWarning:The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", "Campaign 7 state: Agent RegressorAgent hypothesizing\n", "Campaign 7 state: Running experiments\n", " Waiting for next round ...\n", "Iteration: 8\n", "Campaign 8 state: Getting new results\n", "Campaign 8 state: Analyzing results\n", + " /Users/josephmontoya/PycharmProjects/camd/camd_public/camd/analysis.py:91: FutureWarning:The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", + " /Users/josephmontoya/PycharmProjects/camd/camd_public/camd/campaigns/base.py:167: FutureWarning:The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", + " /Users/josephmontoya/PycharmProjects/camd/camd_public/camd/campaigns/base.py:172: FutureWarning:The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", "Campaign 8 state: Agent RegressorAgent hypothesizing\n", "Campaign 8 state: Running experiments\n", " Waiting for next round ...\n", "Iteration: 9\n", "Campaign 9 state: Getting new results\n", "Campaign 9 state: Analyzing results\n", + " /Users/josephmontoya/PycharmProjects/camd/camd_public/camd/analysis.py:91: FutureWarning:The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", + " /Users/josephmontoya/PycharmProjects/camd/camd_public/camd/campaigns/base.py:167: FutureWarning:The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", + " /Users/josephmontoya/PycharmProjects/camd/camd_public/camd/campaigns/base.py:172: FutureWarning:The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ "Campaign 9 state: Agent RegressorAgent hypothesizing\n", "Campaign 9 state: Running experiments\n", " Waiting for next round ...\n", "Iteration: 10\n", "Campaign 10 state: Getting new results\n", "Campaign 10 state: Analyzing results\n", + " /Users/josephmontoya/PycharmProjects/camd/camd_public/camd/analysis.py:91: FutureWarning:The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", + " /Users/josephmontoya/PycharmProjects/camd/camd_public/camd/campaigns/base.py:167: FutureWarning:The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", + " /Users/josephmontoya/PycharmProjects/camd/camd_public/camd/campaigns/base.py:172: FutureWarning:The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", "Campaign 10 state: Agent RegressorAgent hypothesizing\n", "Campaign 10 state: Running experiments\n", " Waiting for next round ...\n", @@ -2278,148 +2426,221 @@ "Iteration: 0\n", "Campaign 0 state: Getting new results\n", "Campaign 0 state: Analyzing results\n", + " /Users/josephmontoya/PycharmProjects/camd/camd_public/camd/analysis.py:91: FutureWarning:The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", + " /Users/josephmontoya/PycharmProjects/camd/camd_public/camd/campaigns/base.py:167: FutureWarning:The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", + " /Users/josephmontoya/PycharmProjects/camd/camd_public/camd/campaigns/base.py:172: FutureWarning:The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", "Campaign 0 state: Agent RegressorAgent hypothesizing\n", "Campaign 0 state: Running experiments\n", " Waiting for next round ...\n", "Iteration: 1\n", "Campaign 1 state: Getting new results\n", "Campaign 1 state: Analyzing results\n", + " /Users/josephmontoya/PycharmProjects/camd/camd_public/camd/analysis.py:91: FutureWarning:The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", + " /Users/josephmontoya/PycharmProjects/camd/camd_public/camd/campaigns/base.py:167: FutureWarning:The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", + " /Users/josephmontoya/PycharmProjects/camd/camd_public/camd/campaigns/base.py:172: FutureWarning:The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", "Campaign 1 state: Agent RegressorAgent hypothesizing\n", "Campaign 1 state: Running experiments\n", " Waiting for next round ...\n", "Iteration: 2\n", "Campaign 2 state: Getting new results\n", "Campaign 2 state: Analyzing results\n", + " /Users/josephmontoya/PycharmProjects/camd/camd_public/camd/analysis.py:91: FutureWarning:The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", + " /Users/josephmontoya/PycharmProjects/camd/camd_public/camd/campaigns/base.py:167: FutureWarning:The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", + " /Users/josephmontoya/PycharmProjects/camd/camd_public/camd/campaigns/base.py:172: FutureWarning:The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", "Campaign 2 state: Agent RegressorAgent hypothesizing\n", "Campaign 2 state: Running experiments\n", " Waiting for next round ...\n", "Iteration: 3\n", "Campaign 3 state: Getting new results\n", "Campaign 3 state: Analyzing results\n", + " /Users/josephmontoya/PycharmProjects/camd/camd_public/camd/analysis.py:91: FutureWarning:The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", + " /Users/josephmontoya/PycharmProjects/camd/camd_public/camd/campaigns/base.py:167: FutureWarning:The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", + " /Users/josephmontoya/PycharmProjects/camd/camd_public/camd/campaigns/base.py:172: FutureWarning:The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", "Campaign 3 state: Agent RegressorAgent hypothesizing\n", "Campaign 3 state: Running experiments\n", " Waiting for next round ...\n", "Iteration: 4\n", "Campaign 4 state: Getting new results\n", "Campaign 4 state: Analyzing results\n", + " /Users/josephmontoya/PycharmProjects/camd/camd_public/camd/analysis.py:91: FutureWarning:The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", + " /Users/josephmontoya/PycharmProjects/camd/camd_public/camd/campaigns/base.py:167: FutureWarning:The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", + " /Users/josephmontoya/PycharmProjects/camd/camd_public/camd/campaigns/base.py:172: FutureWarning:The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", "Campaign 4 state: Agent RegressorAgent hypothesizing\n", "Campaign 4 state: Running experiments\n", " Waiting for next round ...\n", "Iteration: 5\n", "Campaign 5 state: Getting new results\n", "Campaign 5 state: Analyzing results\n", + " /Users/josephmontoya/PycharmProjects/camd/camd_public/camd/analysis.py:91: FutureWarning:The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", + " /Users/josephmontoya/PycharmProjects/camd/camd_public/camd/campaigns/base.py:167: FutureWarning:The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", + " /Users/josephmontoya/PycharmProjects/camd/camd_public/camd/campaigns/base.py:172: FutureWarning:The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", "Campaign 5 state: Agent RegressorAgent hypothesizing\n", "Campaign 5 state: Running experiments\n", " Waiting for next round ...\n", "Iteration: 6\n", "Campaign 6 state: Getting new results\n", "Campaign 6 state: Analyzing results\n", + " /Users/josephmontoya/PycharmProjects/camd/camd_public/camd/analysis.py:91: FutureWarning:The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", + " /Users/josephmontoya/PycharmProjects/camd/camd_public/camd/campaigns/base.py:167: FutureWarning:The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", + " /Users/josephmontoya/PycharmProjects/camd/camd_public/camd/campaigns/base.py:172: FutureWarning:The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", "Campaign 6 state: Agent RegressorAgent hypothesizing\n", "Campaign 6 state: Running experiments\n", " Waiting for next round ...\n", "Iteration: 7\n", "Campaign 7 state: Getting new results\n", "Campaign 7 state: Analyzing results\n", + " /Users/josephmontoya/PycharmProjects/camd/camd_public/camd/analysis.py:91: FutureWarning:The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", + " /Users/josephmontoya/PycharmProjects/camd/camd_public/camd/campaigns/base.py:167: FutureWarning:The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", + " /Users/josephmontoya/PycharmProjects/camd/camd_public/camd/campaigns/base.py:172: FutureWarning:The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", "Campaign 7 state: Agent RegressorAgent hypothesizing\n", "Campaign 7 state: Running experiments\n", " Waiting for next round ...\n", "Iteration: 8\n", "Campaign 8 state: Getting new results\n", "Campaign 8 state: Analyzing results\n", - "Campaign 8 state: Agent RegressorAgent hypothesizing\n", + " /Users/josephmontoya/PycharmProjects/camd/camd_public/camd/analysis.py:91: FutureWarning:The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", + " /Users/josephmontoya/PycharmProjects/camd/camd_public/camd/campaigns/base.py:167: FutureWarning:The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", + " /Users/josephmontoya/PycharmProjects/camd/camd_public/camd/campaigns/base.py:172: FutureWarning:The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", + "Campaign 8 state: Agent RegressorAgent hypothesizing\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ "Campaign 8 state: Running experiments\n", " Waiting for next round ...\n", "Iteration: 9\n", "Campaign 9 state: Getting new results\n", "Campaign 9 state: Analyzing results\n", + " /Users/josephmontoya/PycharmProjects/camd/camd_public/camd/analysis.py:91: FutureWarning:The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", + " /Users/josephmontoya/PycharmProjects/camd/camd_public/camd/campaigns/base.py:167: FutureWarning:The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", + " /Users/josephmontoya/PycharmProjects/camd/camd_public/camd/campaigns/base.py:172: FutureWarning:The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", "Campaign 9 state: Agent RegressorAgent hypothesizing\n", "Campaign 9 state: Running experiments\n", " Waiting for next round ...\n", "Iteration: 10\n", "Campaign 10 state: Getting new results\n", "Campaign 10 state: Analyzing results\n", + " /Users/josephmontoya/PycharmProjects/camd/camd_public/camd/analysis.py:91: FutureWarning:The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", + " /Users/josephmontoya/PycharmProjects/camd/camd_public/camd/campaigns/base.py:167: FutureWarning:The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", + " /Users/josephmontoya/PycharmProjects/camd/camd_public/camd/campaigns/base.py:172: FutureWarning:The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", "Campaign 10 state: Agent RegressorAgent hypothesizing\n", "Campaign 10 state: Running experiments\n", " Waiting for next round ...\n", "Finalizing campaign.\n", "Campaign initialization state: Agent RegressorAgent hypothesizing\n", + " /Users/josephmontoya/miniconda3/envs/camd/lib/python3.9/site-packages/sklearn/neural_network/_multilayer_perceptron.py:702: ConvergenceWarning:Stochastic Optimizer: Maximum iterations (200) reached and the optimization hasn't converged yet.\n", "Campaign 0 state: Running experiments\n", "Iteration: 0\n", "Campaign 0 state: Getting new results\n", "Campaign 0 state: Analyzing results\n", + " /Users/josephmontoya/PycharmProjects/camd/camd_public/camd/analysis.py:91: FutureWarning:The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", + " /Users/josephmontoya/PycharmProjects/camd/camd_public/camd/campaigns/base.py:167: FutureWarning:The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", + " /Users/josephmontoya/PycharmProjects/camd/camd_public/camd/campaigns/base.py:172: FutureWarning:The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", "Campaign 0 state: Agent RegressorAgent hypothesizing\n", - " /Users/josephmontoya/miniconda3/envs/camd/lib/python3.7/site-packages/sklearn/neural_network/_multilayer_perceptron.py:696: ConvergenceWarning:Stochastic Optimizer: Maximum iterations (200) reached and the optimization hasn't converged yet.\n", + " /Users/josephmontoya/miniconda3/envs/camd/lib/python3.9/site-packages/sklearn/neural_network/_multilayer_perceptron.py:702: ConvergenceWarning:Stochastic Optimizer: Maximum iterations (200) reached and the optimization hasn't converged yet.\n", "Campaign 0 state: Running experiments\n", " Waiting for next round ...\n", "Iteration: 1\n", "Campaign 1 state: Getting new results\n", "Campaign 1 state: Analyzing results\n", + " /Users/josephmontoya/PycharmProjects/camd/camd_public/camd/analysis.py:91: FutureWarning:The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", + " /Users/josephmontoya/PycharmProjects/camd/camd_public/camd/campaigns/base.py:167: FutureWarning:The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", + " /Users/josephmontoya/PycharmProjects/camd/camd_public/camd/campaigns/base.py:172: FutureWarning:The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", "Campaign 1 state: Agent RegressorAgent hypothesizing\n", - " /Users/josephmontoya/miniconda3/envs/camd/lib/python3.7/site-packages/sklearn/neural_network/_multilayer_perceptron.py:696: ConvergenceWarning:Stochastic Optimizer: Maximum iterations (200) reached and the optimization hasn't converged yet.\n", + " /Users/josephmontoya/miniconda3/envs/camd/lib/python3.9/site-packages/sklearn/neural_network/_multilayer_perceptron.py:702: ConvergenceWarning:Stochastic Optimizer: Maximum iterations (200) reached and the optimization hasn't converged yet.\n", "Campaign 1 state: Running experiments\n", " Waiting for next round ...\n", "Iteration: 2\n", "Campaign 2 state: Getting new results\n", "Campaign 2 state: Analyzing results\n", + " /Users/josephmontoya/PycharmProjects/camd/camd_public/camd/analysis.py:91: FutureWarning:The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", + " /Users/josephmontoya/PycharmProjects/camd/camd_public/camd/campaigns/base.py:167: FutureWarning:The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", + " /Users/josephmontoya/PycharmProjects/camd/camd_public/camd/campaigns/base.py:172: FutureWarning:The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", "Campaign 2 state: Agent RegressorAgent hypothesizing\n", - " /Users/josephmontoya/miniconda3/envs/camd/lib/python3.7/site-packages/sklearn/neural_network/_multilayer_perceptron.py:696: ConvergenceWarning:Stochastic Optimizer: Maximum iterations (200) reached and the optimization hasn't converged yet.\n", + " /Users/josephmontoya/miniconda3/envs/camd/lib/python3.9/site-packages/sklearn/neural_network/_multilayer_perceptron.py:702: ConvergenceWarning:Stochastic Optimizer: Maximum iterations (200) reached and the optimization hasn't converged yet.\n", "Campaign 2 state: Running experiments\n", " Waiting for next round ...\n", "Iteration: 3\n", "Campaign 3 state: Getting new results\n", "Campaign 3 state: Analyzing results\n", + " /Users/josephmontoya/PycharmProjects/camd/camd_public/camd/analysis.py:91: FutureWarning:The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", + " /Users/josephmontoya/PycharmProjects/camd/camd_public/camd/campaigns/base.py:167: FutureWarning:The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", + " /Users/josephmontoya/PycharmProjects/camd/camd_public/camd/campaigns/base.py:172: FutureWarning:The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", "Campaign 3 state: Agent RegressorAgent hypothesizing\n", + " /Users/josephmontoya/miniconda3/envs/camd/lib/python3.9/site-packages/sklearn/neural_network/_multilayer_perceptron.py:702: ConvergenceWarning:Stochastic Optimizer: Maximum iterations (200) reached and the optimization hasn't converged yet.\n", "Campaign 3 state: Running experiments\n", " Waiting for next round ...\n", "Iteration: 4\n", "Campaign 4 state: Getting new results\n", "Campaign 4 state: Analyzing results\n", + " /Users/josephmontoya/PycharmProjects/camd/camd_public/camd/analysis.py:91: FutureWarning:The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", + " /Users/josephmontoya/PycharmProjects/camd/camd_public/camd/campaigns/base.py:167: FutureWarning:The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", + " /Users/josephmontoya/PycharmProjects/camd/camd_public/camd/campaigns/base.py:172: FutureWarning:The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", "Campaign 4 state: Agent RegressorAgent hypothesizing\n", "Campaign 4 state: Running experiments\n", " Waiting for next round ...\n", "Iteration: 5\n", "Campaign 5 state: Getting new results\n", "Campaign 5 state: Analyzing results\n", + " /Users/josephmontoya/PycharmProjects/camd/camd_public/camd/analysis.py:91: FutureWarning:The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", + " /Users/josephmontoya/PycharmProjects/camd/camd_public/camd/campaigns/base.py:167: FutureWarning:The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", + " /Users/josephmontoya/PycharmProjects/camd/camd_public/camd/campaigns/base.py:172: FutureWarning:The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", "Campaign 5 state: Agent RegressorAgent hypothesizing\n", "Campaign 5 state: Running experiments\n", " Waiting for next round ...\n", "Iteration: 6\n", - "Campaign 6 state: Getting new results\n", + "Campaign 6 state: Getting new results\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ "Campaign 6 state: Analyzing results\n", + " /Users/josephmontoya/PycharmProjects/camd/camd_public/camd/analysis.py:91: FutureWarning:The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", + " /Users/josephmontoya/PycharmProjects/camd/camd_public/camd/campaigns/base.py:167: FutureWarning:The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", + " /Users/josephmontoya/PycharmProjects/camd/camd_public/camd/campaigns/base.py:172: FutureWarning:The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", "Campaign 6 state: Agent RegressorAgent hypothesizing\n", "Campaign 6 state: Running experiments\n", " Waiting for next round ...\n", "Iteration: 7\n", "Campaign 7 state: Getting new results\n", "Campaign 7 state: Analyzing results\n", + " /Users/josephmontoya/PycharmProjects/camd/camd_public/camd/analysis.py:91: FutureWarning:The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", + " /Users/josephmontoya/PycharmProjects/camd/camd_public/camd/campaigns/base.py:167: FutureWarning:The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", + " /Users/josephmontoya/PycharmProjects/camd/camd_public/camd/campaigns/base.py:172: FutureWarning:The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", "Campaign 7 state: Agent RegressorAgent hypothesizing\n", - " /Users/josephmontoya/miniconda3/envs/camd/lib/python3.7/site-packages/sklearn/neural_network/_multilayer_perceptron.py:696: ConvergenceWarning:Stochastic Optimizer: Maximum iterations (200) reached and the optimization hasn't converged yet.\n", + " /Users/josephmontoya/miniconda3/envs/camd/lib/python3.9/site-packages/sklearn/neural_network/_multilayer_perceptron.py:702: ConvergenceWarning:Stochastic Optimizer: Maximum iterations (200) reached and the optimization hasn't converged yet.\n", "Campaign 7 state: Running experiments\n", " Waiting for next round ...\n", "Iteration: 8\n", "Campaign 8 state: Getting new results\n", "Campaign 8 state: Analyzing results\n", + " /Users/josephmontoya/PycharmProjects/camd/camd_public/camd/analysis.py:91: FutureWarning:The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", + " /Users/josephmontoya/PycharmProjects/camd/camd_public/camd/campaigns/base.py:167: FutureWarning:The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", + " /Users/josephmontoya/PycharmProjects/camd/camd_public/camd/campaigns/base.py:172: FutureWarning:The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", "Campaign 8 state: Agent RegressorAgent hypothesizing\n", "Campaign 8 state: Running experiments\n", " Waiting for next round ...\n", "Iteration: 9\n", "Campaign 9 state: Getting new results\n", "Campaign 9 state: Analyzing results\n", + " /Users/josephmontoya/PycharmProjects/camd/camd_public/camd/analysis.py:91: FutureWarning:The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", + " /Users/josephmontoya/PycharmProjects/camd/camd_public/camd/campaigns/base.py:167: FutureWarning:The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", + " /Users/josephmontoya/PycharmProjects/camd/camd_public/camd/campaigns/base.py:172: FutureWarning:The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", "Campaign 9 state: Agent RegressorAgent hypothesizing\n", - " /Users/josephmontoya/miniconda3/envs/camd/lib/python3.7/site-packages/sklearn/neural_network/_multilayer_perceptron.py:696: ConvergenceWarning:Stochastic Optimizer: Maximum iterations (200) reached and the optimization hasn't converged yet.\n", "Campaign 9 state: Running experiments\n", - " Waiting for next round ...\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ + " Waiting for next round ...\n", "Iteration: 10\n", "Campaign 10 state: Getting new results\n", "Campaign 10 state: Analyzing results\n", + " /Users/josephmontoya/PycharmProjects/camd/camd_public/camd/analysis.py:91: FutureWarning:The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", + " /Users/josephmontoya/PycharmProjects/camd/camd_public/camd/campaigns/base.py:167: FutureWarning:The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", + " /Users/josephmontoya/PycharmProjects/camd/camd_public/camd/campaigns/base.py:172: FutureWarning:The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", "Campaign 10 state: Agent RegressorAgent hypothesizing\n", - " /Users/josephmontoya/miniconda3/envs/camd/lib/python3.7/site-packages/sklearn/neural_network/_multilayer_perceptron.py:696: ConvergenceWarning:Stochastic Optimizer: Maximum iterations (200) reached and the optimization hasn't converged yet.\n", + " /Users/josephmontoya/miniconda3/envs/camd/lib/python3.9/site-packages/sklearn/neural_network/_multilayer_perceptron.py:702: ConvergenceWarning:Stochastic Optimizer: Maximum iterations (200) reached and the optimization hasn't converged yet.\n", "Campaign 10 state: Running experiments\n", " Waiting for next round ...\n", "Finalizing campaign.\n", @@ -2428,66 +2649,105 @@ "Iteration: 0\n", "Campaign 0 state: Getting new results\n", "Campaign 0 state: Analyzing results\n", + " /Users/josephmontoya/PycharmProjects/camd/camd_public/camd/analysis.py:91: FutureWarning:The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", + " /Users/josephmontoya/PycharmProjects/camd/camd_public/camd/campaigns/base.py:167: FutureWarning:The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", + " /Users/josephmontoya/PycharmProjects/camd/camd_public/camd/campaigns/base.py:172: FutureWarning:The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", "Campaign 0 state: Agent RegressorAgent hypothesizing\n", "Campaign 0 state: Running experiments\n", " Waiting for next round ...\n", "Iteration: 1\n", "Campaign 1 state: Getting new results\n", "Campaign 1 state: Analyzing results\n", + " /Users/josephmontoya/PycharmProjects/camd/camd_public/camd/analysis.py:91: FutureWarning:The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", + " /Users/josephmontoya/PycharmProjects/camd/camd_public/camd/campaigns/base.py:167: FutureWarning:The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", + " /Users/josephmontoya/PycharmProjects/camd/camd_public/camd/campaigns/base.py:172: FutureWarning:The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", "Campaign 1 state: Agent RegressorAgent hypothesizing\n", "Campaign 1 state: Running experiments\n", " Waiting for next round ...\n", "Iteration: 2\n", "Campaign 2 state: Getting new results\n", "Campaign 2 state: Analyzing results\n", + " /Users/josephmontoya/PycharmProjects/camd/camd_public/camd/analysis.py:91: FutureWarning:The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", + " /Users/josephmontoya/PycharmProjects/camd/camd_public/camd/campaigns/base.py:167: FutureWarning:The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", + " /Users/josephmontoya/PycharmProjects/camd/camd_public/camd/campaigns/base.py:172: FutureWarning:The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", "Campaign 2 state: Agent RegressorAgent hypothesizing\n", "Campaign 2 state: Running experiments\n", " Waiting for next round ...\n", "Iteration: 3\n", "Campaign 3 state: Getting new results\n", "Campaign 3 state: Analyzing results\n", + " /Users/josephmontoya/PycharmProjects/camd/camd_public/camd/analysis.py:91: FutureWarning:The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", + " /Users/josephmontoya/PycharmProjects/camd/camd_public/camd/campaigns/base.py:167: FutureWarning:The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", + " /Users/josephmontoya/PycharmProjects/camd/camd_public/camd/campaigns/base.py:172: FutureWarning:The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", "Campaign 3 state: Agent RegressorAgent hypothesizing\n", "Campaign 3 state: Running experiments\n", " Waiting for next round ...\n", "Iteration: 4\n", - "Campaign 4 state: Getting new results\n", + "Campaign 4 state: Getting new results\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ "Campaign 4 state: Analyzing results\n", + " /Users/josephmontoya/PycharmProjects/camd/camd_public/camd/analysis.py:91: FutureWarning:The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", + " /Users/josephmontoya/PycharmProjects/camd/camd_public/camd/campaigns/base.py:167: FutureWarning:The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", + " /Users/josephmontoya/PycharmProjects/camd/camd_public/camd/campaigns/base.py:172: FutureWarning:The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", "Campaign 4 state: Agent RegressorAgent hypothesizing\n", "Campaign 4 state: Running experiments\n", " Waiting for next round ...\n", "Iteration: 5\n", "Campaign 5 state: Getting new results\n", "Campaign 5 state: Analyzing results\n", + " /Users/josephmontoya/PycharmProjects/camd/camd_public/camd/analysis.py:91: FutureWarning:The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", + " /Users/josephmontoya/PycharmProjects/camd/camd_public/camd/campaigns/base.py:167: FutureWarning:The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", + " /Users/josephmontoya/PycharmProjects/camd/camd_public/camd/campaigns/base.py:172: FutureWarning:The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", "Campaign 5 state: Agent RegressorAgent hypothesizing\n", "Campaign 5 state: Running experiments\n", " Waiting for next round ...\n", "Iteration: 6\n", "Campaign 6 state: Getting new results\n", "Campaign 6 state: Analyzing results\n", + " /Users/josephmontoya/PycharmProjects/camd/camd_public/camd/analysis.py:91: FutureWarning:The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", + " /Users/josephmontoya/PycharmProjects/camd/camd_public/camd/campaigns/base.py:167: FutureWarning:The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", + " /Users/josephmontoya/PycharmProjects/camd/camd_public/camd/campaigns/base.py:172: FutureWarning:The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", "Campaign 6 state: Agent RegressorAgent hypothesizing\n", "Campaign 6 state: Running experiments\n", " Waiting for next round ...\n", "Iteration: 7\n", "Campaign 7 state: Getting new results\n", "Campaign 7 state: Analyzing results\n", + " /Users/josephmontoya/PycharmProjects/camd/camd_public/camd/analysis.py:91: FutureWarning:The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", + " /Users/josephmontoya/PycharmProjects/camd/camd_public/camd/campaigns/base.py:167: FutureWarning:The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", + " /Users/josephmontoya/PycharmProjects/camd/camd_public/camd/campaigns/base.py:172: FutureWarning:The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", "Campaign 7 state: Agent RegressorAgent hypothesizing\n", "Campaign 7 state: Running experiments\n", " Waiting for next round ...\n", "Iteration: 8\n", "Campaign 8 state: Getting new results\n", "Campaign 8 state: Analyzing results\n", + " /Users/josephmontoya/PycharmProjects/camd/camd_public/camd/analysis.py:91: FutureWarning:The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", + " /Users/josephmontoya/PycharmProjects/camd/camd_public/camd/campaigns/base.py:167: FutureWarning:The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", + " /Users/josephmontoya/PycharmProjects/camd/camd_public/camd/campaigns/base.py:172: FutureWarning:The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", "Campaign 8 state: Agent RegressorAgent hypothesizing\n", "Campaign 8 state: Running experiments\n", " Waiting for next round ...\n", "Iteration: 9\n", "Campaign 9 state: Getting new results\n", "Campaign 9 state: Analyzing results\n", + " /Users/josephmontoya/PycharmProjects/camd/camd_public/camd/analysis.py:91: FutureWarning:The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", + " /Users/josephmontoya/PycharmProjects/camd/camd_public/camd/campaigns/base.py:167: FutureWarning:The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", + " /Users/josephmontoya/PycharmProjects/camd/camd_public/camd/campaigns/base.py:172: FutureWarning:The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", "Campaign 9 state: Agent RegressorAgent hypothesizing\n", "Campaign 9 state: Running experiments\n", " Waiting for next round ...\n", "Iteration: 10\n", "Campaign 10 state: Getting new results\n", "Campaign 10 state: Analyzing results\n", + " /Users/josephmontoya/PycharmProjects/camd/camd_public/camd/analysis.py:91: FutureWarning:The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", + " /Users/josephmontoya/PycharmProjects/camd/camd_public/camd/campaigns/base.py:167: FutureWarning:The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", + " /Users/josephmontoya/PycharmProjects/camd/camd_public/camd/campaigns/base.py:172: FutureWarning:The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", "Campaign 10 state: Agent RegressorAgent hypothesizing\n", "Campaign 10 state: Running experiments\n", " Waiting for next round ...\n", @@ -2521,7 +2781,7 @@ }, { "cell_type": "code", - "execution_count": 25, + "execution_count": 39, "metadata": { "pycharm": { "name": "#%%\n" @@ -2530,19 +2790,9 @@ "outputs": [ { "data": { + "image/png": "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cYjW81sn72PjkGdmcHd311prHRMTo9944w39119/aa21DgoK0tHR0Vprrbds2aI7dOigtdZ6wYIFulixYjowMFCHh4frwoULax8fH33z5k1dqFAhfffuXR0ZGanr16+v+/fvr7XWuk2bNnrhwoVaa63nzZun27Vrp7XWulu3brpjx47aYrHodevW6cyZM+sTJ07o2NhYXb16dX3s2DGttdZFihTRFStW1FWqVNG1a9d+5j5feeUVHRMTo7XWumnTpvrChQtaa60PHDigmzRporXWumLFitrX11drrfX9+/cfvbaHmR//2tvbW1epUkWHh4frM2fO6DZt2uioqCittdb9+vXTixYt0jdu3NBFihTRAQEBOioqSr/wwguPtk9KrgEDBuilS5dqrbWOjIzUYWFh+siRI7pixYo6JCREP3jwQJcvX14fPXpUX716VSul9P79++P9eZ+Jpy4BR3Q8NdUuzsCn9t6K980LZM2cM8n7Ctmzl6C1a8nRty9ucou0SIxEnCknp/DwcKpWrcqNGzcoV64czZs3B4xhVLt168bFixdRSj0atAqgWbNmeHh4AFC+fHm8vb3x9/encePG5MqVCzCaHi5cuADA/v37+e233wB49913+fzzzx/tq23btiilqFSpEnny5KFSpUoAVKhQgWvXrlG1alXg/zP3PPS0fb755ps4OzsTEhLCvn37/jX8a2RkJGAMjNW9e3feeuutR0PCxmflypXs2rWLc+fOMWPGDNzc3Ni2bRuenp7UqlXr0fcwd+7cHDp0iEaNGpE9e/ZHOR5+D5KSq169eowbNw5fX186dOhAqVKl2LNnD+3bt380CmOHDh3YvXs3r776arzD9j4Pu2kDL5K/dJL3YQkN5faIEaQrVoycH/RLhlRCpLyHbeDe3t5orR+1gX/11Vc0adKEU6dO8fvvvz8aEhb+P4QqJH0Y1Yf7cnJy+td+nZycnnu/D4uaxWIha9asj9rOvby8OHv2LGDMeTl27FiuX79OjRo1CAgIiHdfHTt25MSJE+zbt4+hQ4dy+/ZttNZ069bt0T7Pnz/PqFGjUizX22+/zYYNG8iQIQOtW7d+5nC38Q3b+zzspoAnh7tTfyD61i3yjRuLU5xfRCHsQcaMGZk2bRqTJk0iJiaGoKAgClgnt35aW/RDderUYefOnQQEBBAdHc2vv/766Ln69euz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\n", "text/plain": [ - "Text(0, 0.5, 'Materials with\\n$K_{VRH} > 275$ GPa')" - ] - }, - "execution_count": 25, - "metadata": {}, - "output_type": "execute_result" - }, - { - "data": { - "image/png": "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vMql+XiW2FhO9etP/JEjuFWqmImR355H06Z4d+1CvgYNssUyUSpzJScns2rVKl588UUAKleuzIYNG3BxcWHlypWMGTOGgIAAwHoGtnPnTtzc3KhUqRKvv/46Li4ujBs3juDgYLy8vGjevPn1VT9ef/11evfuTe/evZk1axaDBg1i8eLFAERERLB582aWLFlCx44d2bRpEzNmzODhhx++XhMWrKuTODs74+bmxtatW+94zNDQUP755x+cnZ1p2bIl06dPp0KFCmzdupUBAwawevVq3nvvPf7++29KlixJZGQkefLk4b333rth6Dhlsj558iRxcXHUrFmTAwcO8Ouvv7Jp0yZcXV0ZMGAA8+bNo1WrVrz//vvs2LEDT09PWrRowUMPPXT9GOmJC2D69OkMHjyYnj17kpCQQHJyMsHBwcyePZutW7dijKF+/fo8+uij+Pj43HEptHuhyVLdk3OhR/FY+Ayxkpf8fReR6Ab9V/Zn85nNPPHAE4xtMJZ8rvnSfDyTnEzYsOHE7d+P35QpeLZononRq2zjHs4AM9LVq1epVasWYWFhVKlShdatWwPWpal69+7N4cOHERESUxTAb9myJV62+r5Vq1blxIkTXLhwgWbNmuHr6wtYhy///fdfADZv3syiRYsA6NWrF2+++eb1Yz3xxBOICDVq1KBo0aLUqFEDgGrVqnH8+PHryfLmYdg7HfPpp5/G2dmZmJgY/vnnnxuW1IqPjwegcePG9OnTh27dul1fZis1v/76K+vXr+fgwYNMmTIFd3d3Vq1aRXBwMA8//PD1z7BIkSJs27aNRx99lIIFC16P49pncD9xNWzYkA8//JDQ0FC6du1KhQoV2LhxI126dLm+2krXrl3ZsGEDHTt2THUptPTQZKnSLDrqEldmdaWIucr5p3/jcp5ohv3+CpFxkYxrOI4nKzx5Tze/GGM49+GHxKxZQ9F33tZEqRzu2jXL2NhY2rZty9SpUxk0aBBvv/02zZs3JzAwkOPHj9OsWbPrba4Nr8L9L0117VhOTk43HNfJySndx72WQCwWC97e3qnWj50+fTpbt27lzz//pG7dugQHB6d6rGvXLIOCgmjTpg0dO3bEGEPv3r35+OOPb9j32pltRsf17LPPUr9+ff7880/at2/PN998k6Z+7peON9mBiJQSkTUisl9E9onIYNv2z0TkoIjsFpFA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\n", - "text/plain": [ - "
" + "
" ] }, "metadata": { @@ -2561,8 +2811,11 @@ " ax=ax, label=campaign.agent.model.__class__.__name__)\n", "ax.legend(loc='lower right')\n", "ax.set_xlabel(\"iteration\")\n", - "ax.set_ylabel(\"Materials with\\n$K_{VRH} > 275$ GPa\", rotation=0, ha='right')\n", - " " + "ax.set_title(\"Materials with\\n$K_{VRH} > 275$ GPa\", rotation=0, fontsize=20)\n", + "ax.set_yticks(range(20, 41, 5))\n", + "fig = plt.gcf()\n", + "fig.set_figheight(6)\n", + "fig.set_figwidth(6)" ] }, { diff --git a/examples/mn_s_candidates.pickle b/examples/mn_s_candidates.pickle new file mode 100644 index 00000000..74060beb Binary files /dev/null and b/examples/mn_s_candidates.pickle differ diff --git a/examples/structure_discovery_agents_with_m3gnet.ipynb b/examples/structure_discovery_agents_with_m3gnet.ipynb new file mode 100644 index 00000000..3ca325e1 --- /dev/null +++ b/examples/structure_discovery_agents_with_m3gnet.ipynb @@ -0,0 +1,900 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "787affea", + "metadata": {}, + "source": [ + "# Structure discovery using a DFT surrogate model" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "82bd0852", + "metadata": {}, + "outputs": [], + "source": [ + "# Installation - restart the kernel after running this cell\n", + "# !pip install camd[m3gnet,proto_dft]" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "b2db246e", + "metadata": {}, + "outputs": [], + "source": [ + "# Several warnings from m3gnet, pyspglib are not relevant for this\n", + "# hide them for clarity\n", + "import warnings\n", + "warnings.filterwarnings('ignore')" + ] + }, + { + "cell_type": "markdown", + "id": "cff8b048", + "metadata": {}, + "source": [ + "In this notebook we demonstrate the basics of the structure discovery algorithms in CAMD. In lieu of actually doing DFT, which is expensive, we use an alternate model that is not as accurate but very cheap. The surrogate model we use is a ML-potential model called [m3gnet](https://github.com/materialsvirtuallab/m3gnet), which can both provide us with energies and optimize our structures. Note that structure discovery campaign results from m3gnet should be interpreted very conservatively, and that a large database of results from m3gnet can already be found at [matterverse.ai](http://matterverse.ai)." + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "274a4b05", + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "WARNING:root:Failed to import pyspglib.Download at: http://sourceforge.net/projects/spglib/ andfollow instructions for installing python API\n" + ] + } + ], + "source": [ + "# Copyright Toyota Research Institute 2022\n", + "from camd.campaigns.base import Campaign\n", + "from sklearn.neural_network import MLPRegressor\n", + "from camd.agent.stability import AgentStabilityAdaBoost\n", + "from camd.analysis import StabilityAnalyzer\n", + "from camd.experiment.base import Experiment\n", + "from camd.experiment.dft import get_mp_formation_energy_from_m3gnet\n", + "from camd.utils.data import load_default_atf_data\n", + "import pandas as pd\n", + "import os\n", + "import re\n", + "import shutil\n", + "from m3gnet.models import M3GNet, Potential, Relaxer\n", + "from pymatgen.io.ase import AseAtomsAdaptor\n", + "from tqdm import tqdm" + ] + }, + { + "cell_type": "markdown", + "id": "4c15b8d0", + "metadata": {}, + "source": [ + "Load dataset - this default dataset contains all of the OQMD binary compounds, including Composition (or reduced_formula), delta_e (formation_energy_per_atom), and features computed according to Ward et al. (2017)." + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "fc965547", + "metadata": {}, + "outputs": [], + "source": [ + "# We'll be using a cached dataset, but here's an example of how you\n", + "# can fetch data from the materials project if needed\n", + "use_cached = True\n", + "if not use_cached:\n", + " from pymatgen.ext.matproj import MPRester\n", + " from camd.utils.data import get_default_featurizer\n", + " with MPRester() as mpr:\n", + " binary_sulfides = mpr.query({\"nelements\": 2, \"elements\": \"S\"}, \n", + " ['structure', 'material_id', \n", + " 'pretty_formula', 'formation_energy_per_atom'])\n", + " unary_materials = mpr.query({\"nelements\": 1, \"e_above_hull\": 0}, \n", + " ['structure', 'material_id', \n", + " 'pretty_formula', 'formation_energy_per_atom'])\n", + " data = binary_sulfides + unary_materials # concatenate two datasets\n", + " data = {r['material_id']: r for r in data}\n", + " dataframe = pd.DataFrame.from_dict(data, orient='index')\n", + " featurizer = get_default_featurizer()\n", + " dataframe = featurizer.featurize_dataframe(dataframe, 'structure', ignore_errors=True)\n", + " dataframe = dataframe.rename(columns={\n", + " \"formation_energy_per_atom\": \"delta_e\",\n", + " \"pretty_formula\": \"Composition\"\n", + " })\n", + " dataframe = dataframe.dropna()\n", + " dataframe = dataframe.drop_duplicates(subset='material_id')\n", + " dataframe.to_pickle(\"binary_sulfides_mp.pickle\")\n", + " seed_data = dataframe\n", + "else:\n", + " # Use the cached dataset\n", + " seed_data = pd.read_pickle(\"binary_sulfides_mp.pickle\")\n", + " seed_data = seed_data.dropna()" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "a90fc23d", + "metadata": {}, + "outputs": [], + "source": [ + "# CAMD generates structure using a structure generation algorithm \n", + "# defined by Wyckoff-site enumerated prototypes, we'll also cache\n", + "# these because featurization takes a little while, but here's the code\n", + "use_cached = True\n", + "if not use_cached:\n", + " from camd.domain import StructureDomain, heuristic_setup\n", + " chemsys = [\"Mn\", \"S\"]\n", + " max_coeff, charge_balanced = heuristic_setup(chemsys)\n", + " domain = StructureDomain.from_bounds(\n", + " chemsys,\n", + " charge_balanced=charge_balanced,\n", + " n_max_atoms=20,\n", + " grid=(1, max_coeff)\n", + " )\n", + " candidate_data = domain.candidates()\n", + " candidate_data.to_pickle(\"mn_s_candidates.pickle\")\n", + "else:\n", + " candidate_data = pd.read_pickle(\"mn_s_candidates.pickle\")" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "id": "4468bca7", + "metadata": {}, + "outputs": [], + "source": [ + "class MockVasprun():\n", + " \"\"\"\n", + " This is a hacked version of the Vasprun object\n", + " that makes the experiment compatible with the\n", + " final analyzer in CAMD\n", + " \"\"\"\n", + " final_structure = None\n", + " final_energy = None" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "id": "ef3dd519", + "metadata": {}, + "outputs": [], + "source": [ + "# Define the experiment\n", + "# Experiment classes in CAMD require 3 methods\n", + "# - submit starts the calculation\n", + "# - get_results returns a dataframe with results\n", + "# - monitor is a method to wait until results are done, which ensures \n", + "# compatibility with CAMD logic\n", + "class M3GNetExperiment(Experiment):\n", + " def submit(self, data):\n", + " \"\"\"data is a pandas dataframe that must have a column called structure\"\"\"\n", + " # Sometimes in this method you might submit to an external system,\n", + " # e.g. AWS batch or a supercomputer, but in this case we just update\n", + " # the data because we do the computation locally\n", + " self.update_current_data(data)\n", + " \n", + " def monitor(self):\n", + " relaxer = Relaxer()\n", + " delta_es = []\n", + " status = []\n", + " results = []\n", + " for index, row in tqdm(self.current_data.iterrows(), desc=\"Experiments\"):\n", + " s = row['structure']\n", + " t = relaxer.relax(s)[\"trajectory\"]\n", + " e = t.energies[-1].flatten()[0]\n", + " delta_e = get_mp_formation_energy_from_m3gnet(\n", + " e, s\n", + " )\n", + " result = MockVasprun()\n", + " result.final_structure = row['structure']\n", + " result.final_energy = e\n", + " delta_es.append(delta_e)\n", + " status.append('SUCCEEDED')\n", + " results.append(result)\n", + " self.current_data['delta_e'] = delta_es\n", + " self.current_data['status'] = status\n", + " self.current_data['result'] = results\n", + " # This is a hack to ensure compatibility with the final analysis\n", + " # which uses Vasprun objects\n", + " \n", + " \n", + " def get_results(self):\n", + " return self.current_data" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "id": "ba9ca443", + "metadata": {}, + "outputs": [], + "source": [ + "from pymatgen.ext.matproj import MPRester\n", + "with MPRester() as mpr:\n", + " structure = mpr.get_structure_by_material_id(\"mp-66\")\n", + "relaxer = Relaxer()\n", + "t = relaxer.relax(structure)['trajectory']" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "id": "fb52f051", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "Atoms(symbols='C2', pbc=True, cell=[[0.0, 1.786855, 1.786855], [1.786855, 0.0, 1.786855], [1.786855, 1.786855, 0.0]], initial_magmoms=..., calculator=M3GNetCalculator(...))" + ] + }, + "execution_count": 9, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "t.atoms" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "id": "8f2e02cb", + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Experiments: 3it [00:15, 5.23s/it]\n" + ] + } + ], + "source": [ + "# Let's test the experiment\n", + "experiment = M3GNetExperiment()\n", + "experiment.submit(candidate_data.sample(3))\n", + "experiment.monitor()\n", + "results = experiment.get_results()" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "id": "4f221509", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
delta_e
51-S-e-Mn-f-0.754006
223-S-c-Mn-d-0.796201
12-S-g-S-g-S-j-Mn-i-Mn-i-Mn-j-0.657904
\n", + "
" + ], + "text/plain": [ + " delta_e\n", + "51-S-e-Mn-f -0.754006\n", + "223-S-c-Mn-d -0.796201\n", + "12-S-g-S-g-S-j-Mn-i-Mn-i-Mn-j -0.657904" + ] + }, + "execution_count": 11, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "results[['delta_e']]" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "id": "323811ca", + "metadata": {}, + "outputs": [], + "source": [ + "##########################################################\n", + "# Binary stable material discovery 50:50 explore/exploit agent\n", + "##########################################################\n", + "n_query = 5 # This many new candidates are \"calculated with DFT\" \n", + "# (i.e. requested from Oracle -- DFT)\n", + "agent = AgentStabilityAdaBoost(\n", + " model=MLPRegressor(hidden_layer_sizes=(40, 20)),\n", + " n_query=n_query,\n", + " hull_distance=0.05,\n", + " uncertainty=True,\n", + " exploit_fraction=0.8, # Number of candidates chosen by the ML model, rest are random\n", + " alpha=0.5, # Weighting of the estimated uncertainty from the AdaBoost ensemble\n", + " n_estimators=10\n", + ")\n", + "analyzer = StabilityAnalyzer(hull_distance=0.05)\n", + "experiment = M3GNetExperiment()" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "id": "59ace130", + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Campaign initialization state: Agent AgentStabilityAdaBoost hypothesizing\n", + "Campaign 0 state: Running experiments\n", + "Iteration: 0\n", + "Campaign 0 state: Getting new results\n", + "Experiments: 3it [00:21, 7.06s/it]\n", + "Campaign 0 state: Analyzing results\n", + "Campaign 0 state: Agent AgentStabilityAdaBoost hypothesizing\n", + "Campaign 0 state: Running experiments\n", + " Waiting for next round ...\n", + "Iteration: 1\n", + "Campaign 1 state: Getting new results\n", + "Experiments: 2it [00:11, 5.57s/it]\n", + "Campaign 1 state: Analyzing results\n", + "Campaign 1 state: Agent AgentStabilityAdaBoost hypothesizing\n", + "Campaign 1 state: Running experiments\n", + " Waiting for next round ...\n", + "Iteration: 2\n", + "Campaign 2 state: Getting new results\n", + "Experiments: 4it [05:13, 78.25s/it] \n", + "Campaign 2 state: Analyzing results\n", + "Campaign 2 state: Agent AgentStabilityAdaBoost hypothesizing\n", + "Campaign 2 state: Running experiments\n", + " Waiting for next round ...\n", + "Finalizing campaign.\n" + ] + } + ], + "source": [ + "# Usually takes ~5-10 minutes\n", + "path = os.path.join(os.getcwd(), \"m3gnet_structure_discovery\")\n", + "shutil.rmtree(path, ignore_errors=True)\n", + "os.makedirs(path)\n", + "campaign = Campaign(\n", + " candidate_data, \n", + " agent, \n", + " experiment, \n", + " analyzer, \n", + " seed_data=seed_data,\n", + " path=path\n", + ")\n", + "campaign.auto_loop(n_iterations=2, initialize=True)" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "id": "448c40e7", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
new_candidatesnew_discoverytotal_discovery
0311
1201
2401
\n", + "
" + ], + "text/plain": [ + " new_candidates new_discovery total_discovery\n", + "0 3 1 1\n", + "1 2 0 1\n", + "2 4 0 1" + ] + }, + "execution_count": 14, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "campaign.history" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "id": "13a90c71", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 15, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAXQAAAD1CAYAAABA+A6aAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8qNh9FAAAACXBIWXMAAAsTAAALEwEAmpwYAAASN0lEQVR4nO3dfZSWdZnA8e8FiJihJYys8SK0okHKos2BfGklQYUyJPE1W3S1OJ7UzZOnIksre6M6m5VRmxlquolvqZNRuLpqFopOoCaSMpHCkCWhqIik6LV/zOiOw8A8A8/MxI/v5xzOmft+fnPfFzzHr8/cz8tEZiJJ2vb16O4BJEnVYdAlqRAGXZIKYdAlqRAGXZIKYdAlqRC9uuvE/fv3z6FDh3bX6SVpm/S73/3ub5lZ09Zt3Rb0oUOHUl9f312nl6RtUkQ8sanbvOQiSYUw6JJUCIMuSYXotmvokjrfyy+/TGNjI+vXr+/uUdRBffr0YdCgQeywww4Vf49BlwrW2NhI3759GTp0KBHR3eOoQpnJ6tWraWxsZNiwYRV/X7uXXCJidkQ8FREPb+L2iIjvRkRDRDwUEQd0YG5JnWj9+vX069fPmG9jIoJ+/fp1+CerSq6hXw5M3Mztk4DhzX+mAz/o0ASSOpUx3zZtyf3WbtAz89fA05tZcjTwk2xyL/CWiNijw5NIkrZKNa6hDwRWtNhubN73ZOuFETGdpkfxDBkypAqnrtzQGb/o0vN1tcdnvr+7R+hUJd9/XXnfVfvfsb3Z16xZwzdnXcoJp3xkk2tWrljOg/ULeN8Hj9vssVauWM7Zp57Az26/p6LZTj/uKD7xuS/xzn/ZnzOnHcfXLr6UXXbdtaLv7YhRg95S9WNuqS592WJmXpKZtZlZW1PT5jtXJRVkzZo1XPOTH292zZ8blzP35us7dY5ZP7muU2LeURs2bOjU41cj6CuBwS22BzXvk7SdmzFjBo1PPM7xR76Hb335fL715fM5ZvyBTJ1wEL+q+xkA3/naF1l03z0cf+R7uPJH32fliuWceswkTph0KCdMOpQH6hdUdK71L77Ipz52GlPeO5ZzPvLhNzyhOOnAUTzz9GrWrXuBs045nuOOOIRjxh/4+gwPP7CQaVOO4LgjDuFDR43nhbXP8/f16zn/E2cydcJBHD/xX7lv/t0AfHjy4TQ8uuT1Y48bN476+npeeOEFTjvtNMaMGcP+++/PzTffDMDll1/O5MmTOeywwxg/fjzTpk3jpptuev37Tz755NfXbq1qXHKpA86KiDnAWODZzNzocouk7c/MmTOpX/Qg1867m9vm1nHdVZdx3a2/Yc3Tq/nQUYfxrrEH8fHPfJ4rfngx37v8GgBefHEdP/zpjezYpw9P/OmPzDjzI1w99452z3XtlbPps9ObuOmOBTy25GFOnDRuozXz77ydmgF78L0rrgXg+eee5eWXXuJTZ57GN2bNZt/RB7D2+efYsc9O/PeP/4uI4Ibb5vOnhsc44+RjqLurniM/8EFuveUm9tpnBKv++heefPJJamtrOe+88zjssMOYPXs2a9asYcyYMUyYMAGAhQsX8tBDD7Hbbrtx1113cdFFFzFlyhSeffZZ5s+fzxVXXFGVf+9KXrZ4NXAPsE9ENEbE6RFxRkSc0bxkLrAMaAB+BHysKpNJKsqi++5l4uSp9OzZk341u/Oudx/M4gcXbrRuw8sv88VPf5ypEw7ik2ecyrKlj1Z0/IUL5vP+Y44HYO8R+zJ8xDs3WrPXO0Zy7913cNFXP8/CBfPpu8uuPP7HpdTsPoB9Rze94vrNfXehV69eLLr/3tePN2yvvdlj4GCe+FMDRxw1hf+ZWwfArbfcxLHHHtv09a23MnPmTEaPHs24ceNYv349y5cvB+Dwww9nt912A+DQQw9l6dKlrFq1iquvvpqpU6fSq1d13hLU7lEy86R2bk/gzKpMI2m7d9WlP6Bf/9257tbf8OqrrzJmr3+q2rGHvn0v5sy9i7vvuJXvffMrjDnkUMYf2bEnpQfs8Tbe8pa38tiSh5n385/xk9mXAk1vBrrhhhvYZ5993rB+wYIF7Lzzzm/YN23aNK666irmzJnDZZddtnV/qRb8LBdJnaZv376se2EtAPuPPZB5P7+RV155hadX/42FC+az7+h3sfPOb2bd2rWvf8/a556j/+4D6NGjB7fccA2vvPJKRec6YOxB/PKmpidXl/7hEZYuWbzRmqf+8iR9dtqJo445gVPOOJs//P5Bhv7zcFY99VcefqDpp4UX1j7Phg0bOGDMgcy98ToAHl/WwF/+3MjQtw8H4MgPfJDLfvBdnn/+eUaNGtW078gjufjii2l6jAuLFi3a5Kynnnoq3/72twEYOXJkRX+/SvjWf2k70tUvb+3Xrx+ja8dyzPgDOeS9E9h7xEiOO+IQIoJzzvsi/XcfwK5v3Y0ePXty3BGHMPm4D3H8Kadz7vRp3HLDHA4aN56d3rRz+ycCjv+307jg3DOZ8t6xDNtrb0bsN3qjNUv/8AgXfeUCevToQa9eO/DZr/4nO/TuzTdmzWbmBZ/m7+tfZMc+O3HJ1TdywrTT+fJ55zJ1wkH07NWLC7/1fXrvuCMAh7//aL7xhc8w/eOffP3Y559/Pueccw6jRo3i1VdfZdiwYdxyyy1tzjpgwABGjBjBlClTOvxvujnx2v9NulptbW125S+4KPl1zODr0LdlnXnfLVmyhBEjRnTa8SvxUOOabj1/Z9uS16GvW7eO/fbbj4ULF7LrZl5O2db9FxG/y8zattZ7yUWSutBtt93GiBEjOPvsszcb8y3hJRdJ25Tf3nk73/naF96w722D9+Tbl17VPQN10IQJE3jiiU3+FrmtYtAlbVMOHjeeg8eN7+4x/iF5yUUqXHc9T6atsyX3m0GXCtanTx9Wr15t1Lcxr/2Ciz59+nTo+7zkIhVs0KBBNDY2smrVqm6b4a/PvNht5+4KS57fqVOO+9qvoOsIgy4VbIcddujQrzDrDJMKfskp/GO9ZNhLLpJUCIMuSYUw6JJUCIMuSYUw6JJUCIMuSYUw6JJUCIMuSYUw6JJUCIMuSYUw6JJUCIMuSYUw6JJUCIMuSYUw6JJUCIMuSYUw6JJUCIMuSYUw6JJUCIMuSYUw6JJUCIMuSYWoKOgRMTEiHo2IhoiY0cbtQyLijohYFBEPRcT7qj+qJGlz2g16RPQEZgGTgJHASRExstWyzwHXZub+wInA96s9qCRp8yp5hD4GaMjMZZn5EjAHOLrVmgR2af56V+DP1RtRklSJXhWsGQisaLHdCIxtteYLwK0RcTawMzChKtNJkipWrSdFTwIuz8xBwPuAKyNio2NHxPSIqI+I+lWrVlXp1JIkqCzoK4HBLbYHNe9r6XTgWoDMvAfoA/RvfaDMvCQzazOztqamZssmliS1qZKg3w8Mj4hhEdGbpic961qtWQ6MB4iIETQF3YfgktSF2g16Zm4AzgLmAUtoejXL4oi4MCImNy87F/hoRDwIXA2cmpnZWUNLkjZWyZOiZOZcYG6rfRe0+PoR4ODqjiZJ6gjfKSpJhTDoklQIgy5JhTDoklQIgy5JhTDoklQIgy5JhTDoklQIgy5JhTDoklQIgy5JhTDoklQIgy5JhTDoklQIgy5JhTDoklQIgy5JhTDoklQIgy5JhTDoklQIgy5JhTDoklQIgy5JhTDoklQIgy5JhTDoklQIgy5JhTDoklQIgy5JhTDoklQIgy5JhTDoklSIioIeERMj4tGIaIiIGZtYc3xEPBIRiyPip9UdU5LUnl7tLYiInsAs4HCgEbg/Iuoy85EWa4YDnwEOzsxnImL3zhpYktS2Sh6hjwEaMnNZZr4EzAGObrXmo8CszHwGIDOfqu6YkqT2VBL0gcCKFtuNzfta2hvYOyJ+GxH3RsTEag0oSapMu5dcOnCc4cA4YBDw64jYLzPXtFwUEdOB6QBDhgyp0qklSVDZI/SVwOAW24Oa97XUCNRl5suZ+SfgMZoC/waZeUlm1mZmbU1NzZbOLElqQyVBvx8YHhHDIqI3cCJQ12rNTTQ9Oici+tN0CWZZ9caUJLWn3aBn5gbgLGAesAS4NjMXR8SFETG5edk8YHVEPALcAXwyM1d31tCSpI1VdA09M+cCc1vtu6DF1wl8ovmPJKkb+E5RSSqEQZekQhh0SSqEQZekQhh0SSqEQZekQhh0SSqEQZekQhh0SSqEQZekQhh0SSqEQZekQhh0SSqEQZekQhh0SSqEQZekQhh0SSqEQZekQhh0SSqEQZekQhh0SSqEQZekQhh0SSqEQZekQhh0SSqEQZekQhh0SSqEQZekQhh0SSqEQZekQhh0SSqEQZekQhh0SSpERUGPiIkR8WhENETEjM2smxoRGRG11RtRklSJdoMeET2BWcAkYCRwUkSMbGNdX+DjwIJqDylJal8lj9DHAA2ZuSwzXwLmAEe3se5LwNeB9VWcT5JUoUqCPhBY0WK7sXnf6yLiAGBwZv6iirNJkjpgq58UjYgewLeAcytYOz0i6iOiftWqVVt7aklSC5UEfSUwuMX2oOZ9r+kL7AvcGRGPA+8G6tp6YjQzL8nM2sysramp2fKpJUkbqSTo9wPDI2JYRPQGTgTqXrsxM5/NzP6ZOTQzhwL3ApMzs75TJpYktandoGfmBuAsYB6wBLg2MxdHxIURMbmzB5QkVaZXJYsycy4wt9W+CzaxdtzWjyVJ6ijfKSpJhTDoklQIgy5JhTDoklQIgy5JhTDoklQIgy5JhTDoklQIgy5JhTDoklQIgy5JhTDoklQIgy5JhTDoklQIgy5JhTDoklQIgy5JhTDoklQIgy5JhTDoklQIgy5JhTDoklQIgy5JhTDoklQIgy5JhTDoklQIgy5JhTDoklQIgy5JhTDoklQIgy5JhTDoklSIioIeERMj4tGIaIiIGW3c/omIeCQiHoqI2yNiz+qPKknanHaDHhE9gVnAJGAkcFJEjGy1bBFQm5mjgOuBb1R7UEnS5lXyCH0M0JCZyzLzJWAOcHTLBZl5R2aua968FxhU3TElSe2pJOgDgRUtthub923K6cAvt2YoSVLH9armwSLiw0AtcOgmbp8OTAcYMmRINU8tSdu9Sh6hrwQGt9ge1LzvDSJiAvBZYHJm/r2tA2XmJZlZm5m1NTU1WzKvJGkTKgn6/cDwiBgWEb2BE4G6lgsiYn/ghzTF/KnqjylJak+7Qc/MDcBZwDxgCXBtZi6OiAsjYnLzsm8Cbwaui4gHIqJuE4eTJHWSiq6hZ+ZcYG6rfRe0+HpCleeSJHWQ7xSVpEIYdEkqhEGXpEIYdEkqhEGXpEIYdEkqhEGXpEIYdEkqhEGXpEIYdEkqhEGXpEIYdEkqhEGXpEIYdEkqhEGXpEIYdEkqhEGXpEIYdEkqhEGXpEIYdEkqhEGXpEIYdEkqhEGXpEIYdEkqhEGXpEIYdEkqhEGXpEIYdEkqhEGXpEIYdEkqhEGXpEIYdEkqhEGXpEJUFPSImBgRj0ZEQ0TMaOP2HSPimubbF0TE0KpPKknarHaDHhE9gVnAJGAkcFJEjGy17HTgmczcC7gI+Hq1B5UkbV4lj9DHAA2ZuSwzXwLmAEe3WnM0cEXz19cD4yMiqjemJKk9vSpYMxBY0WK7ERi7qTWZuSEingX6AX9ruSgipgPTmzfXRsSjWzL0NqI/rf7+nSn8maiavO+2baXff3tu6oZKgl41mXkJcElXnrO7RER9ZtZ29xzqOO+7bdv2fP9VcsllJTC4xfag5n1tromIXsCuwOpqDChJqkwlQb8fGB4RwyKiN3AiUNdqTR1wSvPXxwL/m5lZvTElSe1p95JL8zXxs4B5QE9gdmYujogLgfrMrAN+DFwZEQ3A0zRFf3u3XVxaKpT33bZtu73/wgfSklQG3ykqSYUw6JJUCIMuSYXo0tehlywi3kHTO2YHNu9aCdRl5pLum0oqX/N/ewOBBZm5tsX+iZn5q+6brOv5CL0KIuLTNH0kQgD3Nf8J4Oq2PsxM246I+PfunkGbFhH/AdwMnA08HBEtP5bkq90zVffxVS5VEBGPAe/MzJdb7e8NLM7M4d0zmbZWRCzPzCHdPYfaFhG/Bw7MzLXNn/J6PXBlZn4nIhZl5v7dO2HX8pJLdbwKvA14otX+PZpv0z+wiHhoUzcBA7pyFnVYj9cus2Tm4xExDrg+Ivak6f7brhj06jgHuD0ilvL/H2Q2BNgLOKu7hlLFBgBHAs+02h/A/K4fRx3w14gYnZkPADQ/Uj8KmA3s162TdQODXgWZ+auI2Jumjxpu+aTo/Zn5SvdNpgrdArz5tSi0FBF3dvk06ohpwIaWOzJzAzAtIn7YPSN1H6+hS1IhfJWLJBXCoEtSIQy6JBXCoEtSIQy6JBXi/wA/Vb9DUnYG4AAAAABJRU5ErkJggg==\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "campaign.history.plot.bar(y='total_discovery')" + ] + }, + { + "cell_type": "markdown", + "id": "6b9569c0", + "metadata": {}, + "source": [ + "![hull.png](m3gnet_structure_discovery/hull.png)" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "id": "2c2ea729", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
stabilityis_stable
2-Mn-i-S-i-S-i-S-i-S-i-S-i-S-i-S-i-S-i0.000000True
mp-770.001007True
164-Mn-c-Mn-d-Mn-d-S-c-S-d-S-d0.166483False
mp-6081000.440143False
mp-6551410.357319False
194-S-e-Mn-f0.242535False
mp-10639881.137487False
mp-5568530.501455False
164-S-c-S-d-S-d-Mn-c-Mn-d-Mn-d0.166057False
mp-14550.203513False
mp-5574880.016674True
mp-9754390.425642False
mp-10953350.379026False
mp-6846731.301292False
mp-11968310.010509True
mp-5570310.043982True
mp-5830720.028377True
mp-70.064504False
mp-5578690.000862True
mp-20650.000000True
mp-960.000000True
mp-5557600.040942True
mp-5573760.031792True
mp-9743550.170584False
mvc-110470.308486False
mp-5613700.028362True
mp-350.000000True
187-Mn-a-Mn-d-S-g0.286635False
mp-10649330.349665False
225-S-a-Mn-b0.064834False
mp-5559150.020584True
mp-5589640.014118True
38-Mn-a-S-c-S-c-S-d-S-e0.057605False
mp-11796430.348414False
194-Mn-f-S-f0.233900False
mp-10188040.092246False
mp-25620.810464False
mp-5575590.040547True
mp-830.038023True
mp-108690.626443False
mp-10652500.347633False
mp-5615130.018951True
mvc-140470.000000True
mp-10940730.570869False
mp-5562690.037178True
mp-5580140.014103True
mp-17830.080923False
99-S-a-Mn-b0.583637False
mvc-340.013220True
\n", + "
" + ], + "text/plain": [ + " stability is_stable\n", + "2-Mn-i-S-i-S-i-S-i-S-i-S-i-S-i-S-i-S-i 0.000000 True\n", + "mp-77 0.001007 True\n", + "164-Mn-c-Mn-d-Mn-d-S-c-S-d-S-d 0.166483 False\n", + "mp-608100 0.440143 False\n", + "mp-655141 0.357319 False\n", + "194-S-e-Mn-f 0.242535 False\n", + "mp-1063988 1.137487 False\n", + "mp-556853 0.501455 False\n", + "164-S-c-S-d-S-d-Mn-c-Mn-d-Mn-d 0.166057 False\n", + "mp-1455 0.203513 False\n", + "mp-557488 0.016674 True\n", + "mp-975439 0.425642 False\n", + "mp-1095335 0.379026 False\n", + "mp-684673 1.301292 False\n", + "mp-1196831 0.010509 True\n", + "mp-557031 0.043982 True\n", + "mp-583072 0.028377 True\n", + "mp-7 0.064504 False\n", + "mp-557869 0.000862 True\n", + "mp-2065 0.000000 True\n", + "mp-96 0.000000 True\n", + "mp-555760 0.040942 True\n", + "mp-557376 0.031792 True\n", + "mp-974355 0.170584 False\n", + "mvc-11047 0.308486 False\n", + "mp-561370 0.028362 True\n", + "mp-35 0.000000 True\n", + "187-Mn-a-Mn-d-S-g 0.286635 False\n", + "mp-1064933 0.349665 False\n", + "225-S-a-Mn-b 0.064834 False\n", + "mp-555915 0.020584 True\n", + "mp-558964 0.014118 True\n", + "38-Mn-a-S-c-S-c-S-d-S-e 0.057605 False\n", + "mp-1179643 0.348414 False\n", + "194-Mn-f-S-f 0.233900 False\n", + "mp-1018804 0.092246 False\n", + "mp-2562 0.810464 False\n", + "mp-557559 0.040547 True\n", + "mp-83 0.038023 True\n", + "mp-10869 0.626443 False\n", + "mp-1065250 0.347633 False\n", + "mp-561513 0.018951 True\n", + "mvc-14047 0.000000 True\n", + "mp-1094073 0.570869 False\n", + "mp-556269 0.037178 True\n", + "mp-558014 0.014103 True\n", + "mp-1783 0.080923 False\n", + "99-S-a-Mn-b 0.583637 False\n", + "mvc-34 0.013220 True" + ] + }, + "execution_count": 20, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# To fetch the seed_data.\n", + "campaign.analyzer[0].current_analysis" + ] + }, + { + "cell_type": "markdown", + "id": "b8f05681", + "metadata": {}, + "source": [ + "In the real CAMD campaign, the agent is a little stronger, having access to both the entire ICSD dataset from the OQMD for regression and using more estimators to get a stronger prediction and uncertainty estimate. Similarly, in the real ProtoDFTCampaign, one can invoke from a chemical system, and logging and storage are backed up to the cloud. Lastly, the production ProtoDFTCampaign uses a custom DFT submission backend that runs OQMD-parametrized DFT simulations using AWS Batch." + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "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.9.12" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/requirements.txt b/requirements.txt index 672f5578..ca39c8f5 100644 --- a/requirements.txt +++ b/requirements.txt @@ -12,7 +12,7 @@ awscli # Pinned dependencies to help pip sqlparse==0.4.2 -spglib==1.16.5 +spglib==2.0.0 scipy==1.9.0 # Temporary qmpy3 dependency