diff --git a/AA1000_simulation_10MC_50exp_1batch.png b/AA1000_simulation_10MC_50exp_1batch.png deleted file mode 100644 index 4e7e429..0000000 Binary files a/AA1000_simulation_10MC_50exp_1batch.png and /dev/null differ diff --git a/can_baybe-inhibitor.ipynb b/can_baybe-inhibitor.ipynb index 271be05..72a77ae 100644 --- a/can_baybe-inhibitor.ipynb +++ b/can_baybe-inhibitor.ipynb @@ -30,9 +30,19 @@ }, { "cell_type": "code", - "execution_count": 114, + "execution_count": 1, "metadata": {}, "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/home/vscode/.local/lib/python3.10/site-packages/baybe/telemetry.py:222: UserWarning: WARNING: BayBE Telemetry endpoint https://public.telemetry.baybe.p.uptimize.merckgroup.com:4317 cannot be reached. Disabling telemetry. The exception encountered was: ConnectionError, HTTPConnectionPool(host='verkehrsnachrichten.merck.de', port=80): Max retries exceeded with url: / (Caused by NameResolutionError(\": Failed to resolve 'verkehrsnachrichten.merck.de' ([Errno -2] Name or service not known)\"))\n", + " warnings.warn(\n", + "/home/vscode/.local/lib/python3.10/site-packages/tqdm/auto.py:21: TqdmWarning: IProgress not found. Please update jupyter and ipywidgets. See https://ipywidgets.readthedocs.io/en/stable/user_install.html\n", + " from .autonotebook import tqdm as notebook_tqdm\n" + ] + }, { "data": { "text/html": [ @@ -65,48 +75,48 @@ " \n", " \n", " 0\n", - " C(C(=O)[O-])C(CC(=O)[O-])(C(=O)[O-])O\n", - " 0.0\n", - " 2.0\n", - " 5.000000e-07\n", - " 2\n", - " 53.85\n", + " C(=O)(C(=O)[O-])[O-]\n", + " 24.0\n", + " 4.0\n", + " 0.0010\n", + " 0.10\n", + " 20.00\n", " \n", " \n", " 1\n", - " C(C(=O)[O-])C(CC(=O)[O-])(C(=O)[O-])O\n", - " 0.0\n", - " 2.0\n", - " 1.000000e-06\n", - " 2\n", - " 58.55\n", + " C(=O)(C(=O)[O-])[O-]\n", + " 24.0\n", + " 7.0\n", + " 0.0005\n", + " 0.05\n", + " 12.35\n", " \n", " \n", " 2\n", - " C(C(=O)[O-])C(CC(=O)[O-])(C(=O)[O-])O\n", - " 0.0\n", - " 2.0\n", - " 5.000000e-06\n", - " 2\n", - " 67.40\n", + " C(=O)(C(=O)[O-])[O-]\n", + " 24.0\n", + " 10.0\n", + " 0.0010\n", + " 0.10\n", + " 20.00\n", " \n", " \n", " 3\n", " C(C(=O)[O-])C(CC(=O)[O-])(C(=O)[O-])O\n", - " 0.0\n", - " 2.0\n", - " 1.000000e-05\n", - " 2\n", - " 86.65\n", + " 24.0\n", + " 4.0\n", + " 0.0010\n", + " 0.10\n", + " 30.00\n", " \n", " \n", " 4\n", " C(C(=O)[O-])C(CC(=O)[O-])(C(=O)[O-])O\n", - " 0.0\n", - " 2.0\n", - " 5.000000e-05\n", - " 2\n", - " 73.90\n", + " 24.0\n", + " 7.0\n", + " 0.0005\n", + " 0.05\n", + " -23.95\n", " \n", " \n", " ...\n", @@ -118,86 +128,86 @@ " ...\n", " \n", " \n", - " 303\n", - " S=c1sc2c([nH]1)cccc2\n", - " 384.0\n", - " -0.6\n", - " 4.200000e-03\n", - " 0\n", - " 70.60\n", + " 510\n", + " c1ccc2c(c1)[nH]nn2\n", + " 24.0\n", + " 7.0\n", + " 0.0005\n", + " 0.05\n", + " 97.95\n", " \n", " \n", - " 304\n", - " S=c1sc2c([nH]1)cccc2\n", - " 384.0\n", - " -0.6\n", - " 5.300000e-03\n", - " 0\n", - " 79.77\n", + " 511\n", + " c1ccc2c(c1)[nH]nn2\n", + " 24.0\n", + " 10.0\n", + " 0.0010\n", + " 0.10\n", + " 90.00\n", " \n", " \n", - " 305\n", - " S=c1sc2c([nH]1)cccc2\n", - " 384.0\n", - " -0.6\n", - " 6.500000e-03\n", - " 0\n", - " 76.72\n", + " 512\n", + " c1ccc2c(c1)[nH]nn2\n", + " 672.0\n", + " 7.0\n", + " 0.0010\n", + " 0.10\n", + " 98.00\n", " \n", " \n", - " 306\n", - " S=c1sc2c([nH]1)cccc2\n", - " 384.0\n", - " -0.6\n", - " 7.500000e-03\n", - " 0\n", - " 75.44\n", + " 513\n", + " c1ncn[nH]1\n", + " 24.0\n", + " 4.0\n", + " 0.0010\n", + " 0.10\n", + " 30.00\n", " \n", " \n", - " 307\n", - " S=c1sc2c([nH]1)cccc2\n", - " 384.0\n", - " -0.6\n", - " 8.500000e-03\n", - " 0\n", - " 77.22\n", + " 514\n", + " c1ncn[nH]1\n", + " 24.0\n", + " 10.0\n", + " 0.0010\n", + " 0.10\n", + " 90.00\n", " \n", " \n", "\n", - "

308 rows × 6 columns

\n", + "

515 rows × 6 columns

\n", "" ], "text/plain": [ - " SMILES Time_h pH Inhib_Concentrat_M \\\n", - "0 C(C(=O)[O-])C(CC(=O)[O-])(C(=O)[O-])O 0.0 2.0 5.000000e-07 \n", - "1 C(C(=O)[O-])C(CC(=O)[O-])(C(=O)[O-])O 0.0 2.0 1.000000e-06 \n", - "2 C(C(=O)[O-])C(CC(=O)[O-])(C(=O)[O-])O 0.0 2.0 5.000000e-06 \n", - "3 C(C(=O)[O-])C(CC(=O)[O-])(C(=O)[O-])O 0.0 2.0 1.000000e-05 \n", - "4 C(C(=O)[O-])C(CC(=O)[O-])(C(=O)[O-])O 0.0 2.0 5.000000e-05 \n", - ".. ... ... ... ... \n", - "303 S=c1sc2c([nH]1)cccc2 384.0 -0.6 4.200000e-03 \n", - "304 S=c1sc2c([nH]1)cccc2 384.0 -0.6 5.300000e-03 \n", - "305 S=c1sc2c([nH]1)cccc2 384.0 -0.6 6.500000e-03 \n", - "306 S=c1sc2c([nH]1)cccc2 384.0 -0.6 7.500000e-03 \n", - "307 S=c1sc2c([nH]1)cccc2 384.0 -0.6 8.500000e-03 \n", + " SMILES Time_h pH Inhib_Concentrat_M \\\n", + "0 C(=O)(C(=O)[O-])[O-] 24.0 4.0 0.0010 \n", + "1 C(=O)(C(=O)[O-])[O-] 24.0 7.0 0.0005 \n", + "2 C(=O)(C(=O)[O-])[O-] 24.0 10.0 0.0010 \n", + "3 C(C(=O)[O-])C(CC(=O)[O-])(C(=O)[O-])O 24.0 4.0 0.0010 \n", + "4 C(C(=O)[O-])C(CC(=O)[O-])(C(=O)[O-])O 24.0 7.0 0.0005 \n", + ".. ... ... ... ... \n", + "510 c1ccc2c(c1)[nH]nn2 24.0 7.0 0.0005 \n", + "511 c1ccc2c(c1)[nH]nn2 24.0 10.0 0.0010 \n", + "512 c1ccc2c(c1)[nH]nn2 672.0 7.0 0.0010 \n", + "513 c1ncn[nH]1 24.0 4.0 0.0010 \n", + "514 c1ncn[nH]1 24.0 10.0 0.0010 \n", "\n", " Salt_Concentrat_M Efficiency \n", - "0 2 53.85 \n", - "1 2 58.55 \n", - "2 2 67.40 \n", - "3 2 86.65 \n", - "4 2 73.90 \n", + "0 0.10 20.00 \n", + "1 0.05 12.35 \n", + "2 0.10 20.00 \n", + "3 0.10 30.00 \n", + "4 0.05 -23.95 \n", ".. ... ... \n", - "303 0 70.60 \n", - "304 0 79.77 \n", - "305 0 76.72 \n", - "306 0 75.44 \n", - "307 0 77.22 \n", + "510 0.05 97.95 \n", + "511 0.10 90.00 \n", + "512 0.10 98.00 \n", + "513 0.10 30.00 \n", + "514 0.10 90.00 \n", "\n", - "[308 rows x 6 columns]" + "[515 rows x 6 columns]" ] }, - "execution_count": 114, + "execution_count": 1, "metadata": {}, "output_type": "execute_result" } @@ -218,29 +228,31 @@ "from baybe.targets import NumericalTarget\n", "\n", "df_AA2024 = pd.read_excel('data/averaged_filtered_AA2024.xlsx')\n", + "df_AA5000 = pd.read_excel('data/averaged_filtered_AA5000.xlsx')\n", + "df_AA7075 = pd.read_excel('data/averaged_filtered_AA7075.xlsx')\n", "df_AA1000 = pd.read_excel('data/averaged_filtered_AA1000.xlsx')\n", "df_Al = pd.read_excel('data/averaged_filtered_Al.xlsx')\n", "\n", - "df_active = df_AA1000\n", - "df_active" - ] - }, - { - "cell_type": "code", - "execution_count": 115, - "metadata": {}, - "outputs": [], - "source": [ - "# SMOKE_TEST = \"SMOKE_TEST\" in os.environ\n", + "# change this for campaigns on different datasets\n", + "df_active = df_AA2024\n", + "\n", + "if df_active is df_AA2024:\n", + " exp_dataset_name = 'AA2024'\n", + "elif df_active is df_AA5000:\n", + " exp_dataset_name = 'AA5000'\n", + "elif df_active is df_AA7075:\n", + " exp_dataset_name = 'AA7075'\n", + "elif df_active is df_AA1000:\n", + " exp_dataset_name = 'AA1000'\n", + "elif df_active is df_Al:\n", + " exp_dataset_name = 'Al'\n", "\n", - "# N_MC_ITERATIONS = 2 if SMOKE_TEST else 5\n", - "# N_DOE_ITERATIONS = 2 if SMOKE_TEST else 5\n", - "# BATCH_SIZE = 1 if SMOKE_TEST else 3" + "df_active" ] }, { "cell_type": "code", - "execution_count": 116, + "execution_count": 2, "metadata": {}, "outputs": [], "source": [ @@ -249,7 +261,7 @@ }, { "cell_type": "code", - "execution_count": 117, + "execution_count": 3, "metadata": {}, "outputs": [], "source": [ @@ -264,7 +276,7 @@ }, { "cell_type": "code", - "execution_count": 118, + "execution_count": 4, "metadata": {}, "outputs": [], "source": [ @@ -363,9 +375,508 @@ }, { "cell_type": "code", - "execution_count": 119, + "execution_count": 5, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "________________________________________________________________________________\n", + "[Memory] Calling baybe.utils.chemistry._smiles_to_mordred_features...\n", + "_smiles_to_mordred_features('C(=O)(C(=O)[O-])[O-]')\n", + "_______________________________________smiles_to_mordred_features - 0.3s, 0.0min\n", + "________________________________________________________________________________\n", + "[Memory] Calling baybe.utils.chemistry._smiles_to_mordred_features...\n", + "_smiles_to_mordred_features('C(C(=O)[O-])C(CC(=O)[O-])(C(=O)[O-])O')\n", + "_______________________________________smiles_to_mordred_features - 0.1s, 0.0min\n", + "________________________________________________________________________________\n", + "[Memory] Calling baybe.utils.chemistry._smiles_to_mordred_features...\n", + "_smiles_to_mordred_features('C(C(C(C(C(C(=O)[O-])O)O)O)O)O.C(C(C(C(C(C(=O)[O-])O)O)O)O)O.[Fe+2]')\n", + "_______________________________________smiles_to_mordred_features - 0.1s, 0.0min\n", + "________________________________________________________________________________\n", + "[Memory] Calling baybe.utils.chemistry._smiles_to_mordred_features...\n", + "_smiles_to_mordred_features('C(C(C(C(C(C(=O)[O-])O)O)O)O)O.C(C(C(C(C(C(=O)[O-])O)O)O)O)O.[Zn+2]')\n", + "_______________________________________smiles_to_mordred_features - 0.1s, 0.0min\n", + "________________________________________________________________________________\n", + "[Memory] Calling baybe.utils.chemistry._smiles_to_mordred_features...\n", + "_smiles_to_mordred_features('C1=CC(=C(C=C1O)O)C=NNC(=S)N')\n", + "_______________________________________smiles_to_mordred_features - 0.1s, 0.0min\n", + "________________________________________________________________________________\n", + "[Memory] Calling baybe.utils.chemistry._smiles_to_mordred_features...\n", + "_smiles_to_mordred_features('C1=CC(=C(C=C1SSC2=CC(=C(C=C2)[N+](=O)[O-])C(=O)O)C(=O)O)[N+](=O)[O-]')\n", + "_______________________________________smiles_to_mordred_features - 0.4s, 0.0min\n", + "________________________________________________________________________________\n", + "[Memory] Calling baybe.utils.chemistry._smiles_to_mordred_features...\n", + "_smiles_to_mordred_features('C1=CC(=CC(=C1)S)C(=O)O')\n", + "_______________________________________smiles_to_mordred_features - 0.1s, 0.0min\n", + "________________________________________________________________________________\n", + "[Memory] Calling baybe.utils.chemistry._smiles_to_mordred_features...\n", + "_smiles_to_mordred_features('C1=CC2=NNN=C2C=C1Cl')\n", + "_______________________________________smiles_to_mordred_features - 0.1s, 0.0min\n", + "________________________________________________________________________________\n", + "[Memory] Calling baybe.utils.chemistry._smiles_to_mordred_features...\n", + "_smiles_to_mordred_features('C1=CC=C(C(=C1)C=NNC(=S)N)O')\n", + "_______________________________________smiles_to_mordred_features - 0.2s, 0.0min\n", + "________________________________________________________________________________\n", + "[Memory] Calling baybe.utils.chemistry._smiles_to_mordred_features...\n", + "_smiles_to_mordred_features('C1COCCN1CCCS(=O)(=O)O')\n", + "_______________________________________smiles_to_mordred_features - 0.1s, 0.0min\n", + "________________________________________________________________________________\n", + "[Memory] Calling baybe.utils.chemistry._smiles_to_mordred_features...\n", + "_smiles_to_mordred_features('C1N2CN3CN1CN(C2)C3')\n", + "_______________________________________smiles_to_mordred_features - 0.2s, 0.0min\n", + "________________________________________________________________________________\n", + "[Memory] Calling baybe.utils.chemistry._smiles_to_mordred_features...\n", + "_smiles_to_mordred_features('C=CC(=O)OCCOC(=O)OCCSc1ncccn1')\n", + "_______________________________________smiles_to_mordred_features - 0.1s, 0.0min\n", + "________________________________________________________________________________\n", + "[Memory] Calling baybe.utils.chemistry._smiles_to_mordred_features...\n", + "_smiles_to_mordred_features('CC(=O)O')\n", + "_______________________________________smiles_to_mordred_features - 0.0s, 0.0min\n", + "________________________________________________________________________________\n", + "[Memory] Calling baybe.utils.chemistry._smiles_to_mordred_features...\n", + "_smiles_to_mordred_features('CC(=O)SSC(=O)C')\n", + "_______________________________________smiles_to_mordred_features - 0.1s, 0.0min\n", + "________________________________________________________________________________\n", + "[Memory] Calling baybe.utils.chemistry._smiles_to_mordred_features...\n", + "_smiles_to_mordred_features('CC1(C(N2C(S1)C(C2=O)NC(=O)C(C3=CC=C(C=C3)O)N)C(=O)O)C')\n", + "_______________________________________smiles_to_mordred_features - 0.3s, 0.0min\n", + "________________________________________________________________________________\n", + "[Memory] Calling baybe.utils.chemistry._smiles_to_mordred_features...\n", + "_smiles_to_mordred_features('CCCCCCCC/C=C\\\\CCCCCCCC(=O)O')\n", + "_______________________________________smiles_to_mordred_features - 0.1s, 0.0min\n", + "________________________________________________________________________________\n", + "[Memory] Calling baybe.utils.chemistry._smiles_to_mordred_features...\n", + "_smiles_to_mordred_features('CCCCCCCCCCCCCCCCCC(=O)O')\n", + "_______________________________________smiles_to_mordred_features - 0.1s, 0.0min\n", + "________________________________________________________________________________\n", + "[Memory] Calling baybe.utils.chemistry._smiles_to_mordred_features...\n", + "_smiles_to_mordred_features('CCCCCCCCCCCCCCN(CC(=O)O[Na])CC(=O)O[Na]')\n", + "_______________________________________smiles_to_mordred_features - 0.1s, 0.0min\n", + "________________________________________________________________________________\n", + "[Memory] Calling baybe.utils.chemistry._smiles_to_mordred_features...\n", + "_smiles_to_mordred_features('CCCCCCCCCCCCN(CC(=O)O[Na])CC(=O)O[Na]')\n", + "_______________________________________smiles_to_mordred_features - 0.1s, 0.0min\n", + "________________________________________________________________________________\n", + "[Memory] Calling baybe.utils.chemistry._smiles_to_mordred_features...\n", + "_smiles_to_mordred_features('CCCCCCCCCCCCOS(=O)(=O)O')\n", + "_______________________________________smiles_to_mordred_features - 0.1s, 0.0min\n", + "________________________________________________________________________________\n", + "[Memory] Calling baybe.utils.chemistry._smiles_to_mordred_features...\n", + "_smiles_to_mordred_features('CCCCCCCCCCCCc1ccccc1S([O])([O])O')\n", + "_______________________________________smiles_to_mordred_features - 0.2s, 0.0min\n", + "________________________________________________________________________________\n", + "[Memory] Calling baybe.utils.chemistry._smiles_to_mordred_features...\n", + "_smiles_to_mordred_features('CCCCCCCCN(CC(=O)O[Na])CC(=O)O[Na]')\n", + "_______________________________________smiles_to_mordred_features - 0.1s, 0.0min\n", + "________________________________________________________________________________\n", + "[Memory] Calling baybe.utils.chemistry._smiles_to_mordred_features...\n", + "_smiles_to_mordred_features('CCCCN(CCCC)C1=NC(=NC(=N1)NC(CCSC)C(=O)O)NC(CCSC)C(=O)O')\n", + "_______________________________________smiles_to_mordred_features - 0.3s, 0.0min\n", + "________________________________________________________________________________\n", + "[Memory] Calling baybe.utils.chemistry._smiles_to_mordred_features...\n", + "_smiles_to_mordred_features('CCCCOP(=O)(OCCCC)O')\n", + "_______________________________________smiles_to_mordred_features - 0.1s, 0.0min\n", + "________________________________________________________________________________\n", + "[Memory] Calling baybe.utils.chemistry._smiles_to_mordred_features...\n", + "_smiles_to_mordred_features('CCN(C(=S)S)CC')\n", + "_______________________________________smiles_to_mordred_features - 0.1s, 0.0min\n", + "________________________________________________________________________________\n", + "[Memory] Calling baybe.utils.chemistry._smiles_to_mordred_features...\n", + "_smiles_to_mordred_features('CCOc1ccc2c(c1)nc([nH]2)S')\n", + "_______________________________________smiles_to_mordred_features - 0.1s, 0.0min\n", + "________________________________________________________________________________\n", + "[Memory] Calling baybe.utils.chemistry._smiles_to_mordred_features...\n", + "_smiles_to_mordred_features('CCSc1nnc(s1)N')\n", + "_______________________________________smiles_to_mordred_features - 0.1s, 0.0min\n", + "________________________________________________________________________________\n", + "[Memory] Calling baybe.utils.chemistry._smiles_to_mordred_features...\n", + "_smiles_to_mordred_features('CN1C=NC2=C1C(=O)N(C(=O)N2C)C')\n", + "_______________________________________smiles_to_mordred_features - 0.1s, 0.0min\n", + "________________________________________________________________________________\n", + "[Memory] Calling baybe.utils.chemistry._smiles_to_mordred_features...\n", + "_smiles_to_mordred_features('CNCC(C1=CC(=CC=C1)O)O')\n", + "_______________________________________smiles_to_mordred_features - 0.1s, 0.0min\n", + "________________________________________________________________________________\n", + "[Memory] Calling baybe.utils.chemistry._smiles_to_mordred_features...\n", + "_smiles_to_mordred_features('COC(=O)CCCC1=CNC2=CC=CC=C21')\n", + "_______________________________________smiles_to_mordred_features - 0.1s, 0.0min\n", + "________________________________________________________________________________\n", + "[Memory] Calling baybe.utils.chemistry._smiles_to_mordred_features...\n", + "_smiles_to_mordred_features('COC(=O)n1nnc2ccccc12')\n", + "_______________________________________smiles_to_mordred_features - 0.1s, 0.0min\n", + "________________________________________________________________________________\n", + "[Memory] Calling baybe.utils.chemistry._smiles_to_mordred_features...\n", + "_smiles_to_mordred_features('COCCOC(=O)OCSc1nc2c(s1)cccc2')\n", + "_______________________________________smiles_to_mordred_features - 0.2s, 0.0min\n", + "________________________________________________________________________________\n", + "[Memory] Calling baybe.utils.chemistry._smiles_to_mordred_features...\n", + "_smiles_to_mordred_features('COc1ccc2c(c1)[nH]c(=S)[nH]2')\n", + "_______________________________________smiles_to_mordred_features - 0.1s, 0.0min\n", + "________________________________________________________________________________\n", + "[Memory] Calling baybe.utils.chemistry._smiles_to_mordred_features...\n", + "_smiles_to_mordred_features('COc1cccc(c1)c1n[nH]c(=S)[nH]1')\n", + "_______________________________________smiles_to_mordred_features - 0.1s, 0.0min\n", + "________________________________________________________________________________\n", + "[Memory] Calling baybe.utils.chemistry._smiles_to_mordred_features...\n", + "_smiles_to_mordred_features('CS[C]1N[N]C(=N1)N')\n", + "_______________________________________smiles_to_mordred_features - 0.1s, 0.0min\n", + "________________________________________________________________________________\n", + "[Memory] Calling baybe.utils.chemistry._smiles_to_mordred_features...\n", + "_smiles_to_mordred_features('CSc1[nH]c2c(n1)cc(c(c2)C)C')\n", + "_______________________________________smiles_to_mordred_features - 0.1s, 0.0min\n", + "________________________________________________________________________________\n", + "[Memory] Calling baybe.utils.chemistry._smiles_to_mordred_features...\n", + "_smiles_to_mordred_features('CSc1nnc(s1)N')\n", + "_______________________________________smiles_to_mordred_features - 0.1s, 0.0min\n", + "________________________________________________________________________________\n", + "[Memory] Calling baybe.utils.chemistry._smiles_to_mordred_features...\n", + "_smiles_to_mordred_features('Cc1cc(C)nc(n1)S')\n", + "_______________________________________smiles_to_mordred_features - 0.1s, 0.0min\n", + "________________________________________________________________________________\n", + "[Memory] Calling baybe.utils.chemistry._smiles_to_mordred_features...\n", + "_smiles_to_mordred_features('Cc1ccc(c(c1)n1nc2c(n1)cccc2)O')\n", + "_______________________________________smiles_to_mordred_features - 0.3s, 0.0min\n", + "________________________________________________________________________________\n", + "[Memory] Calling baybe.utils.chemistry._smiles_to_mordred_features...\n", + "_smiles_to_mordred_features('Cc1ccc2c(c1)nc([nH]2)S')\n", + "_______________________________________smiles_to_mordred_features - 0.2s, 0.0min\n", + "________________________________________________________________________________\n", + "[Memory] Calling baybe.utils.chemistry._smiles_to_mordred_features...\n", + "_smiles_to_mordred_features('Cc1n[nH]c(=S)s1')\n", + "_______________________________________smiles_to_mordred_features - 0.1s, 0.0min\n", + "________________________________________________________________________________\n", + "[Memory] Calling baybe.utils.chemistry._smiles_to_mordred_features...\n", + "_smiles_to_mordred_features('Cc1nsc(c1)N')\n", + "_______________________________________smiles_to_mordred_features - 0.1s, 0.0min\n", + "________________________________________________________________________________\n", + "[Memory] Calling baybe.utils.chemistry._smiles_to_mordred_features...\n", + "_smiles_to_mordred_features('ClC([C]1N[N]C=N1)(Cl)Cl')\n", + "_______________________________________smiles_to_mordred_features - 0.1s, 0.0min\n", + "________________________________________________________________________________\n", + "[Memory] Calling baybe.utils.chemistry._smiles_to_mordred_features...\n", + "_smiles_to_mordred_features('Clc1cc2[nH]c(=S)[nH]c2cc1Cl')\n", + "_______________________________________smiles_to_mordred_features - 0.1s, 0.0min\n", + "________________________________________________________________________________\n", + "[Memory] Calling baybe.utils.chemistry._smiles_to_mordred_features...\n", + "_smiles_to_mordred_features('Clc1ccc(cc1)CC[C@](C(C)(C)C)(Cn1cncn1)O')\n", + "_______________________________________smiles_to_mordred_features - 0.2s, 0.0min\n", + "________________________________________________________________________________\n", + "[Memory] Calling baybe.utils.chemistry._smiles_to_mordred_features...\n", + "_smiles_to_mordred_features('Clc1ccc(cc1Cl)c1n[nH]c(=S)[nH]1')\n", + "_______________________________________smiles_to_mordred_features - 0.1s, 0.0min\n", + "________________________________________________________________________________\n", + "[Memory] Calling baybe.utils.chemistry._smiles_to_mordred_features...\n", + "_smiles_to_mordred_features('Clc1ccc2c(c1)[nH]c(n2)S')\n", + "_______________________________________smiles_to_mordred_features - 0.1s, 0.0min\n", + "________________________________________________________________________________\n", + "[Memory] Calling baybe.utils.chemistry._smiles_to_mordred_features...\n", + "_smiles_to_mordred_features('Clc1cccc(c1)c1n[nH]c(=S)[nH]1')\n", + "_______________________________________smiles_to_mordred_features - 0.2s, 0.0min\n", + "________________________________________________________________________________\n", + "[Memory] Calling baybe.utils.chemistry._smiles_to_mordred_features...\n", + "_smiles_to_mordred_features('Cn1cnnc1S')\n", + "_______________________________________smiles_to_mordred_features - 0.1s, 0.0min\n", + "________________________________________________________________________________\n", + "[Memory] Calling baybe.utils.chemistry._smiles_to_mordred_features...\n", + "_smiles_to_mordred_features('Cn1nnnc1S')\n", + "_______________________________________smiles_to_mordred_features - 0.1s, 0.0min\n", + "________________________________________________________________________________\n", + "[Memory] Calling baybe.utils.chemistry._smiles_to_mordred_features...\n", + "_smiles_to_mordred_features('N.N.[N+](=O)(O)[O-].[N+](=O)(O)[O-].[N+](=O)([O-])[O-].[N+](=O)([O-])[O-].[N+](=O)([O-])[O-].O.O.O.O.[Ce+3]')\n", + "_______________________________________smiles_to_mordred_features - 0.2s, 0.0min\n", + "________________________________________________________________________________\n", + "[Memory] Calling baybe.utils.chemistry._smiles_to_mordred_features...\n", + "_smiles_to_mordred_features('NC(=S)NN=CC1=C(C(=C(C=C1)O)O)O')\n", + "_______________________________________smiles_to_mordred_features - 0.1s, 0.0min\n", + "________________________________________________________________________________\n", + "[Memory] Calling baybe.utils.chemistry._smiles_to_mordred_features...\n", + "_smiles_to_mordred_features('NCC(=O)O')\n", + "_______________________________________smiles_to_mordred_features - 0.1s, 0.0min\n", + "________________________________________________________________________________\n", + "[Memory] Calling baybe.utils.chemistry._smiles_to_mordred_features...\n", + "_smiles_to_mordred_features('NO')\n", + "_______________________________________smiles_to_mordred_features - 0.0s, 0.0min\n", + "________________________________________________________________________________\n", + "[Memory] Calling baybe.utils.chemistry._smiles_to_mordred_features...\n", + "_smiles_to_mordred_features('Nc1cc(N)nc(n1)S')\n", + "_______________________________________smiles_to_mordred_features - 0.1s, 0.0min\n", + "________________________________________________________________________________\n", + "[Memory] Calling baybe.utils.chemistry._smiles_to_mordred_features...\n", + "_smiles_to_mordred_features('Nc1cc(S)nc(n1)N')\n", + "_______________________________________smiles_to_mordred_features - 0.1s, 0.0min\n", + "________________________________________________________________________________\n", + "[Memory] Calling baybe.utils.chemistry._smiles_to_mordred_features...\n", + "_smiles_to_mordred_features('Nc1ccc2c(c1)sc(=S)[nH]2')\n", + "_______________________________________smiles_to_mordred_features - 0.1s, 0.0min\n", + "________________________________________________________________________________\n", + "[Memory] Calling baybe.utils.chemistry._smiles_to_mordred_features...\n", + "_smiles_to_mordred_features('Nc1ccnc(n1)S')\n", + "_______________________________________smiles_to_mordred_features - 0.1s, 0.0min\n", + "________________________________________________________________________________\n", + "[Memory] Calling baybe.utils.chemistry._smiles_to_mordred_features...\n", + "_smiles_to_mordred_features('Nc1n[nH]c(=S)s1')\n", + "_______________________________________smiles_to_mordred_features - 0.1s, 0.0min\n", + "________________________________________________________________________________\n", + "[Memory] Calling baybe.utils.chemistry._smiles_to_mordred_features...\n", + "_smiles_to_mordred_features('Nc1n[nH]c(n1)S')\n", + "_______________________________________smiles_to_mordred_features - 0.1s, 0.0min\n", + "________________________________________________________________________________\n", + "[Memory] Calling baybe.utils.chemistry._smiles_to_mordred_features...\n", + "_smiles_to_mordred_features('Nc1n[nH]cn1')\n", + "_______________________________________smiles_to_mordred_features - 0.1s, 0.0min\n", + "________________________________________________________________________________\n", + "[Memory] Calling baybe.utils.chemistry._smiles_to_mordred_features...\n", + "_smiles_to_mordred_features('Nc1nc([nH]n1)C(=O)O')\n", + "_______________________________________smiles_to_mordred_features - 0.1s, 0.0min\n", + "________________________________________________________________________________\n", + "[Memory] Calling baybe.utils.chemistry._smiles_to_mordred_features...\n", + "_smiles_to_mordred_features('Nc1ncncc1N')\n", + "_______________________________________smiles_to_mordred_features - 0.2s, 0.0min\n", + "________________________________________________________________________________\n", + "[Memory] Calling baybe.utils.chemistry._smiles_to_mordred_features...\n", + "_smiles_to_mordred_features('Nn1c(NN)nnc1S')\n", + "_______________________________________smiles_to_mordred_features - 0.1s, 0.0min\n", + "________________________________________________________________________________\n", + "[Memory] Calling baybe.utils.chemistry._smiles_to_mordred_features...\n", + "_smiles_to_mordred_features('Nn1c(S)nnc1c1ccccc1')\n", + "_______________________________________smiles_to_mordred_features - 0.1s, 0.0min\n", + "________________________________________________________________________________\n", + "[Memory] Calling baybe.utils.chemistry._smiles_to_mordred_features...\n", + "_smiles_to_mordred_features('Nn1cnnc1')\n", + "_______________________________________smiles_to_mordred_features - 0.1s, 0.0min\n", + "________________________________________________________________________________\n", + "[Memory] Calling baybe.utils.chemistry._smiles_to_mordred_features...\n", + "_smiles_to_mordred_features('O/N=C(/C(=N/O)/C)\\\\C')\n", + "_______________________________________smiles_to_mordred_features - 0.1s, 0.0min\n", + "________________________________________________________________________________\n", + "[Memory] Calling baybe.utils.chemistry._smiles_to_mordred_features...\n", + "_smiles_to_mordred_features('O/N=C(\\\\C(=N/O)\\\\c1ccco1)/c1ccco1')\n", + "_______________________________________smiles_to_mordred_features - 0.2s, 0.0min\n", + "________________________________________________________________________________\n", + "[Memory] Calling baybe.utils.chemistry._smiles_to_mordred_features...\n", + "_smiles_to_mordred_features('O=C([O-])C(O)C(O)C(O)C(O)CO.[Na+]')\n", + "_______________________________________smiles_to_mordred_features - 0.1s, 0.0min\n", + "________________________________________________________________________________\n", + "[Memory] Calling baybe.utils.chemistry._smiles_to_mordred_features...\n", + "_smiles_to_mordred_features('OC(=O)/C=C/c1ccccc1')\n", + "_______________________________________smiles_to_mordred_features - 0.1s, 0.0min\n", + "________________________________________________________________________________\n", + "[Memory] Calling baybe.utils.chemistry._smiles_to_mordred_features...\n", + "_smiles_to_mordred_features('OC(=O)CCCCC(=O)O')\n", + "_______________________________________smiles_to_mordred_features - 0.1s, 0.0min\n", + "________________________________________________________________________________\n", + "[Memory] Calling baybe.utils.chemistry._smiles_to_mordred_features...\n", + "_smiles_to_mordred_features('OC(=O)CCCCCCCCCCCCCCC(=O)O')\n", + "_______________________________________smiles_to_mordred_features - 0.1s, 0.0min\n", + "________________________________________________________________________________\n", + "[Memory] Calling baybe.utils.chemistry._smiles_to_mordred_features...\n", + "_smiles_to_mordred_features('OC(=O)CCS')\n", + "_______________________________________smiles_to_mordred_features - 0.0s, 0.0min\n", + "________________________________________________________________________________\n", + "[Memory] Calling baybe.utils.chemistry._smiles_to_mordred_features...\n", + "_smiles_to_mordred_features('OC(=O)CN(CC(=O)O)CCN(CC(=O)O)CC(=O)O')\n", + "_______________________________________smiles_to_mordred_features - 0.1s, 0.0min\n", + "________________________________________________________________________________\n", + "[Memory] Calling baybe.utils.chemistry._smiles_to_mordred_features...\n", + "_smiles_to_mordred_features('OC(=O)CS')\n", + "_______________________________________smiles_to_mordred_features - 0.1s, 0.0min\n", + "________________________________________________________________________________\n", + "[Memory] Calling baybe.utils.chemistry._smiles_to_mordred_features...\n", + "_smiles_to_mordred_features('OC(=O)Cn1nnnc1S')\n", + "_______________________________________smiles_to_mordred_features - 0.1s, 0.0min\n", + "________________________________________________________________________________\n", + "[Memory] Calling baybe.utils.chemistry._smiles_to_mordred_features...\n", + "_smiles_to_mordred_features('OC(=O)c1ccc(=S)[nH]c1')\n", + "_______________________________________smiles_to_mordred_features - 0.1s, 0.0min\n", + "________________________________________________________________________________\n", + "[Memory] Calling baybe.utils.chemistry._smiles_to_mordred_features...\n", + "_smiles_to_mordred_features('OC(=O)c1ccc(cc1)N')\n", + "_______________________________________smiles_to_mordred_features - 0.1s, 0.0min\n", + "________________________________________________________________________________\n", + "[Memory] Calling baybe.utils.chemistry._smiles_to_mordred_features...\n", + "_smiles_to_mordred_features('OC(=O)c1ccc(cc1)S')\n", + "_______________________________________smiles_to_mordred_features - 0.1s, 0.0min\n", + "________________________________________________________________________________\n", + "[Memory] Calling baybe.utils.chemistry._smiles_to_mordred_features...\n", + "_smiles_to_mordred_features('OC(=O)c1ccc(cc1)c1ccccc1')\n", + "_______________________________________smiles_to_mordred_features - 0.1s, 0.0min\n", + "________________________________________________________________________________\n", + "[Memory] Calling baybe.utils.chemistry._smiles_to_mordred_features...\n", + "_smiles_to_mordred_features('OC(=O)c1ccccc1')\n", + "_______________________________________smiles_to_mordred_features - 0.1s, 0.0min\n", + "________________________________________________________________________________\n", + "[Memory] Calling baybe.utils.chemistry._smiles_to_mordred_features...\n", + "_smiles_to_mordred_features('OC(=O)c1ccccc1O')\n", + "_______________________________________smiles_to_mordred_features - 0.1s, 0.0min\n", + "________________________________________________________________________________\n", + "[Memory] Calling baybe.utils.chemistry._smiles_to_mordred_features...\n", + "_smiles_to_mordred_features('OC(=O)c1ccccc1S')\n", + "_______________________________________smiles_to_mordred_features - 0.1s, 0.0min\n", + "________________________________________________________________________________\n", + "[Memory] Calling baybe.utils.chemistry._smiles_to_mordred_features...\n", + "_smiles_to_mordred_features('OC(=O)c1ccccn1')\n", + "_______________________________________smiles_to_mordred_features - 0.1s, 0.0min\n", + "________________________________________________________________________________\n", + "[Memory] Calling baybe.utils.chemistry._smiles_to_mordred_features...\n", + "_smiles_to_mordred_features('OC(=O)c1cccnc1')\n", + "_______________________________________smiles_to_mordred_features - 0.1s, 0.0min\n", + "________________________________________________________________________________\n", + "[Memory] Calling baybe.utils.chemistry._smiles_to_mordred_features...\n", + "_smiles_to_mordred_features('OC(=O)c1cccnc1S')\n", + "_______________________________________smiles_to_mordred_features - 0.1s, 0.0min\n", + "________________________________________________________________________________\n", + "[Memory] Calling baybe.utils.chemistry._smiles_to_mordred_features...\n", + "_smiles_to_mordred_features('OC(=O)c1ccncc1')\n", + "_______________________________________smiles_to_mordred_features - 0.1s, 0.0min\n", + "________________________________________________________________________________\n", + "[Memory] Calling baybe.utils.chemistry._smiles_to_mordred_features...\n", + "_smiles_to_mordred_features('OC(=O)c1n[nH]c(n1)N')\n", + "_______________________________________smiles_to_mordred_features - 0.1s, 0.0min\n", + "________________________________________________________________________________\n", + "[Memory] Calling baybe.utils.chemistry._smiles_to_mordred_features...\n", + "_smiles_to_mordred_features('OCC(CO)O')\n", + "_______________________________________smiles_to_mordred_features - 0.1s, 0.0min\n", + "________________________________________________________________________________\n", + "[Memory] Calling baybe.utils.chemistry._smiles_to_mordred_features...\n", + "_smiles_to_mordred_features('OC[C@H]([C@H]([C@@H]([C@@H](CO)O)O)O)O')\n", + "_______________________________________smiles_to_mordred_features - 0.1s, 0.0min\n", + "________________________________________________________________________________\n", + "[Memory] Calling baybe.utils.chemistry._smiles_to_mordred_features...\n", + "_smiles_to_mordred_features('OC[C@H]([C@H]([C@@H]([C@H](C(=O)O)O)O)O)O')\n", + "_______________________________________smiles_to_mordred_features - 0.1s, 0.0min\n", + "________________________________________________________________________________\n", + "[Memory] Calling baybe.utils.chemistry._smiles_to_mordred_features...\n", + "_smiles_to_mordred_features('OC[C@H]1OC(O)[C@H](O)[C@@H](O)[C@@H]1O')\n", + "_______________________________________smiles_to_mordred_features - 0.1s, 0.0min\n", + "________________________________________________________________________________\n", + "[Memory] Calling baybe.utils.chemistry._smiles_to_mordred_features...\n", + "_smiles_to_mordred_features('O[C@H]1C(=O)OCC1(C)C')\n", + "_______________________________________smiles_to_mordred_features - 0.1s, 0.0min\n", + "________________________________________________________________________________\n", + "[Memory] Calling baybe.utils.chemistry._smiles_to_mordred_features...\n", + "_smiles_to_mordred_features('Oc1ccc(cc1)C(=O)O')\n", + "_______________________________________smiles_to_mordred_features - 0.1s, 0.0min\n", + "________________________________________________________________________________\n", + "[Memory] Calling baybe.utils.chemistry._smiles_to_mordred_features...\n", + "_smiles_to_mordred_features('Oc1ccc(cc1)S([O])([O])O')\n", + "_______________________________________smiles_to_mordred_features - 0.1s, 0.0min\n", + "________________________________________________________________________________\n", + "[Memory] Calling baybe.utils.chemistry._smiles_to_mordred_features...\n", + "_smiles_to_mordred_features('Oc1cccc2c1nccc2')\n", + "_______________________________________smiles_to_mordred_features - 0.1s, 0.0min\n", + "________________________________________________________________________________\n", + "[Memory] Calling baybe.utils.chemistry._smiles_to_mordred_features...\n", + "_smiles_to_mordred_features('Oc1ccccc1c1nnc([nH]1)S')\n", + "_______________________________________smiles_to_mordred_features - 0.2s, 0.0min\n", + "________________________________________________________________________________\n", + "[Memory] Calling baybe.utils.chemistry._smiles_to_mordred_features...\n", + "_smiles_to_mordred_features('On1nnc2c1cccc2')\n", + "_______________________________________smiles_to_mordred_features - 0.1s, 0.0min\n", + "________________________________________________________________________________\n", + "[Memory] Calling baybe.utils.chemistry._smiles_to_mordred_features...\n", + "_smiles_to_mordred_features('S=c1[nH]c2c([nH]1)c(=O)n(cn2)C')\n", + "_______________________________________smiles_to_mordred_features - 0.1s, 0.0min\n", + "________________________________________________________________________________\n", + "[Memory] Calling baybe.utils.chemistry._smiles_to_mordred_features...\n", + "_smiles_to_mordred_features('S=c1[nH]c2c([nH]1)cncn2')\n", + "_______________________________________smiles_to_mordred_features - 0.1s, 0.0min\n", + "________________________________________________________________________________\n", + "[Memory] Calling baybe.utils.chemistry._smiles_to_mordred_features...\n", + "_smiles_to_mordred_features('S=c1[nH]c2c([nH]1)nccn2')\n", + "_______________________________________smiles_to_mordred_features - 0.1s, 0.0min\n", + "________________________________________________________________________________\n", + "[Memory] Calling baybe.utils.chemistry._smiles_to_mordred_features...\n", + "_smiles_to_mordred_features('S=c1[nH]nc([nH]1)c1cccnc1')\n", + "_______________________________________smiles_to_mordred_features - 0.2s, 0.0min\n", + "________________________________________________________________________________\n", + "[Memory] Calling baybe.utils.chemistry._smiles_to_mordred_features...\n", + "_smiles_to_mordred_features('S=c1[nH]nc([nH]1)c1ccco1')\n", + "_______________________________________smiles_to_mordred_features - 0.1s, 0.0min\n", + "________________________________________________________________________________\n", + "[Memory] Calling baybe.utils.chemistry._smiles_to_mordred_features...\n", + "_smiles_to_mordred_features('S=c1[nH]nc([nH]1)c1ccncc1')\n", + "_______________________________________smiles_to_mordred_features - 0.1s, 0.0min\n", + "________________________________________________________________________________\n", + "[Memory] Calling baybe.utils.chemistry._smiles_to_mordred_features...\n", + "_smiles_to_mordred_features('S=c1sc2c([nH]1)cccc2')\n", + "_______________________________________smiles_to_mordred_features - 0.1s, 0.0min\n", + "________________________________________________________________________________\n", + "[Memory] Calling baybe.utils.chemistry._smiles_to_mordred_features...\n", + "_smiles_to_mordred_features('SC#N')\n", + "_______________________________________smiles_to_mordred_features - 0.0s, 0.0min\n", + "________________________________________________________________________________\n", + "[Memory] Calling baybe.utils.chemistry._smiles_to_mordred_features...\n", + "_smiles_to_mordred_features('S[C]1NC2=C[CH]C=NC2=N1')\n", + "_______________________________________smiles_to_mordred_features - 0.1s, 0.0min\n", + "________________________________________________________________________________\n", + "[Memory] Calling baybe.utils.chemistry._smiles_to_mordred_features...\n", + "_smiles_to_mordred_features('Sc1n[nH]cn1')\n", + "_______________________________________smiles_to_mordred_features - 0.1s, 0.0min\n", + "________________________________________________________________________________\n", + "[Memory] Calling baybe.utils.chemistry._smiles_to_mordred_features...\n", + "_smiles_to_mordred_features('Sc1nc(N)c(c(n1)S)N')\n", + "_______________________________________smiles_to_mordred_features - 0.1s, 0.0min\n", + "________________________________________________________________________________\n", + "[Memory] Calling baybe.utils.chemistry._smiles_to_mordred_features...\n", + "_smiles_to_mordred_features('Sc1nc(N)c2c(n1)[nH]nc2')\n", + "_______________________________________smiles_to_mordred_features - 0.1s, 0.0min\n", + "________________________________________________________________________________\n", + "[Memory] Calling baybe.utils.chemistry._smiles_to_mordred_features...\n", + "_smiles_to_mordred_features('Sc1nc2c([nH]1)cccc2')\n", + "_______________________________________smiles_to_mordred_features - 0.1s, 0.0min\n", + "________________________________________________________________________________\n", + "[Memory] Calling baybe.utils.chemistry._smiles_to_mordred_features...\n", + "_smiles_to_mordred_features('Sc1ncc[nH]1')\n", + "_______________________________________smiles_to_mordred_features - 0.1s, 0.0min\n", + "________________________________________________________________________________\n", + "[Memory] Calling baybe.utils.chemistry._smiles_to_mordred_features...\n", + "_smiles_to_mordred_features('Sc1ncccn1')\n", + "_______________________________________smiles_to_mordred_features - 0.1s, 0.0min\n", + "________________________________________________________________________________\n", + "[Memory] Calling baybe.utils.chemistry._smiles_to_mordred_features...\n", + "_smiles_to_mordred_features('Sc1nnc(s1)S')\n", + "_______________________________________smiles_to_mordred_features - 0.1s, 0.0min\n", + "________________________________________________________________________________\n", + "[Memory] Calling baybe.utils.chemistry._smiles_to_mordred_features...\n", + "_smiles_to_mordred_features('[Cl-].[Cl-].[Cl-].[Ce+3]')\n", + "_______________________________________smiles_to_mordred_features - 0.1s, 0.0min\n", + "________________________________________________________________________________\n", + "[Memory] Calling baybe.utils.chemistry._smiles_to_mordred_features...\n", + "_smiles_to_mordred_features('[N+](=O)([O-])[O-].[N+](=O)([O-])[O-].[N+](=O)([O-])[O-].[Ce+3]')\n", + "_______________________________________smiles_to_mordred_features - 0.1s, 0.0min\n", + "________________________________________________________________________________\n", + "[Memory] Calling baybe.utils.chemistry._smiles_to_mordred_features...\n", + "_smiles_to_mordred_features('[NH4+].[NH4+].[N+](=O)([O-])[O-].[N+](=O)([O-])[O-].[N+](=O)([O-])[O-].[N+](=O)([O-])[O-].[N+](=O)([O-])[O-].[N+](=O)([O-])[O-].[Ce+4]')\n", + "_______________________________________smiles_to_mordred_features - 0.1s, 0.0min\n", + "________________________________________________________________________________\n", + "[Memory] Calling baybe.utils.chemistry._smiles_to_mordred_features...\n", + "_smiles_to_mordred_features('[O-]S(=O)(=O)[O-].[O-]S(=O)(=O)[O-].[O-]S(=O)(=O)[O-].[Ce+3].[Ce+3]')\n", + "_______________________________________smiles_to_mordred_features - 0.0s, 0.0min\n", + "________________________________________________________________________________\n", + "[Memory] Calling baybe.utils.chemistry._smiles_to_mordred_features...\n", + "_smiles_to_mordred_features('[O-]S(=O)[O-].[Na+].[Na+]')\n", + "_______________________________________smiles_to_mordred_features - 0.0s, 0.0min\n", + "________________________________________________________________________________\n", + "[Memory] Calling baybe.utils.chemistry._smiles_to_mordred_features...\n", + "_smiles_to_mordred_features('c1cc(ccc1c2[nH]c(nn2)S)[N+](=O)[O-]')\n", + "_______________________________________smiles_to_mordred_features - 0.1s, 0.0min\n", + "________________________________________________________________________________\n", + "[Memory] Calling baybe.utils.chemistry._smiles_to_mordred_features...\n", + "_smiles_to_mordred_features('c1ccc(nc1)c1ccccn1')\n", + "_______________________________________smiles_to_mordred_features - 0.1s, 0.0min\n", + "________________________________________________________________________________\n", + "[Memory] Calling baybe.utils.chemistry._smiles_to_mordred_features...\n", + "_smiles_to_mordred_features('c1ccc2c(c1)[nH]nn2')\n", + "_______________________________________smiles_to_mordred_features - 0.1s, 0.0min\n", + "________________________________________________________________________________\n", + "[Memory] Calling baybe.utils.chemistry._smiles_to_mordred_features...\n", + "_smiles_to_mordred_features('c1ncn[nH]1')\n", + "_______________________________________smiles_to_mordred_features - 0.0s, 0.0min\n" + ] + } + ], "source": [ "df_no_target = lookup.drop('Efficiency', axis=1)\n", "\n", @@ -392,172 +903,159 @@ }, { "cell_type": "code", - "execution_count": 120, + "execution_count": 6, "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "SearchSpace(discrete=SubspaceDiscrete(parameters=[NumericalDiscreteParameter(name='Time_h', encoding=None, _values=[0.0, 0.25, 0.5, 0.75, 1.0, 1.5, 2.0, 2.5, 3.0, 3.5, 4.0, 4.5, 5.0, 5.5, 6.0, 24.0, 48.0, 72.0, 96.0, 120.0, 144.0, 168.0, 192.0, 240.0, 288.0, 336.0, 384.0], tolerance=0.0), NumericalDiscreteParameter(name='pH', encoding=None, _values=[-0.6, -0.4771212547196624, -0.3979400086720376, -0.3010299956639812, -0.1760912590556812, 0.0, 0.3, 0.45, 1.0, 2.0, 7.0, 13.0], tolerance=0.0), NumericalDiscreteParameter(name='Inhib_Concentrat_M', encoding=None, _values=[1e-07, 5e-07, 1e-06, 2e-06, 4e-06, 5e-06, 6e-06, 8e-06, 1e-05, 1.2e-05, 2e-05, 4e-05, 5e-05, 6e-05, 8e-05, 0.0001, 0.0001958863858961802, 0.0002, 0.0003, 0.0003566333808844508, 0.0003917727717923605, 0.0004, 0.0005, 0.0005876591576885406, 0.0006, 0.0007132667617689017, 0.0007835455435847209, 0.0008, 0.0009794319294809011, 0.001, 0.0011, 0.0012, 0.0013, 0.0014, 0.0015, 0.0016, 0.001783166904422254, 0.0018, 0.0019, 0.002, 0.002139800285306705, 0.0025, 0.0026, 0.003, 0.0032, 0.003566333808844508, 0.0039, 0.004, 0.0042, 0.00427960057061341, 0.005, 0.0053, 0.005706134094151214, 0.0065, 0.0075, 0.0085, 0.01, 0.015, 0.02, 0.04, 0.06, 0.08, 0.1], tolerance=0.0), NumericalDiscreteParameter(name='Salt_Concentrat_M', encoding=None, _values=[0.0, 1.0, 2.0], tolerance=0.0), SubstanceParameter(name='SMILES', data={'C(C(=O)[O-])C(CC(=O)[O-])(C(=O)[O-])O': 'C(C(=O)[O-])C(CC(=O)[O-])(C(=O)[O-])O', 'C(C(CO)([N+](=O)[O-])Br)O': 'C(C(CO)([N+](=O)[O-])Br)O', 'C(CC=O)CC=O': 'C(CC=O)CC=O', 'C1=CC(=C(C=C1F)F)C(CN2C=NC=N2)(CN3C=NC=N3)O': 'C1=CC(=C(C=C1F)F)C(CN2C=NC=N2)(CN3C=NC=N3)O', 'C1=CC(=CN=C1)C=NNC(=S)N': 'C1=CC(=CN=C1)C=NNC(=S)N', 'C1=CC(=NC(=C1)N)N': 'C1=CC(=NC(=C1)N)N', 'C1=CC=C(C=C1)C(C2=CC=CC=C2)(C3=CC=CC=C3Cl)N4C=CN=C4': 'C1=CC=C(C=C1)C(C2=CC=CC=C2)(C3=CC=CC=C3Cl)N4C=CN=C4', 'C1=CC=NC(=C1)C=NNC(=S)N': 'C1=CC=NC(=C1)C=NNC(=S)N', 'C1=CN=C(C=N1)C(=O)N': 'C1=CN=C(C=N1)C(=O)N', 'C1=CN=C(N=C1)N': 'C1=CN=C(N=C1)N', 'C1=CN=CC=C1C=NNC(=S)N': 'C1=CN=CC=C1C=NNC(=S)N', 'C1CCC(=NO)CC1': 'C1CCC(=NO)CC1', 'C1N2CN3CN1CN(C2)C3': 'C1N2CN3CN1CN(C2)C3', 'C=CC1=C(N2C(C(C2=O)NC(=O)C(=NOCC(=O)O)C3=CSC(=N3)N)SC1)C(=O)O': 'C=CC1=C(N2C(C(C2=O)NC(=O)C(=NOCC(=O)O)C3=CSC(=N3)N)SC1)C(=O)O', 'CC(=NO)C': 'CC(=NO)C', 'CC(C)(C)NCC(COC1=CC=CC2=C1CC(C(C2)O)O)O': 'CC(C)(C)NCC(COC1=CC=CC2=C1CC(C(C2)O)O)O', 'CC(C)(C)NCC(COC1=NSN=C1N2CCOCC2)O': 'CC(C)(C)NCC(COC1=NSN=C1N2CCOCC2)O', 'CC(C)NCC(COC1=CC=C(C=C1)CC(=O)N)O': 'CC(C)NCC(COC1=CC=C(C=C1)CC(=O)N)O', 'CC(C)NCC(COC1=CC=CC2=CC=CC=C21)O': 'CC(C)NCC(COC1=CC=CC2=CC=CC=C21)O', 'CC(OC(=O)C)OC(=O)C1=C(CSC2N1C(=O)C2NC(=O)C(=NOC)C3=CC=CO3)COC(=O)N': 'CC(OC(=O)C)OC(=O)C1=C(CSC2N1C(=O)C2NC(=O)C(=NOC)C3=CC=CO3)COC(=O)N', 'CC1=CC=C(C=C1)[N]2N=NC=C2O': 'CC1=CC=C(C=C1)[N]2N=NC=C2O', 'CC1=CN=C(C=N1)C(=O)N': 'CC1=CN=C(C=N1)C(=O)N', 'CC1=NC(=CC=C1)C': 'CC1=NC(=CC=C1)C', 'CCC(=NO)C': 'CCC(=NO)C', 'CCOC(=O)C1=C(C)N=C(S)NC1C2=CC=C(C=C2)Cl': 'CCOC(=O)C1=C(C)N=C(S)NC1C2=CC=C(C=C2)Cl', 'CN(C)CC1CCCCC1(C2=CC(=CC=C2)OC)O': 'CN(C)CC1CCCCC1(C2=CC(=CC=C2)OC)O', 'COC(=O)C1=CC=C(C=C1)[N]2N=NC=C2O': 'COC(=O)C1=CC=C(C=C1)[N]2N=NC=C2O', 'COC1=NC=C(N=C1)C(=O)N': 'COC1=NC=C(N=C1)C(=O)N', 'NC(N)=S': 'NC(N)=S', 'NC1=CCNC(=S)N1': 'NC1=CCNC(=S)N1', 'OC1=C(C=CC=C1)C=NC2=CC=C(C=C2)N=NC3=C(C=CC=C3)N=CC4=C(C=CC=C4)O': 'OC1=C(C=CC=C1)C=NC2=CC=C(C=C2)N=NC3=C(C=CC=C3)N=CC4=C(C=CC=C4)O', 'OC1=CN=N[N]1C2=CC=C(C=C2)Cl': 'OC1=CN=N[N]1C2=CC=C(C=C2)Cl', 'S=c1sc2c([nH]1)cccc2': 'S=c1sc2c([nH]1)cccc2'}, decorrelate=0.7, encoding=)], exp_rep= Time_h pH Inhib_Concentrat_M Salt_Concentrat_M \\\n", - "0 0.0 2.0 5.000000e-07 2 \n", - "1 0.0 2.0 1.000000e-06 2 \n", - "2 0.0 2.0 5.000000e-06 2 \n", - "3 0.0 2.0 1.000000e-05 2 \n", - "4 0.0 2.0 5.000000e-05 2 \n", - ".. ... ... ... ... \n", - "303 384.0 -0.6 4.200000e-03 0 \n", - "304 384.0 -0.6 5.300000e-03 0 \n", - "305 384.0 -0.6 6.500000e-03 0 \n", - "306 384.0 -0.6 7.500000e-03 0 \n", - "307 384.0 -0.6 8.500000e-03 0 \n", + "SearchSpace(discrete=SubspaceDiscrete(parameters=[NumericalDiscreteParameter(name='Time_h', encoding=None, _values=[0.5, 1.0, 2.0, 3.0, 6.0, 24.0, 48.0, 72.0, 96.0, 120.0, 144.0, 168.0, 192.0, 240.0, 288.0, 336.0, 360.0, 384.0, 432.0, 480.0, 528.0, 576.0, 600.0, 624.0, 672.0], tolerance=0.0), NumericalDiscreteParameter(name='pH', encoding=None, _values=[0.0, 3.3, 4.0, 4.4, 5.4, 5.5, 5.6, 7.0, 10.0], tolerance=0.0), NumericalDiscreteParameter(name='Inhib_Concentrat_M', encoding=None, _values=[1e-05, 5e-05, 0.0001, 0.0002, 0.0003, 0.0004, 0.0005, 0.0006, 0.0008, 0.001, 0.0012, 0.0018, 0.0024, 0.003, 0.005, 0.01, 0.011, 0.021, 0.022, 0.031, 0.033, 0.042, 0.044, 0.05, 0.1], tolerance=0.0), NumericalDiscreteParameter(name='Salt_Concentrat_M', encoding=None, _values=[0.0, 0.01, 0.05, 0.1, 0.5, 0.6], tolerance=0.0), SubstanceParameter(name='SMILES', data={'C(=O)(C(=O)[O-])[O-]': 'C(=O)(C(=O)[O-])[O-]', 'C(C(=O)[O-])C(CC(=O)[O-])(C(=O)[O-])O': 'C(C(=O)[O-])C(CC(=O)[O-])(C(=O)[O-])O', 'C(C(C(C(C(C(=O)[O-])O)O)O)O)O.C(C(C(C(C(C(=O)[O-])O)O)O)O)O.[Fe+2]': 'C(C(C(C(C(C(=O)[O-])O)O)O)O)O.C(C(C(C(C(C(=O)[O-])O)O)O)O)O.[Fe+2]', 'C(C(C(C(C(C(=O)[O-])O)O)O)O)O.C(C(C(C(C(C(=O)[O-])O)O)O)O)O.[Zn+2]': 'C(C(C(C(C(C(=O)[O-])O)O)O)O)O.C(C(C(C(C(C(=O)[O-])O)O)O)O)O.[Zn+2]', 'C1=CC(=C(C=C1O)O)C=NNC(=S)N': 'C1=CC(=C(C=C1O)O)C=NNC(=S)N', 'C1=CC(=C(C=C1SSC2=CC(=C(C=C2)[N+](=O)[O-])C(=O)O)C(=O)O)[N+](=O)[O-]': 'C1=CC(=C(C=C1SSC2=CC(=C(C=C2)[N+](=O)[O-])C(=O)O)C(=O)O)[N+](=O)[O-]', 'C1=CC(=CC(=C1)S)C(=O)O': 'C1=CC(=CC(=C1)S)C(=O)O', 'C1=CC2=NNN=C2C=C1Cl': 'C1=CC2=NNN=C2C=C1Cl', 'C1=CC=C(C(=C1)C=NNC(=S)N)O': 'C1=CC=C(C(=C1)C=NNC(=S)N)O', 'C1COCCN1CCCS(=O)(=O)O': 'C1COCCN1CCCS(=O)(=O)O', 'C1N2CN3CN1CN(C2)C3': 'C1N2CN3CN1CN(C2)C3', 'C=CC(=O)OCCOC(=O)OCCSc1ncccn1': 'C=CC(=O)OCCOC(=O)OCCSc1ncccn1', 'CC(=O)O': 'CC(=O)O', 'CC(=O)SSC(=O)C': 'CC(=O)SSC(=O)C', 'CC1(C(N2C(S1)C(C2=O)NC(=O)C(C3=CC=C(C=C3)O)N)C(=O)O)C': 'CC1(C(N2C(S1)C(C2=O)NC(=O)C(C3=CC=C(C=C3)O)N)C(=O)O)C', 'CCCCCCCC/C=C\\\\CCCCCCCC(=O)O': 'CCCCCCCC/C=C\\\\CCCCCCCC(=O)O', 'CCCCCCCCCCCCCCCCCC(=O)O': 'CCCCCCCCCCCCCCCCCC(=O)O', 'CCCCCCCCCCCCCCN(CC(=O)O[Na])CC(=O)O[Na]': 'CCCCCCCCCCCCCCN(CC(=O)O[Na])CC(=O)O[Na]', 'CCCCCCCCCCCCN(CC(=O)O[Na])CC(=O)O[Na]': 'CCCCCCCCCCCCN(CC(=O)O[Na])CC(=O)O[Na]', 'CCCCCCCCCCCCOS(=O)(=O)O': 'CCCCCCCCCCCCOS(=O)(=O)O', 'CCCCCCCCCCCCc1ccccc1S([O])([O])O': 'CCCCCCCCCCCCc1ccccc1S([O])([O])O', 'CCCCCCCCN(CC(=O)O[Na])CC(=O)O[Na]': 'CCCCCCCCN(CC(=O)O[Na])CC(=O)O[Na]', 'CCCCN(CCCC)C1=NC(=NC(=N1)NC(CCSC)C(=O)O)NC(CCSC)C(=O)O': 'CCCCN(CCCC)C1=NC(=NC(=N1)NC(CCSC)C(=O)O)NC(CCSC)C(=O)O', 'CCCCOP(=O)(OCCCC)O': 'CCCCOP(=O)(OCCCC)O', 'CCN(C(=S)S)CC': 'CCN(C(=S)S)CC', 'CCOc1ccc2c(c1)nc([nH]2)S': 'CCOc1ccc2c(c1)nc([nH]2)S', 'CCSc1nnc(s1)N': 'CCSc1nnc(s1)N', 'CN1C=NC2=C1C(=O)N(C(=O)N2C)C': 'CN1C=NC2=C1C(=O)N(C(=O)N2C)C', 'CNCC(C1=CC(=CC=C1)O)O': 'CNCC(C1=CC(=CC=C1)O)O', 'COC(=O)CCCC1=CNC2=CC=CC=C21': 'COC(=O)CCCC1=CNC2=CC=CC=C21', 'COC(=O)n1nnc2ccccc12': 'COC(=O)n1nnc2ccccc12', 'COCCOC(=O)OCSc1nc2c(s1)cccc2': 'COCCOC(=O)OCSc1nc2c(s1)cccc2', 'COc1ccc2c(c1)[nH]c(=S)[nH]2': 'COc1ccc2c(c1)[nH]c(=S)[nH]2', 'COc1cccc(c1)c1n[nH]c(=S)[nH]1': 'COc1cccc(c1)c1n[nH]c(=S)[nH]1', 'CS[C]1N[N]C(=N1)N': 'CS[C]1N[N]C(=N1)N', 'CSc1[nH]c2c(n1)cc(c(c2)C)C': 'CSc1[nH]c2c(n1)cc(c(c2)C)C', 'CSc1nnc(s1)N': 'CSc1nnc(s1)N', 'Cc1cc(C)nc(n1)S': 'Cc1cc(C)nc(n1)S', 'Cc1ccc(c(c1)n1nc2c(n1)cccc2)O': 'Cc1ccc(c(c1)n1nc2c(n1)cccc2)O', 'Cc1ccc2c(c1)nc([nH]2)S': 'Cc1ccc2c(c1)nc([nH]2)S', 'Cc1n[nH]c(=S)s1': 'Cc1n[nH]c(=S)s1', 'Cc1nsc(c1)N': 'Cc1nsc(c1)N', 'ClC([C]1N[N]C=N1)(Cl)Cl': 'ClC([C]1N[N]C=N1)(Cl)Cl', 'Clc1cc2[nH]c(=S)[nH]c2cc1Cl': 'Clc1cc2[nH]c(=S)[nH]c2cc1Cl', 'Clc1ccc(cc1)CC[C@](C(C)(C)C)(Cn1cncn1)O': 'Clc1ccc(cc1)CC[C@](C(C)(C)C)(Cn1cncn1)O', 'Clc1ccc(cc1Cl)c1n[nH]c(=S)[nH]1': 'Clc1ccc(cc1Cl)c1n[nH]c(=S)[nH]1', 'Clc1ccc2c(c1)[nH]c(n2)S': 'Clc1ccc2c(c1)[nH]c(n2)S', 'Clc1cccc(c1)c1n[nH]c(=S)[nH]1': 'Clc1cccc(c1)c1n[nH]c(=S)[nH]1', 'Cn1cnnc1S': 'Cn1cnnc1S', 'Cn1nnnc1S': 'Cn1nnnc1S', 'N.N.[N+](=O)(O)[O-].[N+](=O)(O)[O-].[N+](=O)([O-])[O-].[N+](=O)([O-])[O-].[N+](=O)([O-])[O-].O.O.O.O.[Ce+3]': 'N.N.[N+](=O)(O)[O-].[N+](=O)(O)[O-].[N+](=O)([O-])[O-].[N+](=O)([O-])[O-].[N+](=O)([O-])[O-].O.O.O.O.[Ce+3]', 'NC(=S)NN=CC1=C(C(=C(C=C1)O)O)O': 'NC(=S)NN=CC1=C(C(=C(C=C1)O)O)O', 'NCC(=O)O': 'NCC(=O)O', 'NO': 'NO', 'Nc1cc(N)nc(n1)S': 'Nc1cc(N)nc(n1)S', 'Nc1cc(S)nc(n1)N': 'Nc1cc(S)nc(n1)N', 'Nc1ccc2c(c1)sc(=S)[nH]2': 'Nc1ccc2c(c1)sc(=S)[nH]2', 'Nc1ccnc(n1)S': 'Nc1ccnc(n1)S', 'Nc1n[nH]c(=S)s1': 'Nc1n[nH]c(=S)s1', 'Nc1n[nH]c(n1)S': 'Nc1n[nH]c(n1)S', 'Nc1n[nH]cn1': 'Nc1n[nH]cn1', 'Nc1nc([nH]n1)C(=O)O': 'Nc1nc([nH]n1)C(=O)O', 'Nc1ncncc1N': 'Nc1ncncc1N', 'Nn1c(NN)nnc1S': 'Nn1c(NN)nnc1S', 'Nn1c(S)nnc1c1ccccc1': 'Nn1c(S)nnc1c1ccccc1', 'Nn1cnnc1': 'Nn1cnnc1', 'O/N=C(/C(=N/O)/C)\\\\C': 'O/N=C(/C(=N/O)/C)\\\\C', 'O/N=C(\\\\C(=N/O)\\\\c1ccco1)/c1ccco1': 'O/N=C(\\\\C(=N/O)\\\\c1ccco1)/c1ccco1', 'O=C([O-])C(O)C(O)C(O)C(O)CO.[Na+]': 'O=C([O-])C(O)C(O)C(O)C(O)CO.[Na+]', 'OC(=O)/C=C/c1ccccc1': 'OC(=O)/C=C/c1ccccc1', 'OC(=O)CCCCC(=O)O': 'OC(=O)CCCCC(=O)O', 'OC(=O)CCCCCCCCCCCCCCC(=O)O': 'OC(=O)CCCCCCCCCCCCCCC(=O)O', 'OC(=O)CCS': 'OC(=O)CCS', 'OC(=O)CN(CC(=O)O)CCN(CC(=O)O)CC(=O)O': 'OC(=O)CN(CC(=O)O)CCN(CC(=O)O)CC(=O)O', 'OC(=O)CS': 'OC(=O)CS', 'OC(=O)Cn1nnnc1S': 'OC(=O)Cn1nnnc1S', 'OC(=O)c1ccc(=S)[nH]c1': 'OC(=O)c1ccc(=S)[nH]c1', 'OC(=O)c1ccc(cc1)N': 'OC(=O)c1ccc(cc1)N', 'OC(=O)c1ccc(cc1)S': 'OC(=O)c1ccc(cc1)S', 'OC(=O)c1ccc(cc1)c1ccccc1': 'OC(=O)c1ccc(cc1)c1ccccc1', 'OC(=O)c1ccccc1': 'OC(=O)c1ccccc1', 'OC(=O)c1ccccc1O': 'OC(=O)c1ccccc1O', 'OC(=O)c1ccccc1S': 'OC(=O)c1ccccc1S', 'OC(=O)c1ccccn1': 'OC(=O)c1ccccn1', 'OC(=O)c1cccnc1': 'OC(=O)c1cccnc1', 'OC(=O)c1cccnc1S': 'OC(=O)c1cccnc1S', 'OC(=O)c1ccncc1': 'OC(=O)c1ccncc1', 'OC(=O)c1n[nH]c(n1)N': 'OC(=O)c1n[nH]c(n1)N', 'OCC(CO)O': 'OCC(CO)O', 'OC[C@H]([C@H]([C@@H]([C@@H](CO)O)O)O)O': 'OC[C@H]([C@H]([C@@H]([C@@H](CO)O)O)O)O', 'OC[C@H]([C@H]([C@@H]([C@H](C(=O)O)O)O)O)O': 'OC[C@H]([C@H]([C@@H]([C@H](C(=O)O)O)O)O)O', 'OC[C@H]1OC(O)[C@H](O)[C@@H](O)[C@@H]1O': 'OC[C@H]1OC(O)[C@H](O)[C@@H](O)[C@@H]1O', 'O[C@H]1C(=O)OCC1(C)C': 'O[C@H]1C(=O)OCC1(C)C', 'Oc1ccc(cc1)C(=O)O': 'Oc1ccc(cc1)C(=O)O', 'Oc1ccc(cc1)S([O])([O])O': 'Oc1ccc(cc1)S([O])([O])O', 'Oc1cccc2c1nccc2': 'Oc1cccc2c1nccc2', 'Oc1ccccc1c1nnc([nH]1)S': 'Oc1ccccc1c1nnc([nH]1)S', 'On1nnc2c1cccc2': 'On1nnc2c1cccc2', 'S=c1[nH]c2c([nH]1)c(=O)n(cn2)C': 'S=c1[nH]c2c([nH]1)c(=O)n(cn2)C', 'S=c1[nH]c2c([nH]1)cncn2': 'S=c1[nH]c2c([nH]1)cncn2', 'S=c1[nH]c2c([nH]1)nccn2': 'S=c1[nH]c2c([nH]1)nccn2', 'S=c1[nH]nc([nH]1)c1cccnc1': 'S=c1[nH]nc([nH]1)c1cccnc1', 'S=c1[nH]nc([nH]1)c1ccco1': 'S=c1[nH]nc([nH]1)c1ccco1', 'S=c1[nH]nc([nH]1)c1ccncc1': 'S=c1[nH]nc([nH]1)c1ccncc1', 'S=c1sc2c([nH]1)cccc2': 'S=c1sc2c([nH]1)cccc2', 'SC#N': 'SC#N', 'S[C]1NC2=C[CH]C=NC2=N1': 'S[C]1NC2=C[CH]C=NC2=N1', 'Sc1n[nH]cn1': 'Sc1n[nH]cn1', 'Sc1nc(N)c(c(n1)S)N': 'Sc1nc(N)c(c(n1)S)N', 'Sc1nc(N)c2c(n1)[nH]nc2': 'Sc1nc(N)c2c(n1)[nH]nc2', 'Sc1nc2c([nH]1)cccc2': 'Sc1nc2c([nH]1)cccc2', 'Sc1ncc[nH]1': 'Sc1ncc[nH]1', 'Sc1ncccn1': 'Sc1ncccn1', 'Sc1nnc(s1)S': 'Sc1nnc(s1)S', '[Cl-].[Cl-].[Cl-].[Ce+3]': '[Cl-].[Cl-].[Cl-].[Ce+3]', '[N+](=O)([O-])[O-].[N+](=O)([O-])[O-].[N+](=O)([O-])[O-].[Ce+3]': '[N+](=O)([O-])[O-].[N+](=O)([O-])[O-].[N+](=O)([O-])[O-].[Ce+3]', '[NH4+].[NH4+].[N+](=O)([O-])[O-].[N+](=O)([O-])[O-].[N+](=O)([O-])[O-].[N+](=O)([O-])[O-].[N+](=O)([O-])[O-].[N+](=O)([O-])[O-].[Ce+4]': '[NH4+].[NH4+].[N+](=O)([O-])[O-].[N+](=O)([O-])[O-].[N+](=O)([O-])[O-].[N+](=O)([O-])[O-].[N+](=O)([O-])[O-].[N+](=O)([O-])[O-].[Ce+4]', '[O-]S(=O)(=O)[O-].[O-]S(=O)(=O)[O-].[O-]S(=O)(=O)[O-].[Ce+3].[Ce+3]': '[O-]S(=O)(=O)[O-].[O-]S(=O)(=O)[O-].[O-]S(=O)(=O)[O-].[Ce+3].[Ce+3]', '[O-]S(=O)[O-].[Na+].[Na+]': '[O-]S(=O)[O-].[Na+].[Na+]', 'c1cc(ccc1c2[nH]c(nn2)S)[N+](=O)[O-]': 'c1cc(ccc1c2[nH]c(nn2)S)[N+](=O)[O-]', 'c1ccc(nc1)c1ccccn1': 'c1ccc(nc1)c1ccccn1', 'c1ccc2c(c1)[nH]nn2': 'c1ccc2c(c1)[nH]nn2', 'c1ncn[nH]1': 'c1ncn[nH]1'}, decorrelate=0.7, encoding=)], exp_rep= Time_h pH Inhib_Concentrat_M Salt_Concentrat_M \\\n", + "0 24.0 4.0 0.0010 0.10 \n", + "1 24.0 7.0 0.0005 0.05 \n", + "2 24.0 10.0 0.0010 0.10 \n", + "3 24.0 4.0 0.0010 0.10 \n", + "4 24.0 7.0 0.0005 0.05 \n", + ".. ... ... ... ... \n", + "510 24.0 7.0 0.0005 0.05 \n", + "511 24.0 10.0 0.0010 0.10 \n", + "512 672.0 7.0 0.0010 0.10 \n", + "513 24.0 4.0 0.0010 0.10 \n", + "514 24.0 10.0 0.0010 0.10 \n", "\n", " SMILES \n", - "0 C(C(=O)[O-])C(CC(=O)[O-])(C(=O)[O-])O \n", - "1 C(C(=O)[O-])C(CC(=O)[O-])(C(=O)[O-])O \n", - "2 C(C(=O)[O-])C(CC(=O)[O-])(C(=O)[O-])O \n", + "0 C(=O)(C(=O)[O-])[O-] \n", + "1 C(=O)(C(=O)[O-])[O-] \n", + "2 C(=O)(C(=O)[O-])[O-] \n", "3 C(C(=O)[O-])C(CC(=O)[O-])(C(=O)[O-])O \n", "4 C(C(=O)[O-])C(CC(=O)[O-])(C(=O)[O-])O \n", ".. ... \n", - "303 S=c1sc2c([nH]1)cccc2 \n", - "304 S=c1sc2c([nH]1)cccc2 \n", - "305 S=c1sc2c([nH]1)cccc2 \n", - "306 S=c1sc2c([nH]1)cccc2 \n", - "307 S=c1sc2c([nH]1)cccc2 \n", + "510 c1ccc2c(c1)[nH]nn2 \n", + "511 c1ccc2c(c1)[nH]nn2 \n", + "512 c1ccc2c(c1)[nH]nn2 \n", + "513 c1ncn[nH]1 \n", + "514 c1ncn[nH]1 \n", "\n", - "[308 rows x 5 columns], metadata= was_recommended was_measured dont_recommend\n", + "[515 rows x 5 columns], metadata= was_recommended was_measured dont_recommend\n", "0 False False False\n", "1 False False False\n", "2 False False False\n", "3 False False False\n", "4 False False False\n", ".. ... ... ...\n", - "303 False False False\n", - "304 False False False\n", - "305 False False False\n", - "306 False False False\n", - "307 False False False\n", + "510 False False False\n", + "511 False False False\n", + "512 False False False\n", + "513 False False False\n", + "514 False False False\n", "\n", - "[308 rows x 3 columns], empty_encoding=False, constraints=[], comp_rep= Time_h pH Inhib_Concentrat_M Salt_Concentrat_M \\\n", - "0 0.0 2.0 5.000000e-07 2 \n", - "1 0.0 2.0 1.000000e-06 2 \n", - "2 0.0 2.0 5.000000e-06 2 \n", - "3 0.0 2.0 1.000000e-05 2 \n", - "4 0.0 2.0 5.000000e-05 2 \n", - ".. ... ... ... ... \n", - "303 384.0 -0.6 4.200000e-03 0 \n", - "304 384.0 -0.6 5.300000e-03 0 \n", - "305 384.0 -0.6 6.500000e-03 0 \n", - "306 384.0 -0.6 7.500000e-03 0 \n", - "307 384.0 -0.6 8.500000e-03 0 \n", + "[515 rows x 3 columns], empty_encoding=False, constraints=[], comp_rep= Time_h pH Inhib_Concentrat_M Salt_Concentrat_M \\\n", + "0 24.0 4.0 0.0010 0.10 \n", + "1 24.0 7.0 0.0005 0.05 \n", + "2 24.0 10.0 0.0010 0.10 \n", + "3 24.0 4.0 0.0010 0.10 \n", + "4 24.0 7.0 0.0005 0.05 \n", + ".. ... ... ... ... \n", + "510 24.0 7.0 0.0005 0.05 \n", + "511 24.0 10.0 0.0010 0.10 \n", + "512 672.0 7.0 0.0010 0.10 \n", + "513 24.0 4.0 0.0010 0.10 \n", + "514 24.0 10.0 0.0010 0.10 \n", "\n", " SMILES_RDKIT_MaxAbsEStateIndex SMILES_RDKIT_MinAbsEStateIndex \\\n", - "0 10.148889 1.357824 \n", - "1 10.148889 1.357824 \n", - "2 10.148889 1.357824 \n", + "0 8.925926 2.185185 \n", + "1 8.925926 2.185185 \n", + "2 8.925926 2.185185 \n", "3 10.148889 1.357824 \n", "4 10.148889 1.357824 \n", ".. ... ... \n", - "303 4.975926 0.848333 \n", - "304 4.975926 0.848333 \n", - "305 4.975926 0.848333 \n", - "306 4.975926 0.848333 \n", - "307 4.975926 0.848333 \n", + "510 3.813148 0.914352 \n", + "511 3.813148 0.914352 \n", + "512 3.813148 0.914352 \n", + "513 3.555556 1.444444 \n", + "514 3.555556 1.444444 \n", "\n", " SMILES_RDKIT_MinEStateIndex SMILES_RDKIT_qed SMILES_RDKIT_SPS \\\n", - "0 -2.974537 0.454904 10.846154 \n", - "1 -2.974537 0.454904 10.846154 \n", - "2 -2.974537 0.454904 10.846154 \n", + "0 -2.185185 0.287408 7.333333 \n", + "1 -2.185185 0.287408 7.333333 \n", + "2 -2.185185 0.287408 7.333333 \n", "3 -2.974537 0.454904 10.846154 \n", "4 -2.974537 0.454904 10.846154 \n", ".. ... ... ... \n", - "303 0.848333 0.596343 10.400000 \n", - "304 0.848333 0.596343 10.400000 \n", - "305 0.848333 0.596343 10.400000 \n", - "306 0.848333 0.596343 10.400000 \n", - "307 0.848333 0.596343 10.400000 \n", + "510 0.914352 0.560736 10.222222 \n", + "511 0.914352 0.560736 10.222222 \n", + "512 0.914352 0.560736 10.222222 \n", + "513 1.444444 0.458207 8.000000 \n", + "514 1.444444 0.458207 8.000000 \n", "\n", - " SMILES_RDKIT_MolWt ... SMILES_RDKIT_fr_allylic_oxid \\\n", - "0 189.099 ... 0 \n", - "1 189.099 ... 0 \n", - "2 189.099 ... 0 \n", - "3 189.099 ... 0 \n", - "4 189.099 ... 0 \n", - ".. ... ... ... \n", - "303 167.258 ... 0 \n", - "304 167.258 ... 0 \n", - "305 167.258 ... 0 \n", - "306 167.258 ... 0 \n", - "307 167.258 ... 0 \n", + " SMILES_RDKIT_MolWt ... SMILES_RDKIT_fr_nitro \\\n", + "0 88.018 ... 0 \n", + "1 88.018 ... 0 \n", + "2 88.018 ... 0 \n", + "3 189.099 ... 0 \n", + "4 189.099 ... 0 \n", + ".. ... ... ... \n", + "510 119.127 ... 0 \n", + "511 119.127 ... 0 \n", + "512 119.127 ... 0 \n", + "513 69.067 ... 0 \n", + "514 69.067 ... 0 \n", "\n", - " SMILES_RDKIT_fr_aryl_methyl SMILES_RDKIT_fr_bicyclic \\\n", - "0 0 0 \n", - "1 0 0 \n", - "2 0 0 \n", - "3 0 0 \n", - "4 0 0 \n", - ".. ... ... \n", - "303 0 1 \n", - "304 0 1 \n", - "305 0 1 \n", - "306 0 1 \n", - "307 0 1 \n", + " SMILES_RDKIT_fr_nitro_arom_nonortho SMILES_RDKIT_fr_oxime \\\n", + "0 0 0 \n", + "1 0 0 \n", + "2 0 0 \n", + "3 0 0 \n", + "4 0 0 \n", + ".. ... ... \n", + "510 0 0 \n", + "511 0 0 \n", + "512 0 0 \n", + "513 0 0 \n", + "514 0 0 \n", "\n", - " SMILES_RDKIT_fr_ether SMILES_RDKIT_fr_halogen \\\n", - "0 0 0 \n", - "1 0 0 \n", - "2 0 0 \n", - "3 0 0 \n", - "4 0 0 \n", - ".. ... ... \n", - "303 0 0 \n", - "304 0 0 \n", - "305 0 0 \n", - "306 0 0 \n", - "307 0 0 \n", + " SMILES_RDKIT_fr_para_hydroxylation SMILES_RDKIT_fr_phos_acid \\\n", + "0 0 0 \n", + "1 0 0 \n", + "2 0 0 \n", + "3 0 0 \n", + "4 0 0 \n", + ".. ... ... \n", + "510 1 0 \n", + "511 1 0 \n", + "512 1 0 \n", + "513 0 0 \n", + "514 0 0 \n", "\n", - " SMILES_RDKIT_fr_morpholine SMILES_RDKIT_fr_oxime \\\n", - "0 0 0 \n", - "1 0 0 \n", - "2 0 0 \n", - "3 0 0 \n", - "4 0 0 \n", - ".. ... ... \n", - "303 0 0 \n", - "304 0 0 \n", - "305 0 0 \n", - "306 0 0 \n", - "307 0 0 \n", + " SMILES_RDKIT_fr_pyridine SMILES_RDKIT_fr_quatN SMILES_RDKIT_fr_sulfide \\\n", + "0 0 0 0 \n", + "1 0 0 0 \n", + "2 0 0 0 \n", + "3 0 0 0 \n", + "4 0 0 0 \n", + ".. ... ... ... \n", + "510 0 0 0 \n", + "511 0 0 0 \n", + "512 0 0 0 \n", + "513 0 0 0 \n", + "514 0 0 0 \n", "\n", - " SMILES_RDKIT_fr_priamide SMILES_RDKIT_fr_pyridine \\\n", - "0 0 0 \n", - "1 0 0 \n", - "2 0 0 \n", - "3 0 0 \n", - "4 0 0 \n", - ".. ... ... \n", - "303 0 0 \n", - "304 0 0 \n", - "305 0 0 \n", - "306 0 0 \n", - "307 0 0 \n", + " SMILES_RDKIT_fr_tetrazole SMILES_RDKIT_fr_thiazole \n", + "0 0 0 \n", + "1 0 0 \n", + "2 0 0 \n", + "3 0 0 \n", + "4 0 0 \n", + ".. ... ... \n", + "510 0 0 \n", + "511 0 0 \n", + "512 0 0 \n", + "513 0 0 \n", + "514 0 0 \n", "\n", - " SMILES_RDKIT_fr_thiazole \n", - "0 0 \n", - "1 0 \n", - "2 0 \n", - "3 0 \n", - "4 0 \n", - ".. ... \n", - "303 1 \n", - "304 1 \n", - "305 1 \n", - "306 1 \n", - "307 1 \n", - "\n", - "[308 rows x 79 columns]), continuous=SubspaceContinuous(parameters=[], constraints_lin_eq=[], constraints_lin_ineq=[]))" + "[515 rows x 94 columns]), continuous=SubspaceContinuous(parameters=[], constraints_lin_eq=[], constraints_lin_ineq=[]))" ] }, - "execution_count": 120, + "execution_count": 6, "metadata": {}, "output_type": "execute_result" } @@ -568,7 +1066,7 @@ }, { "cell_type": "code", - "execution_count": 121, + "execution_count": 8, "metadata": {}, "outputs": [], "source": [ @@ -595,7 +1093,7 @@ }, { "cell_type": "code", - "execution_count": 122, + "execution_count": 9, "metadata": {}, "outputs": [], "source": [ @@ -607,134 +1105,167 @@ }, { "cell_type": "code", - "execution_count": 128, + "execution_count": 10, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ - " 0%| | 0/40 [00:00" ] @@ -773,15 +1313,77 @@ "max_yield = lookup[\"Efficiency\"].max()\n", "# plot_results = results[results['Scenario'].isin(['Mordred', 'Morgan', 'RDKIT'])]\n", "\n", + "# until 10\n", + "limit = 10\n", "sns.lineplot(\n", " data=results, x=\"Num_Experiments\", y=\"Efficiency_CumBest\", hue=\"Scenario\", marker=\"x\"\n", ")\n", - "plt.plot([0.5, N_DOE_ITERATIONS+0.5], [max_yield, max_yield], \"--r\")\n", + "plt.plot([0.5, limit+0.5], [max_yield, max_yield], \"--r\", alpha=0.4)\n", + "plt.legend(loc=\"lower right\")\n", + "import matplotlib.pyplot as plt\n", + "\n", + "plt.xlim(0, limit+1)\n", + "plt.savefig(f\"./img/{exp_dataset_name}_simulation_{N_MC_ITERATIONS}MC_{N_DOE_ITERATIONS}exp_{BATCH_SIZE}batch_first10.png\")" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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Ro2qUGbixIl89NFHvP322yxfvpx27doxZMgQsrKyKpS75557mDx5MuvXr6dr167cfffdzJ8/n//973989913zJs3j+XLl1eqw7PPPku3bt1YsWIFDz74IFu3bmXo0KEMGzaM1atX8/7777NgwQLGjRsXOGfkyJHs2rWLH3/8kQ8//JBXX32Vffv2VeseVIVkCdcyU2vsWmOT0WpCCNEoFHv9dH7o2yqfd2b7Jrx8TXfeX7qLq05L4ab//MbPmw9U6RrrHhtCmLPqj+7rrruOe++9lx07dgCwcOFCZs2axbx58wAoLCzktddeY8aMGZx//vkA/Pvf/2bOnDm8+eab3H333YFrPfbYY5x77rkAFBQU8Oabb/Lf//6Xc845B4C3336bFi1aVKrD2WefzYQJEwLbN954I9dee20gcbt9+/a89NJLnHXWWbz22mvs3LmTr7/+ml9//ZXTTjsNgDfffJOTTjqpyt9/VUlwVOu0NVpNco6EEOJP7efNB3h/6S5uOast/5q/tcqB0YlISEjgwgsvZMaMGWitufDCC2nSpEng+NatW/F6vfTv3z+wz+Fw0Lt3b9avX1/hWr169apwnsfjoU+fPoF9cXFxdOzYsVIdyp8HsGrVKlavXl2hq0xrHZiRfNOmTdjtdnr27Bk43qlTJ2JiYqp+A6pIgqPaVtoEqgy51UII0RiEOmyse2xIlc8zlMJlN/D6TW4e0IYR/VpjVrGbLNRR/VmfR48eHeiymjp1arWvEx4eXiPnFRQUcMstt3D77bdXKtuyZUs2bdpUrfepCfLErmUajUJh2KTlSAghGgOlVLW6tso4bNYsziEnEOhUx9ChQ/F4PCilGDKkYnDXtm1bnE4nCxcupFWrVgB4vV6WLl16zPmK2rZti8PhYMmSJYGRb9nZ2WzatImzzjrrmPXp0aMH69ato127dkc83qlTJ3w+H8uWLQt0q23cuJGcnJzj/I6rT4KjWmZq6wfJsNftD4EQQghRns1mC3SRHb7uWHh4OLfddht33303cXFxtGzZkqeffpqioiLGjBlz1GtGREQwZswY7r77buLj42natCn333//cS218s9//pPTTz+dcePGceONNxIeHs66deuYM2cOr7zyCh07dmTo0KHccsstvPbaa9jtdu644w5CQ0NP7EYcBwmO6oBCY5OWIyGEEPUsKirqqMcmT56M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L7/8Mtu2beOzzz7j8ccfr9Xv9UTVa5PGhAkT/nDyqTZt2gS+3rt3L4MGDaJfv368/vrrFcolJSWRmZlZYV/ZdlJS0jHLlB0/EpfLhcvl+sPv5WiUBsMuLUdCCCHqX1RU1FGPTZ48GdM0uf7668nPz6dXr158++23xMbGHvOazz33HLfeeit/+ctfiIqKYuLEiezatSuQRJ2QkMCMGTO47777eOmll+jRowfPPvssF198cY1+bzVJaV3NcYF1bM+ePQwaNIiePXvy3//+t1LU+9prr3H//feTmZkZ6LO87777+PjjjwOtT1dddRVFRUV8/vnngfP69etH165djzshOy8vj+joaHJzc4/5n8xdXMScNx/Gn7mHkwdeQrtzrqrqtyyEECIIlJSUkJaWRmpqap2PmmqICgsLad68OVOmTDlmq1NtONZndbzPb2ggOUd79uxh4MCBtGzZkmeffZb9+/eTkZFRIVdo+PDhOJ1OxowZw++//87777/Piy++WCEB+x//+AfffPMNU6ZMYcOGDTzyyCP89ttvgQS12qAUGI7qtzwJIYQQwWzFihW89957bN26leXLl3PttdcCcMkll9RzzaqvQfT3zJkzhy1btrBlyxZatGhR4VhZw1d0dDTfffcdY8eOpWfPnjRp0oSHHnooMIwfrFaimTNn8sADD3DffffRvn17Pv3001qb48iisDsk50gIIUTj9eyzz7Jx40acTic9e/bk559/rjBVQEPTYLrVgkVVu9X0gXS6nX8DLfucV4e1FEIIUVOkW63h+FN1qzVkWilsNrnNQgghREMhT+1appQhM2QLIYQQDYgER7XMCo4aRGqXEEIIIZDgqPYpJfMcCSGEEA2IBEe1zVDSciSEEEI0IBIc1TKrW832xwWFEEIIERQkOKplShnYJCFbCCGEaDAkOKpthiRkCyGEqB8jR44MLOTucDhITU1l4sSJlJSUBMqUX+w9PDyc9u3bM3LkSJYtW1bhWvPmzUMpRU5OTmDf3r176dKlCwMGDCA3N7dCmfLvfaRX69at6+guVJ0ER7VNgU1myBZCCFFPhg4dSnp6Otu2beP555/nX//6Fw8//HCFMm+99Rbp6en8/vvvTJ06lYKCAvr06cN//vOfo15369atnHHGGbRq1Ypvv/2W6OjoCsdffPFF0tPTA6/y75Oens7SpUtr/putIdKkUcuUsmGTliMhhBD1xOVykZSUBEBKSgqDBw9mzpw5PPXUU4EyMTExgTKtW7fmvPPOY8SIEYwbN46LLrqI2NjYCtdcvXo1Q4YM4eyzz+btt9/GfoRR2dHR0ZUCpvLvE8yk5ai2GYYER0II0YhorSnyFlXpVeIrQWtNia/kiNvH+zrRFb/Wrl3LokWLcDqdf1j2zjvvJD8/nzlz5lTYv2jRIs466yyGDRvGf//73yMGRg1d4/uOgoxhGChDbrMQQjQWxb5i+szsU+Xz+jbryzMDnuHjzR9zefvLuf3H21m8d3GVrrFk+BLCHGFVOueLL74gIiICn8+H2+3GMAxeeeWVPzyvU6dOAGzfvr3C/ssuu4yrrrrquK7RUEnLUS0zDBvIUH4hhPjTW7x3MR9v/phRp4zi480fVzkwqq5BgwaxcuVKlixZwogRIxg1ahTDhg37w/PKWqmUUhX2X3LJJXzyySf8/PPPtVLfYCBNGrXMMAyQbjUhhGg0Qu2hLBm+pMrnGcrAZXPh9XsZefJIrul0DaY2q/zeVRUeHk67du0AmD59Ot26dePNN99kzJgxxzxv/fr1AKSmplbY/69//YuJEydy/vnn89VXXzFgwIAq1ynYyVO7lhmGHWVIy5EQQjQWSqkqd22V5yid+y7EHlJTVTpuhmFw3333MX78eIYPH05o6NGDrRdeeIGoqCgGDx5cYb9Sitdffx3DMLjgggv48ssvOeuss2q76nVKutVqmaEAJbdZCCFEcLjyyiux2WxMnTo1sC8nJ4eMjAx27NjBnDlzuOKKK5g5cyavvfYaMTExla6hlGLatGnccMMNXHDBBcybN6/uvoE6IC1HtcywO6RbTQghRNCw2+2MGzeOp59+mttuuw2AUaNGARASEkLz5s0544wz+PXXX+nRo8dRr6OUYurUqRiGwYUXXsgXX3xRKT+poVL6RMcF/snk5eURHR1Nbm4uUVFRRy3nLi5izpsPExsaQf9RD4IhrUdCCNEQlZSUkJaWRmpqKiEhdd8VJo7fsT6r431+g3Sr1TqbzSaBkRBCCNGAyFO7lsm6akIIIUTDIsFRLbPZ/3gWUiGEEEIEDwmOapksOiuEEEI0LBIc1SIDQIIjIYQQokGR4Kg2KVA2CY6EEEKIhkSCo1qklJLgSAghhGhgJDiqVUpyjoQQQogGRoKjWmQoA2WT0WpCCCFEQyLBUS1SgM0uLUdCCCH+fJRSfPrpp/VdjWqR4Kg2GQbY5RYLIYSoHyNHjrTyX5XC4XCQmprKxIkTKSkpqe+qBTWZvrkWKcPAZsgtFkIIUX+GDh3KW2+9hdfrZdmyZYwYMQKlFE899VR9Vy1oSbNGLVKGHcOw1Xc1hBBC/Im5XC6SkpJISUnh0ksvZfDgwcyZMweAgwcPcs0119C8eXPCwsLo0qUL7733XoXzBw4cyO23387EiROJi4sjKSmJRx55pEKZzZs3M2DAAEJCQujcuXPg+uWtWbOGs88+m9DQUOLj47n55pspKCgIHB85ciSXXnopTz75JImJicTExPDYY4/h8/m4++67iYuLo0WLFrz11ls1f5MOI80atUgZCiU5R0II0ahordHFxVU7yTBQLhfa7QbTrLx9nFRoKEqpKtb4kLVr17Jo0SJatWoFWKvY9+zZk3/+859ERUXx5Zdfcv3119O2bVt69+4dOO/tt99m/PjxLFmyhMWLFzNy5Ej69+/Pueeei2maXH755SQmJrJkyRJyc3O54447KrxvYWEhQ4YMoW/fvixdupR9+/Zx4403Mm7cOGbMmBEo98MPP9CiRQt++uknFi5cyJgxY1i0aBEDBgxgyZIlvP/++9xyyy2ce+65tGjRotr34Y9IcFRLDKVQyoZdgiMhhGhUdHExG3v0rPJ54f370XzKFHI++oiYYcPYPXYshQsXVekaHZcvQ4WFVemcL774goiICHw+H263G8MweOWVVwBo3rw5d911V6Ds3//+d7799ltmz55dITjq2rUrDz/8MADt27fnlVdeYe7cuZx77rl8//33bNiwgW+//ZZmzZoB8OSTT3L++ecHzp85cyYlJSX85z//ITw8HIBXXnmFiy66iKeeeorExEQA4uLieOmllzAMg44dO/L0009TVFTEfffdB8C9997L5MmTWbBgAVdffXWV7kNVSHBUS+w2Gyc1SSY+Mra+qyKEECIIFC5cRM5HHxE/ZgwH33yzyoFRdQ0aNIjXXnuNwsJCnn/+eex2O8OGDQPA7/fz5JNPMnv2bPbs2YPH48HtdhN2WADWtWvXCtvJycns27cPgPXr15OSkhIIjAD69u1bofz69evp1q1bIDAC6N+/P6ZpsnHjxkBwdPLJJ2MYhzJ+EhMTOeWUUwLbNpuN+Pj4wHvXFgmOalFMSDiGzJAthBCNigoNpePyZVU/sawrzeslbvRoYq+9tkpdamXvXVXh4eG0a9cOgOnTp9OtWzfefPNNxowZwzPPPMOLL77ICy+8QJcuXQgPD+eOO+7A4/FUuIbjsAmNlVKYVaz78TjS+9TVe5cnwVFtUoY1nF8IIUSjoZSqctdWBaUPexUSUkM1On6GYXDfffcxfvx4hg8fzsKFC7nkkku47rrrADBNk02bNtG5c+fjvuZJJ53Erl27SE9PJzk5GYBffvmlUpkZM2ZQWFgYaD1auHBhoPss2MiTu7YYBkZ4GEboCfwACSGEEDXsyiuvxGazMXXqVNq3b8+cOXNYtGgR69ev55ZbbiEzM7NK1xs8eDAdOnRgxIgRrFq1ip9//pn777+/Qplrr72WkJAQRowYwdq1a/nxxx/5+9//zvXXXx/oUgsmEhzVEmXYcLVpixERXd9VEUIIIQLsdjvjxo3j6aefZsKECfTo0YMhQ4YwcOBAkpKSuPTSS6t0PcMw+OSTTyguLqZ3797ceOONPPHEExXKhIWF8e2335KVlcVpp53GFVdcwTnnnBNIDA82Smut67sSf2T79u08/vjj/PDDD2RkZNCsWTOuu+467r//fpxOZ6BMampqpXMXL17M6aefHtj+4IMPePDBB9m+fTvt27fnqaee4oILLjjuuuTl5REdHU1ubi5RUVEn/s0JIYQIaiUlJaSlpZGamkpIPXSFieN3rM+qKs/vBpFztGHDBkzT5F//+hft2rVj7dq13HTTTRQWFvLss89WKPv9999z8sknB7bj4+MDXy9atIhrrrmGSZMm8Ze//IWZM2dy6aWXsnz58grZ8EIIIYT482oQLUdH8swzz/Daa6+xbds24FDL0YoVKzj11FOPeM5VV11FYWEhX3zxRWDf6aefzqmnnsq0adOO632l5UgIIf5cpOWo4aiplqMGm3OUm5tLXFxcpf0XX3wxTZs25YwzzuCzzz6rcGzx4sUMHjy4wr4hQ4awePHio76P2+0mLy+vwksIIYQQjVeDDI62bNnCyy+/zC233BLYFxERwZQpU/jggw/48ssvOeOMM7j00ksrBEgZGRmVsuITExPJyMg46ntNmjSJ6OjowCslJaXmvyEhhBBCBI16DY7uuecea76IY7w2bNhQ4Zw9e/YwdOhQrrzySm666abA/iZNmjB+/Hj69OnDaaedxuTJk7nuuut45plnTqiO9957L7m5uYHXrl27Tuh6QgghhAhu9ZqQPWHCBEaOHHnMMm3atAl8vXfvXgYNGkS/fv14/fXX//D6ffr0qbAycFJSUqX5GzIzM0lKSjrqNVwuFy6X6w/fSwghROPWQFN0/1Rq6jOq1+AoISGBhISE4yq7Z88eBg0aRM+ePXnrrbcqrL1yNCtXrgzM1gnWWi9z586tsFrwnDlzKq0BI4QQQpQpW76iqKiI0Gos3yHqTtmyJzab7YSu0yCG8u/Zs4eBAwfSqlUrnn32Wfbv3x84Vtbq8/bbb+N0OunevTsAH3/8MdOnT+eNN94IlP3HP/7BWWedxZQpU7jwwguZNWsWv/3223G1QgkhhPhzstlsxMTEBBY7DQsLQylVz7UShzNNk/379xMWFobdfmLhTYMIjubMmcOWLVvYsmULLVq0qHCsfBPa448/zo4dO7Db7XTq1In333+fK664InC8X79+zJw5kwceeID77ruP9u3b8+mnn8ocR0IIIY6p7A/x2l4NXpwYwzBo2bLlCQevDXaeo/oi8xwJIcSfl9/vx+v11nc1xFE4nc6jpt00uhmyhRBCiGBgs9lOOJ9FBL8GOc+REEIIIURtkeBICCGEEKIcCY6EEEIIIcqRnKMqKstflzXWhBBCiIaj7Ll9POPQJDiqooMHDwLIGmtCCCFEA5Sfn090dPQxy0hwVEVxcXEA7Ny58w9vrqg9eXl5pKSksGvXLplSoZ7IZ1D/5DOof/IZBIfj+Ry01uTn59OsWbM/vJ4ER1VUNn9CdHS0/CAEgaioKPkc6pl8BvVPPoP6J59BcPijz+F4GzUkIVsIIYQQohwJjoQQQgghypHgqIpcLhcPP/wwLpervqvypyafQ/2Tz6D+yWdQ/+QzCA41/TnI2mpCCCGEEOVIy5EQQgghRDkSHAkhhBBClCPBkRBCCCFEORIcVdHUqVNp3bo1ISEh9OnTh19//bW+q9Ro/fTTT1x00UU0a9YMpRSffvppheNaax566CGSk5MJDQ1l8ODBbN68uX4q20hNmjSJ0047jcjISJo2bcqll17Kxo0bK5QpKSlh7NixxMfHExERwbBhw8jMzKynGjc+r732Gl27dg3M39K3b1++/vrrwHG5/3Vv8uTJKKW44447Avvkc6h9jzzyCEqpCq9OnToFjtfkZyDBURW8//77jB8/nocffpjly5fTrVs3hgwZwr59++q7ao1SYWEh3bp1Y+rUqUc8/vTTT/PSSy8xbdo0lixZQnh4OEOGDKGkpKSOa9p4zZ8/n7Fjx/LLL78wZ84cvF4v5513HoWFhYEyd955J59//jkffPAB8+fPZ+/evVx++eX1WOvGpUWLFkyePJlly5bx22+/cfbZZ3PJJZfw+++/A3L/69rSpUv517/+RdeuXSvsl8+hbpx88smkp6cHXgsWLAgcq9HPQIvj1rt3bz127NjAtt/v182aNdOTJk2qx1r9OQD6k08+CWybpqmTkpL0M888E9iXk5OjXS6Xfu+99+qhhn8O+/bt04CeP3++1tq65w6HQ3/wwQeBMuvXr9eAXrx4cX1Vs9GLjY3Vb7zxhtz/Opafn6/bt2+v58yZo8866yz9j3/8Q2stPwd15eGHH9bdunU74rGa/gyk5eg4eTweli1bxuDBgwP7DMNg8ODBLF68uB5r9ueUlpZGRkZGhc8jOjqaPn36yOdRi3Jzc4FDawwuW7YMr9db4XPo1KkTLVu2lM+hFvj9fmbNmkVhYSF9+/aV+1/Hxo4dy4UXXljhfoP8HNSlzZs306xZM9q0acO1117Lzp07gZr/DGRtteN04MAB/H4/iYmJFfYnJiayYcOGeqrVn1dGRgbAET+PsmOiZpmmyR133EH//v055ZRTAOtzcDqdxMTEVCgrn0PNWrNmDX379qWkpISIiAg++eQTOnfuzMqVK+X+15FZs2axfPlyli5dWumY/BzUjT59+jBjxgw6duxIeno6jz76KGeeeSZr166t8c9AgiMhxHEZO3Ysa9eurdDHL+pGx44dWblyJbm5uXz44YeMGDGC+fPn13e1/jR27drFP/7xD+bMmUNISEh9V+dP6/zzzw983bVrV/r06UOrVq2YPXs2oaGhNfpe0q12nJo0aYLNZquU+Z6ZmUlSUlI91erPq+yey+dRN8aNG8cXX3zBjz/+SIsWLQL7k5KS8Hg85OTkVCgvn0PNcjqdtGvXjp49ezJp0iS6devGiy++KPe/jixbtox9+/bRo0cP7HY7drud+fPn89JLL2G320lMTJTPoR7ExMTQoUMHtmzZUuM/CxIcHSen00nPnj2ZO3duYJ9pmsydO5e+ffvWY83+nFJTU0lKSqrweeTl5bFkyRL5PGqQ1ppx48bxySef8MMPP5CamlrheM+ePXE4HBU+h40bN7Jz5075HGqRaZq43W65/3XknHPOYc2aNaxcuTLw6tWrF9dee23ga/kc6l5BQQFbt24lOTm55n8Wqpk0/qc0a9Ys7XK59IwZM/S6dev0zTffrGNiYnRGRkZ9V61Rys/P1ytWrNArVqzQgH7uuef0ihUr9I4dO7TWWk+ePFnHxMTo//3vf3r16tX6kksu0ampqbq4uLiea9543HbbbTo6OlrPmzdPp6enB15FRUWBMrfeeqtu2bKl/uGHH/Rvv/2m+/btq/v27VuPtW5c7rnnHj1//nydlpamV69ere+55x6tlNLfffed1lruf30pP1pNa/kc6sKECRP0vHnzdFpaml64cKEePHiwbtKkid63b5/WumY/AwmOqujll1/WLVu21E6nU/fu3Vv/8ssv9V2lRuvHH3/UQKXXiBEjtNbWcP4HH3xQJyYmapfLpc855xy9cePG+q10I3Ok+w/ot956K1CmuLhY/+1vf9OxsbE6LCxMX3bZZTo9Pb3+Kt3IjB49Wrdq1Uo7nU6dkJCgzznnnEBgpLXc//pyeHAkn0Ptu+qqq3RycrJ2Op26efPm+qqrrtJbtmwJHK/Jz0BprfUJtmwJIYQQQjQaknMkhBBCCFGOBEdCCCGEEOVIcCSEEEIIUY4ER0IIIYQQ5UhwJIQQQghRjgRHQgghhBDlSHAkhBBCCFGOBEdCCCGEEOVIcCSEEDVMKcWnn35a39UQQlSTBEdCiCMaOXIkSikmT55cYf+nn36KUqqeamVRSh3xNWvWrHqtV5n09HTOP//8+q4GM2bMICYmpr6rIUSDI8GREOKoQkL+v717DYlqa+MA/i9HG3XU0ZQZTfCSt8HLZBml5RXzAkkGUlhZajehMKnRCvOSkrdAzVIEByY/lBGlUFBDoGlmN00tEjPUjKJMSy0UMkfX+dDrft1Hfc/UOb1dzvODDXuvtfeznjUf5GHtNaMQ+fn5GB4e/tGpzKJSqfDmzRveERkZ+UNz+vz5MwBAKpVi0aJFPzQXQsi3o+KIEDKv4OBgSKVS5ObmztmfmZmJZcuW8dqKi4tha2vLXcfGxiIyMhI5OTmQSCQQi8XIysqCRqNBcnIyzMzMYG1tDZVK9VW5icViSKVS3iEUCgEA8fHx8PDwwPj4OIAvRYunpye2b98OAOjr6+NWmnx8fCAUCuHm5oaGhgbeGE+ePEF4eDhEIhEkEgliYmLw7t07rj8gIAD79+9HUlISzM3NERoaCoD/Wm16rIsXL8LX1xf6+vpYuXIlnj17hubmZnh5eUEkEiE8PByDg4O88ZVKJWQyGYRCIVxcXFBWVsb1Tcetrq5GYGAgDAwMIJfLcffuXQBAfX094uLi8OHDB25lLTMzEwBQVlYGR0dHCIVCSCQSREVFfdVnT8jvjoojQsi8dHR0kJOTg9OnT+PVq1ffHKeurg6vX7/GrVu3UFhYiIyMDKxfvx6mpqa4f/8+EhISsHfv3r81xkwlJSUYGxvDkSNHAACpqakYGRnBmTNnePclJyfj0KFDaGtrg7e3NyIiIvD+/XsAwMjICIKCguDp6YmWlhao1Wq8ffsWmzZt4sWorKyEnp4empqaUF5ePm9OGRkZOHbsGFpbWyEQCLBlyxakpKTg1KlTaGxsRHd3N9LT07n7z507h/T0dJw4cQKdnZ3IyclBWloaKisreXFTU1OhUCjQ3t4OJycnREdHQ6PRwMfHB8XFxTA2NuZW1hQKBVpaWpCYmIisrCx0dXVBrVbDz8/vb33ehPx2GCGEzGHHjh1sw4YNjDHGVq9ezeLj4xljjNXU1LDpPx0ZGRlMLpfznisqKmI2Nja8ODY2NmxycpJrc3Z2Zr6+vty1RqNhhoaGrKqqSqvcADChUMgMDQ15x4sXL7h77ty5w3R1dVlaWhoTCASssbGR63v+/DkDwPLy8ri2iYkJZm1tzfLz8xljjGVnZ7OQkBDeuC9fvmQAWFdXF2OMMX9/f+bp6TlnfjU1NbyxlEol119VVcUAsNraWq4tNzeXOTs7c9dLly5l58+f58XNzs5m3t7e88bt6OhgAFhnZydjjDGVSsVMTEx4MS5fvsyMjY3Zx48fZ+VNCPlC8MOqMkLILyM/Px9BQUFQKBTf9LyrqysWLvzvQrVEIoGbmxt3raOjg8WLF2NgYEDrmEVFRQgODua1WVlZcefe3t5QKBTIzs7G4cOHsXbt2lkxvL29uXOBQAAvLy90dnYCAB49eoSbN29CJBLNeq6npwdOTk4AgBUrVmiVr4eHB3cukUgAAO7u7ry26fmPjY2hp6cHO3fuxO7du7l7NBoNTExM5o1raWkJABgYGICLi8uceaxbtw42Njawt7dHWFgYwsLCsHHjRhgYGGg1D0L+Dag4IoT8JT8/P4SGhuLo0aOIjY3l2hcuXAjGGO/eiYmJWc/r6uryrhcsWDBn29TUlNY5SaVSODg4zNs/NTWFpqYm6OjooLu7W+u400ZHRxEREYH8/PxZfdNFCAAYGhpqFW/mfKe/7ffntun5j46OAgAqKiqwatUqXhwdHZ2/jPu/PkcjIyO0traivr4eN27cQHp6OjIzM9Hc3EzfbCPkP2jPESFEK3l5ebh69Sq34RcALCws0N/fzyuQ2tvbf0B2s508eRJPnz5FQ0MD1Gr1nBu+7927x51rNBo8fPgQMpkMALB8+XJ0dHTA1tYWDg4OvEPbguhbSSQSWFlZobe3d9bYdnZ2WsfR09PD5OTkrHaBQIDg4GAUFBTg8ePH6OvrQ11d3T85BUJ+abRyRAjRiru7O7Zu3YqSkhKuLSAgAIODgygoKEBUVBTUajWuX78OY2Pj757PyMgI+vv7eW1GRkYwNDREW1sb0tPTcenSJaxZswaFhYU4cOAA/P39YW9vz91fWloKR0dHyGQyFBUVYXh4GPHx8QCAffv2oaKiAtHR0UhJSYGZmRm6u7tx4cIFKJXKWSs4/7Tjx48jMTERJiYmCAsLw/j4OFpaWjA8PIyDBw9qFcPW1hajo6Oora2FXC6HgYEB6urq0NvbCz8/P5iamuLatWuYmpqCs7Pzd50PIb8SWjkihGgtKyuL98pGJpOhrKwMpaWlkMvlePDgwTfvS/pacXFxsLS05B2nT5/Gp0+fsG3bNsTGxiIiIgIAsGfPHgQGBiImJoa3kpKXl4e8vDzI5XLcvn0bV65cgbm5OYAv+5eampowOTmJkJAQuLu7IykpCWKxmLd/6nvZtWsXlEolVCoV3N3d4e/vj7Nnz37VypGPjw8SEhKwefNmWFhYoKCgAGKxGNXV1QgKCoJMJkN5eTmqqqrg6ur6HWdDyK9lAfvzhgFCCPnN9fX1wc7ODm1tbbN+p4kQQmjliBBCCCFkBiqOCCE/lZycHIhEojmPn+H/lRFCfn/0Wo0Q8lMZGhrC0NDQnH36+vpYsmTJ/zkjQsi/DRVHhBBCCCEz0Gs1QgghhJAZqDgihBBCCJmBiiNCCCGEkBmoOCKEEEIImYGKI0IIIYSQGag4IoQQQgiZgYojQgghhJAZqDgihBBCCJnhD2FhMSQAsex8AAAAAElFTkSuQmCC", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# until 25\n", + "limit = 25\n", + "\n", + "sns.lineplot(\n", + " data=results, x=\"Num_Experiments\", y=\"Efficiency_CumBest\", hue=\"Scenario\", marker=\"x\"\n", + ")\n", + "plt.plot([0.5, N_DOE_ITERATIONS+0.5], [max_yield, max_yield], \"--r\", alpha=0.4)\n", "plt.legend(loc=\"lower right\")\n", "import matplotlib.pyplot as plt\n", "\n", "plt.xlim(0, N_DOE_ITERATIONS+1)\n", - "plt.savefig(\"./AA1000_simulation_10MC_50exp_1batch.png\")" + "plt.savefig(f\"./img/{exp_dataset_name}_simulation_{N_MC_ITERATIONS}MC_{N_DOE_ITERATIONS}exp_{BATCH_SIZE}batch_first25.png\")" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# all experiments\n", + "sns.lineplot(\n", + " data=results, x=\"Num_Experiments\", y=\"Efficiency_CumBest\", hue=\"Scenario\", marker=\"x\"\n", + ")\n", + "plt.plot([0.5, N_DOE_ITERATIONS+0.5], [max_yield, max_yield], \"--r\", alpha=0.4)\n", + "plt.legend(loc=\"lower right\")\n", + "import matplotlib.pyplot as plt\n", + "\n", + "plt.xlim(0, N_DOE_ITERATIONS+1)\n", + "plt.savefig(f\"./img/{exp_dataset_name}_simulation_{N_MC_ITERATIONS}MC_{N_DOE_ITERATIONS}exp_{BATCH_SIZE}batch.png\")" ] }, { @@ -974,691 +1576,15 @@ "results" ] }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Non - simulation stuff" - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "metadata": {}, - "outputs": [], - "source": [ - "# targets \n", - "from baybe.targets import NumericalTarget\n", - "from baybe.objective import Objective\n", - "\n", - "target = NumericalTarget(\n", - " name=\"Efficiency\",\n", - " mode=\"MAX\",\n", - ")\n", - "objective = Objective(mode=\"SINGLE\", targets=[target])" - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "[NumericalDiscreteParameter(name='Time_h', encoding=None, _values=[0.5, 1.0, 2.0, 3.0, 6.0, 24.0, 48.0, 72.0, 96.0, 120.0, 144.0, 168.0, 192.0, 240.0, 288.0, 336.0, 360.0, 384.0, 432.0, 480.0, 528.0, 576.0, 600.0, 624.0, 672.0], tolerance=0.0),\n", - " NumericalDiscreteParameter(name='pH', encoding=None, _values=[0.0, 3.3, 4.0, 4.4, 5.4, 5.5, 5.6, 7.0, 10.0], tolerance=0.0),\n", - " NumericalDiscreteParameter(name='Inhib_Concentrat_M', encoding=None, _values=[1e-05, 5e-05, 0.0001, 0.0002, 0.0003, 0.0004, 0.0005, 0.0006, 0.0008, 0.001, 0.0012, 0.0018, 0.0024, 0.003, 0.005, 0.01, 0.011, 0.021, 0.022, 0.031, 0.033, 0.042, 0.044, 0.05, 0.1], tolerance=0.0),\n", - " NumericalDiscreteParameter(name='Salt_Concentrat_M', encoding=None, _values=[0.0, 0.01, 0.05, 0.1, 0.5, 0.6], tolerance=0.0),\n", - " SubstanceParameter(name='SMILES', data={'COCCOC(=O)OCSc1nc2c(s1)cccc2': 'COCCOC(=O)OCSc1nc2c(s1)cccc2', 'Cc1ccc(c(c1)n1nc2c(n1)cccc2)O': 'Cc1ccc(c(c1)n1nc2c(n1)cccc2)O', 'Clc1ccc(cc1)CC[C@](C(C)(C)C)(Cn1cncn1)O': 'Clc1ccc(cc1)CC[C@](C(C)(C)C)(Cn1cncn1)O', 'On1nnc2c1cccc2': 'On1nnc2c1cccc2', 'c1ncn[nH]1': 'c1ncn[nH]1', 'Sc1n[nH]cn1': 'Sc1n[nH]cn1', 'S[C]1NC2=C[CH]C=NC2=N1': 'S[C]1NC2=C[CH]C=NC2=N1', 'S=c1[nH]c2c([nH]1)nccn2': 'S=c1[nH]c2c([nH]1)nccn2', 'Sc1ncc[nH]1': 'Sc1ncc[nH]1', 'C=CC(=O)OCCOC(=O)OCCSc1ncccn1': 'C=CC(=O)OCCOC(=O)OCCSc1ncccn1', 'CCSc1nnc(s1)N': 'CCSc1nnc(s1)N', 'CSc1nnc(s1)N': 'CSc1nnc(s1)N', 'Cc1ccc2c(c1)nc([nH]2)S': 'Cc1ccc2c(c1)nc([nH]2)S', 'OC(=O)CS': 'OC(=O)CS', 'Sc1nc2c([nH]1)cccc2': 'Sc1nc2c([nH]1)cccc2', 'OC(=O)c1ccccc1S': 'OC(=O)c1ccccc1S', 'S=c1sc2c([nH]1)cccc2': 'S=c1sc2c([nH]1)cccc2', 'OC(=O)c1cccnc1S': 'OC(=O)c1cccnc1S', 'Sc1ncccn1': 'Sc1ncccn1', 'c1ccc(nc1)c1ccccn1': 'c1ccc(nc1)c1ccccn1', 'Sc1nnc(s1)S': 'Sc1nnc(s1)S', 'Nc1cc(S)nc(n1)N': 'Nc1cc(S)nc(n1)N', 'Nc1nc([nH]n1)C(=O)O': 'Nc1nc([nH]n1)C(=O)O', 'Nc1n[nH]cn1': 'Nc1n[nH]cn1', 'OC(=O)c1n[nH]c(n1)N': 'OC(=O)c1n[nH]c(n1)N', 'Nc1n[nH]c(n1)S': 'Nc1n[nH]c(n1)S', 'CS[C]1N[N]C(=N1)N': 'CS[C]1N[N]C(=N1)N', 'C1=CC(=CC(=C1)S)C(=O)O': 'C1=CC(=CC(=C1)S)C(=O)O', 'OC(=O)CCS': 'OC(=O)CCS', 'Oc1ccccc1c1nnc([nH]1)S': 'Oc1ccccc1c1nnc([nH]1)S', 'Nn1cnnc1': 'Nn1cnnc1', 'Nc1ccnc(n1)S': 'Nc1ccnc(n1)S', 'Nn1c(NN)nnc1S': 'Nn1c(NN)nnc1S', 'Nn1c(S)nnc1c1ccccc1': 'Nn1c(S)nnc1c1ccccc1', 'Sc1nc(N)c2c(n1)[nH]nc2': 'Sc1nc(N)c2c(n1)[nH]nc2', 'Oc1ccc(cc1)C(=O)O': 'Oc1ccc(cc1)C(=O)O', 'OC(=O)c1ccc(cc1)S': 'OC(=O)c1ccc(cc1)S', 'Cn1cnnc1S': 'Cn1cnnc1S', 'Sc1nc(N)c(c(n1)S)N': 'Sc1nc(N)c(c(n1)S)N', 'Nc1ncncc1N': 'Nc1ncncc1N', 'Nc1cc(N)nc(n1)S': 'Nc1cc(N)nc(n1)S', 'Cc1cc(C)nc(n1)S': 'Cc1cc(C)nc(n1)S', 'Clc1cccc(c1)c1n[nH]c(=S)[nH]1': 'Clc1cccc(c1)c1n[nH]c(=S)[nH]1', 'COc1cccc(c1)c1n[nH]c(=S)[nH]1': 'COc1cccc(c1)c1n[nH]c(=S)[nH]1', 'Clc1ccc(cc1Cl)c1n[nH]c(=S)[nH]1': 'Clc1ccc(cc1Cl)c1n[nH]c(=S)[nH]1', 'c1cc(ccc1c2[nH]c(nn2)S)[N+](=O)[O-]': 'c1cc(ccc1c2[nH]c(nn2)S)[N+](=O)[O-]', 'S=c1[nH]nc([nH]1)c1ccco1': 'S=c1[nH]nc([nH]1)c1ccco1', 'S=c1[nH]nc([nH]1)c1cccnc1': 'S=c1[nH]nc([nH]1)c1cccnc1', 'S=c1[nH]nc([nH]1)c1ccncc1': 'S=c1[nH]nc([nH]1)c1ccncc1', 'Nc1n[nH]c(=S)s1': 'Nc1n[nH]c(=S)s1', 'Cc1nsc(c1)N': 'Cc1nsc(c1)N', 'Clc1ccc2c(c1)[nH]c(n2)S': 'Clc1ccc2c(c1)[nH]c(n2)S', 'CCOc1ccc2c(c1)nc([nH]2)S': 'CCOc1ccc2c(c1)nc([nH]2)S', 'Cn1nnnc1S': 'Cn1nnnc1S', 'OC(=O)Cn1nnnc1S': 'OC(=O)Cn1nnnc1S', 'COc1ccc2c(c1)[nH]c(=S)[nH]2': 'COc1ccc2c(c1)[nH]c(=S)[nH]2', 'Cc1n[nH]c(=S)s1': 'Cc1n[nH]c(=S)s1', 'ClC([C]1N[N]C=N1)(Cl)Cl': 'ClC([C]1N[N]C=N1)(Cl)Cl', 'Clc1cc2[nH]c(=S)[nH]c2cc1Cl': 'Clc1cc2[nH]c(=S)[nH]c2cc1Cl', 'CSc1[nH]c2c(n1)cc(c(c2)C)C': 'CSc1[nH]c2c(n1)cc(c(c2)C)C', 'Nc1ccc2c(c1)sc(=S)[nH]2': 'Nc1ccc2c(c1)sc(=S)[nH]2', 'OC(=O)c1ccc(=S)[nH]c1': 'OC(=O)c1ccc(=S)[nH]c1', 'Oc1cccc2c1nccc2': 'Oc1cccc2c1nccc2', 'S=c1[nH]c2c([nH]1)c(=O)n(cn2)C': 'S=c1[nH]c2c([nH]1)c(=O)n(cn2)C', 'S=c1[nH]c2c([nH]1)cncn2': 'S=c1[nH]c2c([nH]1)cncn2', 'CC(=O)O': 'CC(=O)O', 'OC(=O)CCCCC(=O)O': 'OC(=O)CCCCC(=O)O', 'OC(=O)c1ccccc1': 'OC(=O)c1ccccc1', 'c1ccc2c(c1)[nH]nn2': 'c1ccc2c(c1)[nH]nn2', 'OC(=O)c1ccc(cc1)c1ccccc1': 'OC(=O)c1ccc(cc1)c1ccccc1', 'OC(=O)/C=C/c1ccccc1': 'OC(=O)/C=C/c1ccccc1', 'C(C(=O)[O-])C(CC(=O)[O-])(C(=O)[O-])O': 'C(C(=O)[O-])C(CC(=O)[O-])(C(=O)[O-])O', 'O[C@H]1C(=O)OCC1(C)C': 'O[C@H]1C(=O)OCC1(C)C', 'OC[C@H]1OC(O)[C@H](O)[C@@H](O)[C@@H]1O': 'OC[C@H]1OC(O)[C@H](O)[C@@H](O)[C@@H]1O', 'OC[C@H]([C@H]([C@@H]([C@@H](CO)O)O)O)O': 'OC[C@H]([C@H]([C@@H]([C@@H](CO)O)O)O)O', 'CC(=O)SSC(=O)C': 'CC(=O)SSC(=O)C', 'CCCCOP(=O)(OCCCC)O': 'CCCCOP(=O)(OCCCC)O', 'CCN(C(=S)S)CC': 'CCN(C(=S)S)CC', 'O/N=C(/C(=N/O)/C)\\\\C': 'O/N=C(/C(=N/O)/C)\\\\C', 'CCCCCCCCCCCCc1ccccc1S([O])([O])O': 'CCCCCCCCCCCCc1ccccc1S([O])([O])O', 'CCCCCCCCCCCCOS(=O)(=O)O': 'CCCCCCCCCCCCOS(=O)(=O)O', 'OC(=O)CN(CC(=O)O)CCN(CC(=O)O)CC(=O)O': 'OC(=O)CN(CC(=O)O)CCN(CC(=O)O)CC(=O)O', 'O/N=C(\\\\C(=N/O)\\\\c1ccco1)/c1ccco1': 'O/N=C(\\\\C(=N/O)\\\\c1ccco1)/c1ccco1', 'OC[C@H]([C@H]([C@@H]([C@H](C(=O)O)O)O)O)O': 'OC[C@H]([C@H]([C@@H]([C@H](C(=O)O)O)O)O)O', 'OCC(CO)O': 'OCC(CO)O', 'NCC(=O)O': 'NCC(=O)O', 'OC(=O)CCCCCCCCCCCCCCC(=O)O': 'OC(=O)CCCCCCCCCCCCCCC(=O)O', 'C1N2CN3CN1CN(C2)C3': 'C1N2CN3CN1CN(C2)C3', 'NO': 'NO', 'COC(=O)CCCC1=CNC2=CC=CC=C21': 'COC(=O)CCCC1=CNC2=CC=CC=C21', 'OC(=O)c1ccncc1': 'OC(=O)c1ccncc1', 'C1COCCN1CCCS(=O)(=O)O': 'C1COCCN1CCCS(=O)(=O)O', 'OC(=O)c1cccnc1': 'OC(=O)c1cccnc1', 'CCCCCCCC/C=C\\\\CCCCCCCC(=O)O': 'CCCCCCCC/C=C\\\\CCCCCCCC(=O)O', 'C(=O)(C(=O)[O-])[O-]': 'C(=O)(C(=O)[O-])[O-]', 'OC(=O)c1ccc(cc1)N': 'OC(=O)c1ccc(cc1)N', 'Oc1ccc(cc1)S([O])([O])O': 'Oc1ccc(cc1)S([O])([O])O', 'OC(=O)c1ccccn1': 'OC(=O)c1ccccn1', 'OC(=O)c1ccccc1O': 'OC(=O)c1ccccc1O', 'CCCCCCCCCCCCCCCCCC(=O)O': 'CCCCCCCCCCCCCCCCCC(=O)O', 'SC#N': 'SC#N', 'C1=CC(=C(C=C1SSC2=CC(=C(C=C2)[N+](=O)[O-])C(=O)O)C(=O)O)[N+](=O)[O-]': 'C1=CC(=C(C=C1SSC2=CC(=C(C=C2)[N+](=O)[O-])C(=O)O)C(=O)O)[N+](=O)[O-]', '[O-]S(=O)[O-].[Na+].[Na+]': '[O-]S(=O)[O-].[Na+].[Na+]', 'CCCCCCCCN(CC(=O)O[Na])CC(=O)O[Na]': 'CCCCCCCCN(CC(=O)O[Na])CC(=O)O[Na]', 'CCCCCCCCCCCCN(CC(=O)O[Na])CC(=O)O[Na]': 'CCCCCCCCCCCCN(CC(=O)O[Na])CC(=O)O[Na]', 'CCCCCCCCCCCCCCN(CC(=O)O[Na])CC(=O)O[Na]': 'CCCCCCCCCCCCCCN(CC(=O)O[Na])CC(=O)O[Na]', 'CC1(C(N2C(S1)C(C2=O)NC(=O)C(C3=CC=C(C=C3)O)N)C(=O)O)C': 'CC1(C(N2C(S1)C(C2=O)NC(=O)C(C3=CC=C(C=C3)O)N)C(=O)O)C', 'CN1C=NC2=C1C(=O)N(C(=O)N2C)C': 'CN1C=NC2=C1C(=O)N(C(=O)N2C)C', 'N.N.[N+](=O)(O)[O-].[N+](=O)(O)[O-].[N+](=O)([O-])[O-].[N+](=O)([O-])[O-].[N+](=O)([O-])[O-].O.O.O.O.[Ce+3]': 'N.N.[N+](=O)(O)[O-].[N+](=O)(O)[O-].[N+](=O)([O-])[O-].[N+](=O)([O-])[O-].[N+](=O)([O-])[O-].O.O.O.O.[Ce+3]', '[NH4+].[NH4+].[N+](=O)([O-])[O-].[N+](=O)([O-])[O-].[N+](=O)([O-])[O-].[N+](=O)([O-])[O-].[N+](=O)([O-])[O-].[N+](=O)([O-])[O-].[Ce+4]': '[NH4+].[NH4+].[N+](=O)([O-])[O-].[N+](=O)([O-])[O-].[N+](=O)([O-])[O-].[N+](=O)([O-])[O-].[N+](=O)([O-])[O-].[N+](=O)([O-])[O-].[Ce+4]', '[N+](=O)([O-])[O-].[N+](=O)([O-])[O-].[N+](=O)([O-])[O-].[Ce+3]': '[N+](=O)([O-])[O-].[N+](=O)([O-])[O-].[N+](=O)([O-])[O-].[Ce+3]', '[O-]S(=O)(=O)[O-].[O-]S(=O)(=O)[O-].[O-]S(=O)(=O)[O-].[Ce+3].[Ce+3]': '[O-]S(=O)(=O)[O-].[O-]S(=O)(=O)[O-].[O-]S(=O)(=O)[O-].[Ce+3].[Ce+3]', '[Cl-].[Cl-].[Cl-].[Ce+3]': '[Cl-].[Cl-].[Cl-].[Ce+3]', 'CNCC(C1=CC(=CC=C1)O)O': 'CNCC(C1=CC(=CC=C1)O)O', 'C(C(C(C(C(C(=O)[O-])O)O)O)O)O.C(C(C(C(C(C(=O)[O-])O)O)O)O)O.[Fe+2]': 'C(C(C(C(C(C(=O)[O-])O)O)O)O)O.C(C(C(C(C(C(=O)[O-])O)O)O)O)O.[Fe+2]', 'C(C(C(C(C(C(=O)[O-])O)O)O)O)O.C(C(C(C(C(C(=O)[O-])O)O)O)O)O.[Zn+2]': 'C(C(C(C(C(C(=O)[O-])O)O)O)O)O.C(C(C(C(C(C(=O)[O-])O)O)O)O)O.[Zn+2]', 'C1=CC=C(C(=C1)C=NNC(=S)N)O': 'C1=CC=C(C(=C1)C=NNC(=S)N)O', 'C1=CC(=C(C=C1O)O)C=NNC(=S)N': 'C1=CC(=C(C=C1O)O)C=NNC(=S)N', 'NC(=S)NN=CC1=C(C(=C(C=C1)O)O)O': 'NC(=S)NN=CC1=C(C(=C(C=C1)O)O)O', 'CCCCN(CCCC)C1=NC(=NC(=N1)NC(CCSC)C(=O)O)NC(CCSC)C(=O)O': 'CCCCN(CCCC)C1=NC(=NC(=N1)NC(CCSC)C(=O)O)NC(CCSC)C(=O)O', 'C1=CC2=NNN=C2C=C1Cl': 'C1=CC2=NNN=C2C=C1Cl', 'O=C([O-])C(O)C(O)C(O)C(O)CO.[Na+]': 'O=C([O-])C(O)C(O)C(O)C(O)CO.[Na+]', 'COC(=O)n1nnc2ccccc12': 'COC(=O)n1nnc2ccccc12'}, decorrelate=0.7, encoding=)]" - ] - }, - "execution_count": 7, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "# parameters\n", - "parameters = [\n", - "NumericalDiscreteParameter(\n", - " name=\"Time_h\",\n", - " values=df_active['Time_h'].unique(),\n", - " # tolerance = 0.004, assume certain experimental noise for each parameter measurement?\n", - "),\n", - "NumericalDiscreteParameter(\n", - " name=\"pH\",\n", - " values=df_active['pH'].unique(),\n", - " # tolerance = 0.004\n", - " ), \n", - "NumericalDiscreteParameter( # Set this as continuous, the values seem quite small?\n", - " name=\"Inhib_Concentrat_M\",\n", - " values= df_active['Inhib_Concentrat_M'].unique(),\n", - " # tolerance = 0.004\n", - " ),\n", - "NumericalDiscreteParameter(\n", - " name=\"Salt_Concentrat_M\",\n", - " values=df_active['Salt_Concentrat_M'].unique(),\n", - " # tolerance = 0.004\n", - " ),\n", - "SubstanceParameter(\n", - " name=\"SMILES\",\n", - " data=smiles_dict,\n", - " encoding=\"MORDRED\", # optional\n", - " decorrelate=0.7, # optional\n", - " ) \n", - " ]\n", - "parameters" - ] - }, - { - "cell_type": "code", - "execution_count": 9, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "SearchSpace(discrete=SubspaceDiscrete(parameters=[NumericalDiscreteParameter(name='Time_h', encoding=None, _values=[0.5, 1.0, 2.0, 3.0, 6.0, 24.0, 48.0, 72.0, 96.0, 120.0, 144.0, 168.0, 192.0, 240.0, 288.0, 336.0, 360.0, 384.0, 432.0, 480.0, 528.0, 576.0, 600.0, 624.0, 672.0], tolerance=0.0), NumericalDiscreteParameter(name='pH', encoding=None, _values=[0.0, 3.3, 4.0, 4.4, 5.4, 5.5, 5.6, 7.0, 10.0], tolerance=0.0), NumericalDiscreteParameter(name='Inhib_Concentrat_M', encoding=None, _values=[1e-05, 5e-05, 0.0001, 0.0002, 0.0003, 0.0004, 0.0005, 0.0006, 0.0008, 0.001, 0.0012, 0.0018, 0.0024, 0.003, 0.005, 0.01, 0.011, 0.021, 0.022, 0.031, 0.033, 0.042, 0.044, 0.05, 0.1], tolerance=0.0), NumericalDiscreteParameter(name='Salt_Concentrat_M', encoding=None, _values=[0.0, 0.01, 0.05, 0.1, 0.5, 0.6], tolerance=0.0), SubstanceParameter(name='SMILES', data={'COCCOC(=O)OCSc1nc2c(s1)cccc2': 'COCCOC(=O)OCSc1nc2c(s1)cccc2', 'Cc1ccc(c(c1)n1nc2c(n1)cccc2)O': 'Cc1ccc(c(c1)n1nc2c(n1)cccc2)O', 'Clc1ccc(cc1)CC[C@](C(C)(C)C)(Cn1cncn1)O': 'Clc1ccc(cc1)CC[C@](C(C)(C)C)(Cn1cncn1)O', 'On1nnc2c1cccc2': 'On1nnc2c1cccc2', 'c1ncn[nH]1': 'c1ncn[nH]1', 'Sc1n[nH]cn1': 'Sc1n[nH]cn1', 'S[C]1NC2=C[CH]C=NC2=N1': 'S[C]1NC2=C[CH]C=NC2=N1', 'S=c1[nH]c2c([nH]1)nccn2': 'S=c1[nH]c2c([nH]1)nccn2', 'Sc1ncc[nH]1': 'Sc1ncc[nH]1', 'C=CC(=O)OCCOC(=O)OCCSc1ncccn1': 'C=CC(=O)OCCOC(=O)OCCSc1ncccn1', 'CCSc1nnc(s1)N': 'CCSc1nnc(s1)N', 'CSc1nnc(s1)N': 'CSc1nnc(s1)N', 'Cc1ccc2c(c1)nc([nH]2)S': 'Cc1ccc2c(c1)nc([nH]2)S', 'OC(=O)CS': 'OC(=O)CS', 'Sc1nc2c([nH]1)cccc2': 'Sc1nc2c([nH]1)cccc2', 'OC(=O)c1ccccc1S': 'OC(=O)c1ccccc1S', 'S=c1sc2c([nH]1)cccc2': 'S=c1sc2c([nH]1)cccc2', 'OC(=O)c1cccnc1S': 'OC(=O)c1cccnc1S', 'Sc1ncccn1': 'Sc1ncccn1', 'c1ccc(nc1)c1ccccn1': 'c1ccc(nc1)c1ccccn1', 'Sc1nnc(s1)S': 'Sc1nnc(s1)S', 'Nc1cc(S)nc(n1)N': 'Nc1cc(S)nc(n1)N', 'Nc1nc([nH]n1)C(=O)O': 'Nc1nc([nH]n1)C(=O)O', 'Nc1n[nH]cn1': 'Nc1n[nH]cn1', 'OC(=O)c1n[nH]c(n1)N': 'OC(=O)c1n[nH]c(n1)N', 'Nc1n[nH]c(n1)S': 'Nc1n[nH]c(n1)S', 'CS[C]1N[N]C(=N1)N': 'CS[C]1N[N]C(=N1)N', 'C1=CC(=CC(=C1)S)C(=O)O': 'C1=CC(=CC(=C1)S)C(=O)O', 'OC(=O)CCS': 'OC(=O)CCS', 'Oc1ccccc1c1nnc([nH]1)S': 'Oc1ccccc1c1nnc([nH]1)S', 'Nn1cnnc1': 'Nn1cnnc1', 'Nc1ccnc(n1)S': 'Nc1ccnc(n1)S', 'Nn1c(NN)nnc1S': 'Nn1c(NN)nnc1S', 'Nn1c(S)nnc1c1ccccc1': 'Nn1c(S)nnc1c1ccccc1', 'Sc1nc(N)c2c(n1)[nH]nc2': 'Sc1nc(N)c2c(n1)[nH]nc2', 'Oc1ccc(cc1)C(=O)O': 'Oc1ccc(cc1)C(=O)O', 'OC(=O)c1ccc(cc1)S': 'OC(=O)c1ccc(cc1)S', 'Cn1cnnc1S': 'Cn1cnnc1S', 'Sc1nc(N)c(c(n1)S)N': 'Sc1nc(N)c(c(n1)S)N', 'Nc1ncncc1N': 'Nc1ncncc1N', 'Nc1cc(N)nc(n1)S': 'Nc1cc(N)nc(n1)S', 'Cc1cc(C)nc(n1)S': 'Cc1cc(C)nc(n1)S', 'Clc1cccc(c1)c1n[nH]c(=S)[nH]1': 'Clc1cccc(c1)c1n[nH]c(=S)[nH]1', 'COc1cccc(c1)c1n[nH]c(=S)[nH]1': 'COc1cccc(c1)c1n[nH]c(=S)[nH]1', 'Clc1ccc(cc1Cl)c1n[nH]c(=S)[nH]1': 'Clc1ccc(cc1Cl)c1n[nH]c(=S)[nH]1', 'c1cc(ccc1c2[nH]c(nn2)S)[N+](=O)[O-]': 'c1cc(ccc1c2[nH]c(nn2)S)[N+](=O)[O-]', 'S=c1[nH]nc([nH]1)c1ccco1': 'S=c1[nH]nc([nH]1)c1ccco1', 'S=c1[nH]nc([nH]1)c1cccnc1': 'S=c1[nH]nc([nH]1)c1cccnc1', 'S=c1[nH]nc([nH]1)c1ccncc1': 'S=c1[nH]nc([nH]1)c1ccncc1', 'Nc1n[nH]c(=S)s1': 'Nc1n[nH]c(=S)s1', 'Cc1nsc(c1)N': 'Cc1nsc(c1)N', 'Clc1ccc2c(c1)[nH]c(n2)S': 'Clc1ccc2c(c1)[nH]c(n2)S', 'CCOc1ccc2c(c1)nc([nH]2)S': 'CCOc1ccc2c(c1)nc([nH]2)S', 'Cn1nnnc1S': 'Cn1nnnc1S', 'OC(=O)Cn1nnnc1S': 'OC(=O)Cn1nnnc1S', 'COc1ccc2c(c1)[nH]c(=S)[nH]2': 'COc1ccc2c(c1)[nH]c(=S)[nH]2', 'Cc1n[nH]c(=S)s1': 'Cc1n[nH]c(=S)s1', 'ClC([C]1N[N]C=N1)(Cl)Cl': 'ClC([C]1N[N]C=N1)(Cl)Cl', 'Clc1cc2[nH]c(=S)[nH]c2cc1Cl': 'Clc1cc2[nH]c(=S)[nH]c2cc1Cl', 'CSc1[nH]c2c(n1)cc(c(c2)C)C': 'CSc1[nH]c2c(n1)cc(c(c2)C)C', 'Nc1ccc2c(c1)sc(=S)[nH]2': 'Nc1ccc2c(c1)sc(=S)[nH]2', 'OC(=O)c1ccc(=S)[nH]c1': 'OC(=O)c1ccc(=S)[nH]c1', 'Oc1cccc2c1nccc2': 'Oc1cccc2c1nccc2', 'S=c1[nH]c2c([nH]1)c(=O)n(cn2)C': 'S=c1[nH]c2c([nH]1)c(=O)n(cn2)C', 'S=c1[nH]c2c([nH]1)cncn2': 'S=c1[nH]c2c([nH]1)cncn2', 'CC(=O)O': 'CC(=O)O', 'OC(=O)CCCCC(=O)O': 'OC(=O)CCCCC(=O)O', 'OC(=O)c1ccccc1': 'OC(=O)c1ccccc1', 'c1ccc2c(c1)[nH]nn2': 'c1ccc2c(c1)[nH]nn2', 'OC(=O)c1ccc(cc1)c1ccccc1': 'OC(=O)c1ccc(cc1)c1ccccc1', 'OC(=O)/C=C/c1ccccc1': 'OC(=O)/C=C/c1ccccc1', 'C(C(=O)[O-])C(CC(=O)[O-])(C(=O)[O-])O': 'C(C(=O)[O-])C(CC(=O)[O-])(C(=O)[O-])O', 'O[C@H]1C(=O)OCC1(C)C': 'O[C@H]1C(=O)OCC1(C)C', 'OC[C@H]1OC(O)[C@H](O)[C@@H](O)[C@@H]1O': 'OC[C@H]1OC(O)[C@H](O)[C@@H](O)[C@@H]1O', 'OC[C@H]([C@H]([C@@H]([C@@H](CO)O)O)O)O': 'OC[C@H]([C@H]([C@@H]([C@@H](CO)O)O)O)O', 'CC(=O)SSC(=O)C': 'CC(=O)SSC(=O)C', 'CCCCOP(=O)(OCCCC)O': 'CCCCOP(=O)(OCCCC)O', 'CCN(C(=S)S)CC': 'CCN(C(=S)S)CC', 'O/N=C(/C(=N/O)/C)\\\\C': 'O/N=C(/C(=N/O)/C)\\\\C', 'CCCCCCCCCCCCc1ccccc1S([O])([O])O': 'CCCCCCCCCCCCc1ccccc1S([O])([O])O', 'CCCCCCCCCCCCOS(=O)(=O)O': 'CCCCCCCCCCCCOS(=O)(=O)O', 'OC(=O)CN(CC(=O)O)CCN(CC(=O)O)CC(=O)O': 'OC(=O)CN(CC(=O)O)CCN(CC(=O)O)CC(=O)O', 'O/N=C(\\\\C(=N/O)\\\\c1ccco1)/c1ccco1': 'O/N=C(\\\\C(=N/O)\\\\c1ccco1)/c1ccco1', 'OC[C@H]([C@H]([C@@H]([C@H](C(=O)O)O)O)O)O': 'OC[C@H]([C@H]([C@@H]([C@H](C(=O)O)O)O)O)O', 'OCC(CO)O': 'OCC(CO)O', 'NCC(=O)O': 'NCC(=O)O', 'OC(=O)CCCCCCCCCCCCCCC(=O)O': 'OC(=O)CCCCCCCCCCCCCCC(=O)O', 'C1N2CN3CN1CN(C2)C3': 'C1N2CN3CN1CN(C2)C3', 'NO': 'NO', 'COC(=O)CCCC1=CNC2=CC=CC=C21': 'COC(=O)CCCC1=CNC2=CC=CC=C21', 'OC(=O)c1ccncc1': 'OC(=O)c1ccncc1', 'C1COCCN1CCCS(=O)(=O)O': 'C1COCCN1CCCS(=O)(=O)O', 'OC(=O)c1cccnc1': 'OC(=O)c1cccnc1', 'CCCCCCCC/C=C\\\\CCCCCCCC(=O)O': 'CCCCCCCC/C=C\\\\CCCCCCCC(=O)O', 'C(=O)(C(=O)[O-])[O-]': 'C(=O)(C(=O)[O-])[O-]', 'OC(=O)c1ccc(cc1)N': 'OC(=O)c1ccc(cc1)N', 'Oc1ccc(cc1)S([O])([O])O': 'Oc1ccc(cc1)S([O])([O])O', 'OC(=O)c1ccccn1': 'OC(=O)c1ccccn1', 'OC(=O)c1ccccc1O': 'OC(=O)c1ccccc1O', 'CCCCCCCCCCCCCCCCCC(=O)O': 'CCCCCCCCCCCCCCCCCC(=O)O', 'SC#N': 'SC#N', 'C1=CC(=C(C=C1SSC2=CC(=C(C=C2)[N+](=O)[O-])C(=O)O)C(=O)O)[N+](=O)[O-]': 'C1=CC(=C(C=C1SSC2=CC(=C(C=C2)[N+](=O)[O-])C(=O)O)C(=O)O)[N+](=O)[O-]', '[O-]S(=O)[O-].[Na+].[Na+]': '[O-]S(=O)[O-].[Na+].[Na+]', 'CCCCCCCCN(CC(=O)O[Na])CC(=O)O[Na]': 'CCCCCCCCN(CC(=O)O[Na])CC(=O)O[Na]', 'CCCCCCCCCCCCN(CC(=O)O[Na])CC(=O)O[Na]': 'CCCCCCCCCCCCN(CC(=O)O[Na])CC(=O)O[Na]', 'CCCCCCCCCCCCCCN(CC(=O)O[Na])CC(=O)O[Na]': 'CCCCCCCCCCCCCCN(CC(=O)O[Na])CC(=O)O[Na]', 'CC1(C(N2C(S1)C(C2=O)NC(=O)C(C3=CC=C(C=C3)O)N)C(=O)O)C': 'CC1(C(N2C(S1)C(C2=O)NC(=O)C(C3=CC=C(C=C3)O)N)C(=O)O)C', 'CN1C=NC2=C1C(=O)N(C(=O)N2C)C': 'CN1C=NC2=C1C(=O)N(C(=O)N2C)C', 'N.N.[N+](=O)(O)[O-].[N+](=O)(O)[O-].[N+](=O)([O-])[O-].[N+](=O)([O-])[O-].[N+](=O)([O-])[O-].O.O.O.O.[Ce+3]': 'N.N.[N+](=O)(O)[O-].[N+](=O)(O)[O-].[N+](=O)([O-])[O-].[N+](=O)([O-])[O-].[N+](=O)([O-])[O-].O.O.O.O.[Ce+3]', '[NH4+].[NH4+].[N+](=O)([O-])[O-].[N+](=O)([O-])[O-].[N+](=O)([O-])[O-].[N+](=O)([O-])[O-].[N+](=O)([O-])[O-].[N+](=O)([O-])[O-].[Ce+4]': '[NH4+].[NH4+].[N+](=O)([O-])[O-].[N+](=O)([O-])[O-].[N+](=O)([O-])[O-].[N+](=O)([O-])[O-].[N+](=O)([O-])[O-].[N+](=O)([O-])[O-].[Ce+4]', '[N+](=O)([O-])[O-].[N+](=O)([O-])[O-].[N+](=O)([O-])[O-].[Ce+3]': '[N+](=O)([O-])[O-].[N+](=O)([O-])[O-].[N+](=O)([O-])[O-].[Ce+3]', '[O-]S(=O)(=O)[O-].[O-]S(=O)(=O)[O-].[O-]S(=O)(=O)[O-].[Ce+3].[Ce+3]': '[O-]S(=O)(=O)[O-].[O-]S(=O)(=O)[O-].[O-]S(=O)(=O)[O-].[Ce+3].[Ce+3]', '[Cl-].[Cl-].[Cl-].[Ce+3]': '[Cl-].[Cl-].[Cl-].[Ce+3]', 'CNCC(C1=CC(=CC=C1)O)O': 'CNCC(C1=CC(=CC=C1)O)O', 'C(C(C(C(C(C(=O)[O-])O)O)O)O)O.C(C(C(C(C(C(=O)[O-])O)O)O)O)O.[Fe+2]': 'C(C(C(C(C(C(=O)[O-])O)O)O)O)O.C(C(C(C(C(C(=O)[O-])O)O)O)O)O.[Fe+2]', 'C(C(C(C(C(C(=O)[O-])O)O)O)O)O.C(C(C(C(C(C(=O)[O-])O)O)O)O)O.[Zn+2]': 'C(C(C(C(C(C(=O)[O-])O)O)O)O)O.C(C(C(C(C(C(=O)[O-])O)O)O)O)O.[Zn+2]', 'C1=CC=C(C(=C1)C=NNC(=S)N)O': 'C1=CC=C(C(=C1)C=NNC(=S)N)O', 'C1=CC(=C(C=C1O)O)C=NNC(=S)N': 'C1=CC(=C(C=C1O)O)C=NNC(=S)N', 'NC(=S)NN=CC1=C(C(=C(C=C1)O)O)O': 'NC(=S)NN=CC1=C(C(=C(C=C1)O)O)O', 'CCCCN(CCCC)C1=NC(=NC(=N1)NC(CCSC)C(=O)O)NC(CCSC)C(=O)O': 'CCCCN(CCCC)C1=NC(=NC(=N1)NC(CCSC)C(=O)O)NC(CCSC)C(=O)O', 'C1=CC2=NNN=C2C=C1Cl': 'C1=CC2=NNN=C2C=C1Cl', 'O=C([O-])C(O)C(O)C(O)C(O)CO.[Na+]': 'O=C([O-])C(O)C(O)C(O)C(O)CO.[Na+]', 'COC(=O)n1nnc2ccccc12': 'COC(=O)n1nnc2ccccc12'}, decorrelate=0.7, encoding=)], exp_rep= Time_h pH Inhib_Concentrat_M Salt_Concentrat_M \\\n", - "0 24.0 4.0 0.0010 0.10 \n", - "1 24.0 10.0 0.0010 0.10 \n", - "2 24.0 4.0 0.0010 0.10 \n", - "3 24.0 10.0 0.0010 0.10 \n", - "4 24.0 4.0 0.0010 0.10 \n", - ".. ... ... ... ... \n", - "606 24.0 7.0 0.0005 0.05 \n", - "607 24.0 7.0 0.0005 0.05 \n", - "608 24.0 7.0 0.0005 0.05 \n", - "609 24.0 7.0 0.0005 0.05 \n", - "610 24.0 7.0 0.0005 0.05 \n", - "\n", - " SMILES \n", - "0 COCCOC(=O)OCSc1nc2c(s1)cccc2 \n", - "1 COCCOC(=O)OCSc1nc2c(s1)cccc2 \n", - "2 Cc1ccc(c(c1)n1nc2c(n1)cccc2)O \n", - "3 Cc1ccc(c(c1)n1nc2c(n1)cccc2)O \n", - "4 Clc1ccc(cc1)CC[C@](C(C)(C)C)(Cn1cncn1)O \n", - ".. ... \n", - "606 S=c1sc2c([nH]1)cccc2 \n", - "607 C(C(=O)[O-])C(CC(=O)[O-])(C(=O)[O-])O \n", - "608 C(C(=O)[O-])C(CC(=O)[O-])(C(=O)[O-])O \n", - "609 C(=O)(C(=O)[O-])[O-] \n", - "610 C(=O)(C(=O)[O-])[O-] \n", - "\n", - "[611 rows x 5 columns], metadata= was_recommended was_measured dont_recommend\n", - "0 False False False\n", - "1 False False False\n", - "2 False False False\n", - "3 False False False\n", - "4 False False False\n", - ".. ... ... ...\n", - "606 False False False\n", - "607 False False False\n", - "608 False False False\n", - "609 False False False\n", - "610 False False False\n", - "\n", - "[611 rows x 3 columns], empty_encoding=False, constraints=[], comp_rep= Time_h pH Inhib_Concentrat_M Salt_Concentrat_M SMILES_MORDRED_ABC \\\n", - "0 24.0 4.0 0.0010 0.10 14.211085 \n", - "1 24.0 10.0 0.0010 0.10 14.211085 \n", - "2 24.0 4.0 0.0010 0.10 13.532488 \n", - "3 24.0 10.0 0.0010 0.10 13.532488 \n", - "4 24.0 4.0 0.0010 0.10 16.206679 \n", - ".. ... ... ... ... ... \n", - "606 24.0 7.0 0.0005 0.05 7.847124 \n", - "607 24.0 7.0 0.0005 0.05 9.238929 \n", - "608 24.0 7.0 0.0005 0.05 9.238929 \n", - "609 24.0 7.0 0.0005 0.05 3.932653 \n", - "610 24.0 7.0 0.0005 0.05 3.932653 \n", - "\n", - " SMILES_MORDRED_nAcid SMILES_MORDRED_nBase SMILES_MORDRED_nAromAtom \\\n", - "0 0.0 0.0 9.0 \n", - "1 0.0 0.0 9.0 \n", - "2 0.0 0.0 15.0 \n", - "3 0.0 0.0 15.0 \n", - "4 0.0 0.0 11.0 \n", - ".. ... ... ... \n", - "606 0.0 0.0 9.0 \n", - "607 3.0 0.0 0.0 \n", - "608 3.0 0.0 0.0 \n", - "609 2.0 0.0 0.0 \n", - "610 2.0 0.0 0.0 \n", - "\n", - " SMILES_MORDRED_nBridgehead SMILES_MORDRED_nHetero ... \\\n", - "0 0.0 7.0 ... \n", - "1 0.0 7.0 ... \n", - "2 0.0 4.0 ... \n", - "3 0.0 4.0 ... \n", - "4 0.0 5.0 ... \n", - ".. ... ... ... \n", - "606 0.0 3.0 ... \n", - "607 0.0 7.0 ... \n", - "608 0.0 7.0 ... \n", - "609 0.0 4.0 ... \n", - "610 0.0 4.0 ... \n", - "\n", - " SMILES_MORDRED_JGI2 SMILES_MORDRED_JGI3 SMILES_MORDRED_JGI4 \\\n", - "0 0.053333 0.047348 0.025679 \n", - "1 0.053333 0.047348 0.025679 \n", - "2 0.074074 0.049167 0.050028 \n", - "3 0.074074 0.049167 0.050028 \n", - "4 0.104167 0.046456 0.055718 \n", - ".. ... ... ... \n", - "606 0.059259 0.071970 0.042870 \n", - "607 0.117647 0.085938 0.047059 \n", - "608 0.117647 0.085938 0.047059 \n", - "609 0.148148 0.000000 0.000000 \n", - "610 0.148148 0.000000 0.000000 \n", - "\n", - " SMILES_MORDRED_JGI5 SMILES_MORDRED_JGI6 SMILES_MORDRED_JGI7 \\\n", - "0 0.021778 0.007407 0.014227 \n", - "1 0.021778 0.007407 0.014227 \n", - "2 0.026569 0.016799 0.012762 \n", - "3 0.026569 0.016799 0.012762 \n", - "4 0.031875 0.020352 0.014901 \n", - ".. ... ... ... \n", - "606 0.040000 0.000000 0.000000 \n", - "607 0.018519 0.000000 0.000000 \n", - "608 0.018519 0.000000 0.000000 \n", - "609 0.000000 0.000000 0.000000 \n", - "610 0.000000 0.000000 0.000000 \n", - "\n", - " SMILES_MORDRED_JGI8 SMILES_MORDRED_JGI9 SMILES_MORDRED_TopoShapeIndex \\\n", - "0 0.008230 0.006734 0.857143 \n", - "1 0.008230 0.006734 0.857143 \n", - "2 0.010204 0.000000 1.000000 \n", - "3 0.010204 0.000000 1.000000 \n", - "4 0.011255 0.006063 0.833333 \n", - ".. ... ... ... \n", - "606 0.000000 0.000000 0.666667 \n", - "607 0.000000 0.000000 1.000000 \n", - "608 0.000000 0.000000 1.000000 \n", - "609 0.000000 0.000000 0.500000 \n", - "610 0.000000 0.000000 0.500000 \n", - "\n", - " SMILES_MORDRED_MWC06 \n", - "0 7.787797 \n", - "1 7.787797 \n", - "2 8.042056 \n", - "3 8.042056 \n", - "4 8.108623 \n", - ".. ... \n", - "606 7.372118 \n", - "607 7.377134 \n", - "608 7.377134 \n", - "609 5.837730 \n", - "610 5.837730 \n", - "\n", - "[611 rows x 147 columns]), continuous=SubspaceContinuous(parameters=[], constraints_lin_eq=[], constraints_lin_ineq=[]))" - ] - }, - "execution_count": 9, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "# define search space\n", - "df_no_target = lookup.drop('Efficiency', axis=1)\n", - "\n", - "searchspace = SearchSpace.from_dataframe(df = df_no_target, parameters=parameters)\n", - "searchspace" - ] - }, - { - "cell_type": "code", - "execution_count": 10, - "metadata": {}, - "outputs": [], - "source": [ - "# recommenders\n", - "from baybe.recommenders import RandomRecommender, SequentialGreedyRecommender\n", - "from baybe.surrogates import GaussianProcessSurrogate\n", - "\n", - "SURROGATE_MODEL = GaussianProcessSurrogate()\n", - "ACQ_FUNCTION = \"qEI\" # q-Expected Improvement, only q-fuctions are available for batch_size > 1\n", - "\n", - "seq_greedy_recommender = SequentialGreedyRecommender(\n", - " surrogate_model=SURROGATE_MODEL,\n", - " acquisition_function_cls=ACQ_FUNCTION,\n", - " hybrid_sampler=\"Farthest\", # find more details in the documentation\n", - " sampling_percentage=0.3, # should be relatively low\n", - " allow_repeated_recommendations=False,\n", - " allow_recommending_already_measured=False,\n", - " )" - ] - }, - { - "cell_type": "code", - "execution_count": 11, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "\u001b[1mCampaign\u001b[0m\n", - " \n", - " \u001b[1mMeta Data\u001b[0m\n", - " Batches Done: 0\n", - " Fits Done: 0\n", - " \n", - " \u001b[1mSearch Space\u001b[0m\n", - " \n", - " \u001b[1mSearch Space Type: \u001b[0mDISCRETE\n", - " \n", - " \u001b[1mDiscrete Search Space\u001b[0m\n", - " \n", - " \u001b[1mDiscrete Parameters\u001b[0m\n", - " Name Type Num_Values Encoding\n", - " 0 Time_h NumericalDiscreteParameter 25 None\n", - " 1 pH NumericalDiscreteParameter 9 None\n", - " 2 Inhib_Concentrat_M NumericalDiscreteParameter 25 None\n", - " 3 Salt_Concentrat_M NumericalDiscreteParameter 6 None\n", - " 4 SMILES SubstanceParameter 123 SubstanceEncoding.MORDRED\n", - " \n", - " \u001b[1mExperimental Representation\u001b[0m\n", - " Time_h pH ... Salt_Concentrat_M SMILES\n", - " 0 24.0 4.0 ... 0.10 COCCOC(=O)OCSc1nc2c(s1)cccc2\n", - " 1 24.0 10.0 ... 0.10 COCCOC(=O)OCSc1nc2c(s1)cccc2\n", - " 2 24.0 4.0 ... 0.10 Cc1ccc(c(c1)n1nc2c(n1)cccc2)O\n", - " .. ... ... ... ... ...\n", - " 608 24.0 7.0 ... 0.05 C(C(=O)[O-])C(CC(=O)[O-])(C(=O)[O-])O\n", - " 609 24.0 7.0 ... 0.05 C(=O)(C(=O)[O-])[O-]\n", - " 610 24.0 7.0 ... 0.05 C(=O)(C(=O)[O-])[O-]\n", - " \n", - " [611 rows x 5 columns]\n", - " \n", - " \u001b[1mMetadata:\u001b[0m\n", - " was_recommended: 0/611\n", - " was_measured: 0/611\n", - " dont_recommend: 0/611\n", - " \n", - " \u001b[1mConstraints\u001b[0m\n", - " Empty DataFrame\n", - " Columns: []\n", - " Index: []\n", - " \n", - " \u001b[1mComputational Representation\u001b[0m\n", - " Time_h pH ... SMILES_MORDRED_TopoShapeIndex SMILES_MORDRED_MWC06\n", - " 0 24.0 4.0 ... 0.857143 7.787797\n", - " 1 24.0 10.0 ... 0.857143 7.787797\n", - " 2 24.0 4.0 ... 1.000000 8.042056\n", - " .. ... ... ... ... ...\n", - " 608 24.0 7.0 ... 1.000000 7.377134\n", - " 609 24.0 7.0 ... 0.500000 5.837730\n", - " 610 24.0 7.0 ... 0.500000 5.837730\n", - " \n", - " [611 rows x 147 columns]\n", - " \n", - " \u001b[1mObjective\u001b[0m\n", - " \n", - " \u001b[1mMode: \u001b[0mSINGLE\n", - " \n", - " \u001b[1mTargets \u001b[0m\n", - " Type Name Mode Lower_Bound Upper_Bound Transformation \\\n", - " 0 NumericalTarget Efficiency MAX -inf inf None \n", - " \n", - " Weight \n", - " 0 100.0 \n", - " \n", - " \u001b[1mCombine Function: \u001b[0mGEOM_MEAN\n", - " \n", - " TwoPhaseMetaRecommender(allow_repeated_recommendations=None, allow_recommending_already_measured=None, initial_recommender=RandomRecommender(allow_repeated_recommendations=False, allow_recommending_already_measured=True), recommender=SequentialGreedyRecommender(allow_repeated_recommendations=False, allow_recommending_already_measured=False, surrogate_model=GaussianProcessSurrogate(model_params={}, _model=None), acquisition_function_cls='qEI', _acquisition_function=None, hybrid_sampler='Farthest', sampling_percentage=0.3), switch_after=1)\n", - " \n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/home/vscode/.local/lib/python3.10/site-packages/baybe/strategies/deprecation.py:26: DeprecationWarning: 'TwoPhaseStrategy' is deprecated and will be removed in a future version. Please use 'recommenders.TwoPhaseMetaRecommender' class instead.\n", - " warnings.warn(\n" - ] - } - ], - "source": [ - "# campaign strategy\n", - "from baybe.strategies import TwoPhaseStrategy\n", - "from baybe import Campaign\n", - "\n", - "strategy = TwoPhaseStrategy(\n", - " initial_recommender = RandomRecommender(), # Initial recommender\n", - " # Doesn't matter since I already have training data, BUT CAN BE USED FOR BENCHMARKING\n", - " recommender = seq_greedy_recommender, # Bayesian model-based optimization\n", - " switch_after=1 # Switch to the model-based recommender after 1 batches = immediately\n", - ")\n", - "\n", - "# setup campaign\n", - "campaign = Campaign(searchspace, objective, strategy)\n", - "print(campaign)" - ] - }, - { - "cell_type": "code", - "execution_count": 12, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "\n", - "\n", - "Recommended experiments: \n", - "| | Time_h | pH | Inhib_Concentrat_M | Salt_Concentrat_M | SMILES |\n", - "|----:|---------:|-----:|---------------------:|--------------------:|:---------------------------------------------------------------------|\n", - "| 484 | 480 | 7 | 0.031 | 0.05 | C(C(C(C(C(C(=O)[O-])O)O)O)O)O.C(C(C(C(C(C(=O)[O-])O)O)O)O)O.[Fe+2] |\n", - "| 227 | 0.5 | 7 | 0.01 | 0.6 | C1=CC(=C(C=C1SSC2=CC(=C(C=C2)[N+](=O)[O-])C(=O)O)C(=O)O)[N+](=O)[O-] |\n", - "| 394 | 144 | 7 | 1e-05 | 0.01 | [N+](=O)([O-])[O-].[N+](=O)([O-])[O-].[N+](=O)([O-])[O-].[Ce+3] |\n" - ] - } - ], - "source": [ - "# recommendations \n", - "new_rec = campaign.recommend(batch_size=3) # TEST with different batch sizes for optimal performance\n", - "print(\"\\n\\nRecommended experiments: \")\n", - "print(new_rec.to_markdown())" - ] - }, - { - "cell_type": "code", - "execution_count": 13, - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "Input row with index 227 has multiple matches with the search space. This could indicate that something went wrong. Matching only first occurrence.\n" - ] - } - ], - "source": [ - "new_rec[\"Efficiency\"] = [79.8, 54.1, 59.4]\n", - "campaign.add_measurements(new_rec)" - ] - }, - { - "cell_type": "code", - "execution_count": 14, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "Campaign(searchspace=SearchSpace(discrete=SubspaceDiscrete(parameters=[NumericalDiscreteParameter(name='Time_h', encoding=None, _values=[0.5, 1.0, 2.0, 3.0, 6.0, 24.0, 48.0, 72.0, 96.0, 120.0, 144.0, 168.0, 192.0, 240.0, 288.0, 336.0, 360.0, 384.0, 432.0, 480.0, 528.0, 576.0, 600.0, 624.0, 672.0], tolerance=0.0), NumericalDiscreteParameter(name='pH', encoding=None, _values=[0.0, 3.3, 4.0, 4.4, 5.4, 5.5, 5.6, 7.0, 10.0], tolerance=0.0), NumericalDiscreteParameter(name='Inhib_Concentrat_M', encoding=None, _values=[1e-05, 5e-05, 0.0001, 0.0002, 0.0003, 0.0004, 0.0005, 0.0006, 0.0008, 0.001, 0.0012, 0.0018, 0.0024, 0.003, 0.005, 0.01, 0.011, 0.021, 0.022, 0.031, 0.033, 0.042, 0.044, 0.05, 0.1], tolerance=0.0), NumericalDiscreteParameter(name='Salt_Concentrat_M', encoding=None, _values=[0.0, 0.01, 0.05, 0.1, 0.5, 0.6], tolerance=0.0), SubstanceParameter(name='SMILES', data={'COCCOC(=O)OCSc1nc2c(s1)cccc2': 'COCCOC(=O)OCSc1nc2c(s1)cccc2', 'Cc1ccc(c(c1)n1nc2c(n1)cccc2)O': 'Cc1ccc(c(c1)n1nc2c(n1)cccc2)O', 'Clc1ccc(cc1)CC[C@](C(C)(C)C)(Cn1cncn1)O': 'Clc1ccc(cc1)CC[C@](C(C)(C)C)(Cn1cncn1)O', 'On1nnc2c1cccc2': 'On1nnc2c1cccc2', 'c1ncn[nH]1': 'c1ncn[nH]1', 'Sc1n[nH]cn1': 'Sc1n[nH]cn1', 'S[C]1NC2=C[CH]C=NC2=N1': 'S[C]1NC2=C[CH]C=NC2=N1', 'S=c1[nH]c2c([nH]1)nccn2': 'S=c1[nH]c2c([nH]1)nccn2', 'Sc1ncc[nH]1': 'Sc1ncc[nH]1', 'C=CC(=O)OCCOC(=O)OCCSc1ncccn1': 'C=CC(=O)OCCOC(=O)OCCSc1ncccn1', 'CCSc1nnc(s1)N': 'CCSc1nnc(s1)N', 'CSc1nnc(s1)N': 'CSc1nnc(s1)N', 'Cc1ccc2c(c1)nc([nH]2)S': 'Cc1ccc2c(c1)nc([nH]2)S', 'OC(=O)CS': 'OC(=O)CS', 'Sc1nc2c([nH]1)cccc2': 'Sc1nc2c([nH]1)cccc2', 'OC(=O)c1ccccc1S': 'OC(=O)c1ccccc1S', 'S=c1sc2c([nH]1)cccc2': 'S=c1sc2c([nH]1)cccc2', 'OC(=O)c1cccnc1S': 'OC(=O)c1cccnc1S', 'Sc1ncccn1': 'Sc1ncccn1', 'c1ccc(nc1)c1ccccn1': 'c1ccc(nc1)c1ccccn1', 'Sc1nnc(s1)S': 'Sc1nnc(s1)S', 'Nc1cc(S)nc(n1)N': 'Nc1cc(S)nc(n1)N', 'Nc1nc([nH]n1)C(=O)O': 'Nc1nc([nH]n1)C(=O)O', 'Nc1n[nH]cn1': 'Nc1n[nH]cn1', 'OC(=O)c1n[nH]c(n1)N': 'OC(=O)c1n[nH]c(n1)N', 'Nc1n[nH]c(n1)S': 'Nc1n[nH]c(n1)S', 'CS[C]1N[N]C(=N1)N': 'CS[C]1N[N]C(=N1)N', 'C1=CC(=CC(=C1)S)C(=O)O': 'C1=CC(=CC(=C1)S)C(=O)O', 'OC(=O)CCS': 'OC(=O)CCS', 'Oc1ccccc1c1nnc([nH]1)S': 'Oc1ccccc1c1nnc([nH]1)S', 'Nn1cnnc1': 'Nn1cnnc1', 'Nc1ccnc(n1)S': 'Nc1ccnc(n1)S', 'Nn1c(NN)nnc1S': 'Nn1c(NN)nnc1S', 'Nn1c(S)nnc1c1ccccc1': 'Nn1c(S)nnc1c1ccccc1', 'Sc1nc(N)c2c(n1)[nH]nc2': 'Sc1nc(N)c2c(n1)[nH]nc2', 'Oc1ccc(cc1)C(=O)O': 'Oc1ccc(cc1)C(=O)O', 'OC(=O)c1ccc(cc1)S': 'OC(=O)c1ccc(cc1)S', 'Cn1cnnc1S': 'Cn1cnnc1S', 'Sc1nc(N)c(c(n1)S)N': 'Sc1nc(N)c(c(n1)S)N', 'Nc1ncncc1N': 'Nc1ncncc1N', 'Nc1cc(N)nc(n1)S': 'Nc1cc(N)nc(n1)S', 'Cc1cc(C)nc(n1)S': 'Cc1cc(C)nc(n1)S', 'Clc1cccc(c1)c1n[nH]c(=S)[nH]1': 'Clc1cccc(c1)c1n[nH]c(=S)[nH]1', 'COc1cccc(c1)c1n[nH]c(=S)[nH]1': 'COc1cccc(c1)c1n[nH]c(=S)[nH]1', 'Clc1ccc(cc1Cl)c1n[nH]c(=S)[nH]1': 'Clc1ccc(cc1Cl)c1n[nH]c(=S)[nH]1', 'c1cc(ccc1c2[nH]c(nn2)S)[N+](=O)[O-]': 'c1cc(ccc1c2[nH]c(nn2)S)[N+](=O)[O-]', 'S=c1[nH]nc([nH]1)c1ccco1': 'S=c1[nH]nc([nH]1)c1ccco1', 'S=c1[nH]nc([nH]1)c1cccnc1': 'S=c1[nH]nc([nH]1)c1cccnc1', 'S=c1[nH]nc([nH]1)c1ccncc1': 'S=c1[nH]nc([nH]1)c1ccncc1', 'Nc1n[nH]c(=S)s1': 'Nc1n[nH]c(=S)s1', 'Cc1nsc(c1)N': 'Cc1nsc(c1)N', 'Clc1ccc2c(c1)[nH]c(n2)S': 'Clc1ccc2c(c1)[nH]c(n2)S', 'CCOc1ccc2c(c1)nc([nH]2)S': 'CCOc1ccc2c(c1)nc([nH]2)S', 'Cn1nnnc1S': 'Cn1nnnc1S', 'OC(=O)Cn1nnnc1S': 'OC(=O)Cn1nnnc1S', 'COc1ccc2c(c1)[nH]c(=S)[nH]2': 'COc1ccc2c(c1)[nH]c(=S)[nH]2', 'Cc1n[nH]c(=S)s1': 'Cc1n[nH]c(=S)s1', 'ClC([C]1N[N]C=N1)(Cl)Cl': 'ClC([C]1N[N]C=N1)(Cl)Cl', 'Clc1cc2[nH]c(=S)[nH]c2cc1Cl': 'Clc1cc2[nH]c(=S)[nH]c2cc1Cl', 'CSc1[nH]c2c(n1)cc(c(c2)C)C': 'CSc1[nH]c2c(n1)cc(c(c2)C)C', 'Nc1ccc2c(c1)sc(=S)[nH]2': 'Nc1ccc2c(c1)sc(=S)[nH]2', 'OC(=O)c1ccc(=S)[nH]c1': 'OC(=O)c1ccc(=S)[nH]c1', 'Oc1cccc2c1nccc2': 'Oc1cccc2c1nccc2', 'S=c1[nH]c2c([nH]1)c(=O)n(cn2)C': 'S=c1[nH]c2c([nH]1)c(=O)n(cn2)C', 'S=c1[nH]c2c([nH]1)cncn2': 'S=c1[nH]c2c([nH]1)cncn2', 'CC(=O)O': 'CC(=O)O', 'OC(=O)CCCCC(=O)O': 'OC(=O)CCCCC(=O)O', 'OC(=O)c1ccccc1': 'OC(=O)c1ccccc1', 'c1ccc2c(c1)[nH]nn2': 'c1ccc2c(c1)[nH]nn2', 'OC(=O)c1ccc(cc1)c1ccccc1': 'OC(=O)c1ccc(cc1)c1ccccc1', 'OC(=O)/C=C/c1ccccc1': 'OC(=O)/C=C/c1ccccc1', 'C(C(=O)[O-])C(CC(=O)[O-])(C(=O)[O-])O': 'C(C(=O)[O-])C(CC(=O)[O-])(C(=O)[O-])O', 'O[C@H]1C(=O)OCC1(C)C': 'O[C@H]1C(=O)OCC1(C)C', 'OC[C@H]1OC(O)[C@H](O)[C@@H](O)[C@@H]1O': 'OC[C@H]1OC(O)[C@H](O)[C@@H](O)[C@@H]1O', 'OC[C@H]([C@H]([C@@H]([C@@H](CO)O)O)O)O': 'OC[C@H]([C@H]([C@@H]([C@@H](CO)O)O)O)O', 'CC(=O)SSC(=O)C': 'CC(=O)SSC(=O)C', 'CCCCOP(=O)(OCCCC)O': 'CCCCOP(=O)(OCCCC)O', 'CCN(C(=S)S)CC': 'CCN(C(=S)S)CC', 'O/N=C(/C(=N/O)/C)\\\\C': 'O/N=C(/C(=N/O)/C)\\\\C', 'CCCCCCCCCCCCc1ccccc1S([O])([O])O': 'CCCCCCCCCCCCc1ccccc1S([O])([O])O', 'CCCCCCCCCCCCOS(=O)(=O)O': 'CCCCCCCCCCCCOS(=O)(=O)O', 'OC(=O)CN(CC(=O)O)CCN(CC(=O)O)CC(=O)O': 'OC(=O)CN(CC(=O)O)CCN(CC(=O)O)CC(=O)O', 'O/N=C(\\\\C(=N/O)\\\\c1ccco1)/c1ccco1': 'O/N=C(\\\\C(=N/O)\\\\c1ccco1)/c1ccco1', 'OC[C@H]([C@H]([C@@H]([C@H](C(=O)O)O)O)O)O': 'OC[C@H]([C@H]([C@@H]([C@H](C(=O)O)O)O)O)O', 'OCC(CO)O': 'OCC(CO)O', 'NCC(=O)O': 'NCC(=O)O', 'OC(=O)CCCCCCCCCCCCCCC(=O)O': 'OC(=O)CCCCCCCCCCCCCCC(=O)O', 'C1N2CN3CN1CN(C2)C3': 'C1N2CN3CN1CN(C2)C3', 'NO': 'NO', 'COC(=O)CCCC1=CNC2=CC=CC=C21': 'COC(=O)CCCC1=CNC2=CC=CC=C21', 'OC(=O)c1ccncc1': 'OC(=O)c1ccncc1', 'C1COCCN1CCCS(=O)(=O)O': 'C1COCCN1CCCS(=O)(=O)O', 'OC(=O)c1cccnc1': 'OC(=O)c1cccnc1', 'CCCCCCCC/C=C\\\\CCCCCCCC(=O)O': 'CCCCCCCC/C=C\\\\CCCCCCCC(=O)O', 'C(=O)(C(=O)[O-])[O-]': 'C(=O)(C(=O)[O-])[O-]', 'OC(=O)c1ccc(cc1)N': 'OC(=O)c1ccc(cc1)N', 'Oc1ccc(cc1)S([O])([O])O': 'Oc1ccc(cc1)S([O])([O])O', 'OC(=O)c1ccccn1': 'OC(=O)c1ccccn1', 'OC(=O)c1ccccc1O': 'OC(=O)c1ccccc1O', 'CCCCCCCCCCCCCCCCCC(=O)O': 'CCCCCCCCCCCCCCCCCC(=O)O', 'SC#N': 'SC#N', 'C1=CC(=C(C=C1SSC2=CC(=C(C=C2)[N+](=O)[O-])C(=O)O)C(=O)O)[N+](=O)[O-]': 'C1=CC(=C(C=C1SSC2=CC(=C(C=C2)[N+](=O)[O-])C(=O)O)C(=O)O)[N+](=O)[O-]', '[O-]S(=O)[O-].[Na+].[Na+]': '[O-]S(=O)[O-].[Na+].[Na+]', 'CCCCCCCCN(CC(=O)O[Na])CC(=O)O[Na]': 'CCCCCCCCN(CC(=O)O[Na])CC(=O)O[Na]', 'CCCCCCCCCCCCN(CC(=O)O[Na])CC(=O)O[Na]': 'CCCCCCCCCCCCN(CC(=O)O[Na])CC(=O)O[Na]', 'CCCCCCCCCCCCCCN(CC(=O)O[Na])CC(=O)O[Na]': 'CCCCCCCCCCCCCCN(CC(=O)O[Na])CC(=O)O[Na]', 'CC1(C(N2C(S1)C(C2=O)NC(=O)C(C3=CC=C(C=C3)O)N)C(=O)O)C': 'CC1(C(N2C(S1)C(C2=O)NC(=O)C(C3=CC=C(C=C3)O)N)C(=O)O)C', 'CN1C=NC2=C1C(=O)N(C(=O)N2C)C': 'CN1C=NC2=C1C(=O)N(C(=O)N2C)C', 'N.N.[N+](=O)(O)[O-].[N+](=O)(O)[O-].[N+](=O)([O-])[O-].[N+](=O)([O-])[O-].[N+](=O)([O-])[O-].O.O.O.O.[Ce+3]': 'N.N.[N+](=O)(O)[O-].[N+](=O)(O)[O-].[N+](=O)([O-])[O-].[N+](=O)([O-])[O-].[N+](=O)([O-])[O-].O.O.O.O.[Ce+3]', '[NH4+].[NH4+].[N+](=O)([O-])[O-].[N+](=O)([O-])[O-].[N+](=O)([O-])[O-].[N+](=O)([O-])[O-].[N+](=O)([O-])[O-].[N+](=O)([O-])[O-].[Ce+4]': '[NH4+].[NH4+].[N+](=O)([O-])[O-].[N+](=O)([O-])[O-].[N+](=O)([O-])[O-].[N+](=O)([O-])[O-].[N+](=O)([O-])[O-].[N+](=O)([O-])[O-].[Ce+4]', '[N+](=O)([O-])[O-].[N+](=O)([O-])[O-].[N+](=O)([O-])[O-].[Ce+3]': '[N+](=O)([O-])[O-].[N+](=O)([O-])[O-].[N+](=O)([O-])[O-].[Ce+3]', '[O-]S(=O)(=O)[O-].[O-]S(=O)(=O)[O-].[O-]S(=O)(=O)[O-].[Ce+3].[Ce+3]': '[O-]S(=O)(=O)[O-].[O-]S(=O)(=O)[O-].[O-]S(=O)(=O)[O-].[Ce+3].[Ce+3]', '[Cl-].[Cl-].[Cl-].[Ce+3]': '[Cl-].[Cl-].[Cl-].[Ce+3]', 'CNCC(C1=CC(=CC=C1)O)O': 'CNCC(C1=CC(=CC=C1)O)O', 'C(C(C(C(C(C(=O)[O-])O)O)O)O)O.C(C(C(C(C(C(=O)[O-])O)O)O)O)O.[Fe+2]': 'C(C(C(C(C(C(=O)[O-])O)O)O)O)O.C(C(C(C(C(C(=O)[O-])O)O)O)O)O.[Fe+2]', 'C(C(C(C(C(C(=O)[O-])O)O)O)O)O.C(C(C(C(C(C(=O)[O-])O)O)O)O)O.[Zn+2]': 'C(C(C(C(C(C(=O)[O-])O)O)O)O)O.C(C(C(C(C(C(=O)[O-])O)O)O)O)O.[Zn+2]', 'C1=CC=C(C(=C1)C=NNC(=S)N)O': 'C1=CC=C(C(=C1)C=NNC(=S)N)O', 'C1=CC(=C(C=C1O)O)C=NNC(=S)N': 'C1=CC(=C(C=C1O)O)C=NNC(=S)N', 'NC(=S)NN=CC1=C(C(=C(C=C1)O)O)O': 'NC(=S)NN=CC1=C(C(=C(C=C1)O)O)O', 'CCCCN(CCCC)C1=NC(=NC(=N1)NC(CCSC)C(=O)O)NC(CCSC)C(=O)O': 'CCCCN(CCCC)C1=NC(=NC(=N1)NC(CCSC)C(=O)O)NC(CCSC)C(=O)O', 'C1=CC2=NNN=C2C=C1Cl': 'C1=CC2=NNN=C2C=C1Cl', 'O=C([O-])C(O)C(O)C(O)C(O)CO.[Na+]': 'O=C([O-])C(O)C(O)C(O)C(O)CO.[Na+]', 'COC(=O)n1nnc2ccccc12': 'COC(=O)n1nnc2ccccc12'}, decorrelate=0.7, encoding=)], exp_rep= Time_h pH Inhib_Concentrat_M Salt_Concentrat_M \\\n", - "0 24.0 4.0 0.0010 0.10 \n", - "1 24.0 10.0 0.0010 0.10 \n", - "2 24.0 4.0 0.0010 0.10 \n", - "3 24.0 10.0 0.0010 0.10 \n", - "4 24.0 4.0 0.0010 0.10 \n", - ".. ... ... ... ... \n", - "606 24.0 7.0 0.0005 0.05 \n", - "607 24.0 7.0 0.0005 0.05 \n", - "608 24.0 7.0 0.0005 0.05 \n", - "609 24.0 7.0 0.0005 0.05 \n", - "610 24.0 7.0 0.0005 0.05 \n", - "\n", - " SMILES \n", - "0 COCCOC(=O)OCSc1nc2c(s1)cccc2 \n", - "1 COCCOC(=O)OCSc1nc2c(s1)cccc2 \n", - "2 Cc1ccc(c(c1)n1nc2c(n1)cccc2)O \n", - "3 Cc1ccc(c(c1)n1nc2c(n1)cccc2)O \n", - "4 Clc1ccc(cc1)CC[C@](C(C)(C)C)(Cn1cncn1)O \n", - ".. ... \n", - "606 S=c1sc2c([nH]1)cccc2 \n", - "607 C(C(=O)[O-])C(CC(=O)[O-])(C(=O)[O-])O \n", - "608 C(C(=O)[O-])C(CC(=O)[O-])(C(=O)[O-])O \n", - "609 C(=O)(C(=O)[O-])[O-] \n", - "610 C(=O)(C(=O)[O-])[O-] \n", - "\n", - "[611 rows x 5 columns], metadata= was_recommended was_measured dont_recommend\n", - "0 False False False\n", - "1 False False False\n", - "2 False False False\n", - "3 False False False\n", - "4 False False False\n", - ".. ... ... ...\n", - "606 False False False\n", - "607 False False False\n", - "608 False False False\n", - "609 False False False\n", - "610 False False False\n", - "\n", - "[611 rows x 3 columns], empty_encoding=False, constraints=[], comp_rep= Time_h pH Inhib_Concentrat_M Salt_Concentrat_M SMILES_MORDRED_ABC \\\n", - "0 24.0 4.0 0.0010 0.10 14.211085 \n", - "1 24.0 10.0 0.0010 0.10 14.211085 \n", - "2 24.0 4.0 0.0010 0.10 13.532488 \n", - "3 24.0 10.0 0.0010 0.10 13.532488 \n", - "4 24.0 4.0 0.0010 0.10 16.206679 \n", - ".. ... ... ... ... ... \n", - "606 24.0 7.0 0.0005 0.05 7.847124 \n", - "607 24.0 7.0 0.0005 0.05 9.238929 \n", - "608 24.0 7.0 0.0005 0.05 9.238929 \n", - "609 24.0 7.0 0.0005 0.05 3.932653 \n", - "610 24.0 7.0 0.0005 0.05 3.932653 \n", - "\n", - " SMILES_MORDRED_nAcid SMILES_MORDRED_nBase SMILES_MORDRED_nAromAtom \\\n", - "0 0.0 0.0 9.0 \n", - "1 0.0 0.0 9.0 \n", - "2 0.0 0.0 15.0 \n", - "3 0.0 0.0 15.0 \n", - "4 0.0 0.0 11.0 \n", - ".. ... ... ... \n", - "606 0.0 0.0 9.0 \n", - "607 3.0 0.0 0.0 \n", - "608 3.0 0.0 0.0 \n", - "609 2.0 0.0 0.0 \n", - "610 2.0 0.0 0.0 \n", - "\n", - " SMILES_MORDRED_nBridgehead SMILES_MORDRED_nHetero ... \\\n", - "0 0.0 7.0 ... \n", - "1 0.0 7.0 ... \n", - "2 0.0 4.0 ... \n", - "3 0.0 4.0 ... \n", - "4 0.0 5.0 ... \n", - ".. ... ... ... \n", - "606 0.0 3.0 ... \n", - "607 0.0 7.0 ... \n", - "608 0.0 7.0 ... \n", - "609 0.0 4.0 ... \n", - "610 0.0 4.0 ... \n", - "\n", - " SMILES_MORDRED_JGI2 SMILES_MORDRED_JGI3 SMILES_MORDRED_JGI4 \\\n", - "0 0.053333 0.047348 0.025679 \n", - "1 0.053333 0.047348 0.025679 \n", - "2 0.074074 0.049167 0.050028 \n", - "3 0.074074 0.049167 0.050028 \n", - "4 0.104167 0.046456 0.055718 \n", - ".. ... ... ... \n", - "606 0.059259 0.071970 0.042870 \n", - "607 0.117647 0.085938 0.047059 \n", - "608 0.117647 0.085938 0.047059 \n", - "609 0.148148 0.000000 0.000000 \n", - "610 0.148148 0.000000 0.000000 \n", - "\n", - " SMILES_MORDRED_JGI5 SMILES_MORDRED_JGI6 SMILES_MORDRED_JGI7 \\\n", - "0 0.021778 0.007407 0.014227 \n", - "1 0.021778 0.007407 0.014227 \n", - "2 0.026569 0.016799 0.012762 \n", - "3 0.026569 0.016799 0.012762 \n", - "4 0.031875 0.020352 0.014901 \n", - ".. ... ... ... \n", - "606 0.040000 0.000000 0.000000 \n", - "607 0.018519 0.000000 0.000000 \n", - "608 0.018519 0.000000 0.000000 \n", - "609 0.000000 0.000000 0.000000 \n", - "610 0.000000 0.000000 0.000000 \n", - "\n", - " SMILES_MORDRED_JGI8 SMILES_MORDRED_JGI9 SMILES_MORDRED_TopoShapeIndex \\\n", - "0 0.008230 0.006734 0.857143 \n", - "1 0.008230 0.006734 0.857143 \n", - "2 0.010204 0.000000 1.000000 \n", - "3 0.010204 0.000000 1.000000 \n", - "4 0.011255 0.006063 0.833333 \n", - ".. ... ... ... \n", - "606 0.000000 0.000000 0.666667 \n", - "607 0.000000 0.000000 1.000000 \n", - "608 0.000000 0.000000 1.000000 \n", - "609 0.000000 0.000000 0.500000 \n", - "610 0.000000 0.000000 0.500000 \n", - "\n", - " SMILES_MORDRED_MWC06 \n", - "0 7.787797 \n", - "1 7.787797 \n", - "2 8.042056 \n", - "3 8.042056 \n", - "4 8.108623 \n", - ".. ... \n", - "606 7.372118 \n", - "607 7.377134 \n", - "608 7.377134 \n", - "609 5.837730 \n", - "610 5.837730 \n", - "\n", - "[611 rows x 147 columns]), continuous=SubspaceContinuous(parameters=[], constraints_lin_eq=[], constraints_lin_ineq=[])), objective=Objective(mode='SINGLE', targets=[NumericalTarget(name='Efficiency', mode=, bounds=Interval(lower=-inf, upper=inf), transformation=None)], weights=[100.0], combine_func='GEOM_MEAN'), recommender=TwoPhaseMetaRecommender(allow_repeated_recommendations=None, allow_recommending_already_measured=None, initial_recommender=RandomRecommender(allow_repeated_recommendations=False, allow_recommending_already_measured=True), recommender=SequentialGreedyRecommender(allow_repeated_recommendations=False, allow_recommending_already_measured=False, surrogate_model=GaussianProcessSurrogate(model_params={}, _model=None), acquisition_function_cls='qEI', _acquisition_function=None, hybrid_sampler='Farthest', sampling_percentage=0.3), switch_after=1), n_batches_done=1, n_fits_done=0, _measurements_exp= Time_h pH Inhib_Concentrat_M Salt_Concentrat_M \\\n", - "0 480.0 7.0 0.03100 0.05 \n", - "1 0.5 7.0 0.01000 0.60 \n", - "2 144.0 7.0 0.00001 0.01 \n", - "\n", - " SMILES Efficiency BatchNr \\\n", - "0 C(C(C(C(C(C(=O)[O-])O)O)O)O)O.C(C(C(C(C(C(=O)[... 79.8 1 \n", - "1 C1=CC(=C(C=C1SSC2=CC(=C(C=C2)[N+](=O)[O-])C(=O... 54.1 1 \n", - "2 [N+](=O)([O-])[O-].[N+](=O)([O-])[O-].[N+](=O)... 59.4 1 \n", - "\n", - " FitNr \n", - "0 NaN \n", - "1 NaN \n", - "2 NaN , _cached_recommendation=Empty DataFrame\n", - "Columns: []\n", - "Index: [], numerical_measurements_must_be_within_tolerance=None, strategy=None)" - ] - }, - "execution_count": 14, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "campaign" - ] - }, - { - "cell_type": "code", - "execution_count": 15, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "\n", - "\n", - "Recommended experiments: \n", - "| index | Time_h | pH | Inhib_Concentrat_M | Salt_Concentrat_M | SMILES |\n", - "|--------:|---------:|-----:|---------------------:|--------------------:|:-------------------------------------------------------|\n", - "| 194 | 24 | 10 | 0.001 | 0.1 | C1N2CN3CN1CN(C2)C3 |\n", - "| 297 | 24 | 0 | 0.0004 | 0 | CC1(C(N2C(S1)C(C2=O)NC(=O)C(C3=CC=C(C=C3)O)N)C(=O)O)C |\n", - "| 300 | 24 | 0 | 0.0004 | 0 | CC1(C(N2C(S1)C(C2=O)NC(=O)C(C3=CC=C(C=C3)O)N)C(=O)O)C |\n", - "| 303 | 24 | 0 | 0.0004 | 0 | CC1(C(N2C(S1)C(C2=O)NC(=O)C(C3=CC=C(C=C3)O)N)C(=O)O)C |\n", - "| 306 | 24 | 0 | 0.0004 | 0 | CC1(C(N2C(S1)C(C2=O)NC(=O)C(C3=CC=C(C=C3)O)N)C(=O)O)C |\n", - "| 586 | 3 | 0 | 0.0008 | 0 | CCCCN(CCCC)C1=NC(=NC(=N1)NC(CCSC)C(=O)O)NC(CCSC)C(=O)O |\n", - "| 591 | 3 | 0 | 0.0008 | 0 | CCCCN(CCCC)C1=NC(=NC(=N1)NC(CCSC)C(=O)O)NC(CCSC)C(=O)O |\n", - "| 596 | 3 | 0 | 0.0008 | 0 | CCCCN(CCCC)C1=NC(=NC(=N1)NC(CCSC)C(=O)O)NC(CCSC)C(=O)O |\n" - ] - } - ], - "source": [ - "second_rec = campaign.recommend(batch_size=3) # TEST with different batch sizes for optimal performance\n", - "print(\"\\n\\nRecommended experiments: \")\n", - "print(second_rec.to_markdown())" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Data Analysis" - ] - }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], - "source": [] - }, - { - "cell_type": "markdown", - "metadata": {}, "source": [ - "# Bayesian Optimization" + "results.to_excel(f\"./results/{exp_dataset_name}_simulation_{N_MC_ITERATIONS}MC_{N_DOE_ITERATIONS}exp_{BATCH_SIZE}batch.xlsx\")\n" ] }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Search Space" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Objective" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Recommender" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Benchmarking" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - }, { "cell_type": "markdown", "metadata": {}, diff --git a/img/AA2024_simulation_10MC_50exp_1batch.png b/img/AA2024_simulation_10MC_50exp_1batch.png new file mode 100644 index 0000000..ac71423 Binary files /dev/null and b/img/AA2024_simulation_10MC_50exp_1batch.png differ diff --git a/img/AA2024_simulation_10MC_50exp_1batch_first10.png b/img/AA2024_simulation_10MC_50exp_1batch_first10.png new file mode 100644 index 0000000..a4cde39 Binary files /dev/null and b/img/AA2024_simulation_10MC_50exp_1batch_first10.png differ diff --git a/img/AA2024_simulation_10MC_50exp_1batch_first25.png b/img/AA2024_simulation_10MC_50exp_1batch_first25.png new file mode 100644 index 0000000..20583fd Binary files /dev/null and b/img/AA2024_simulation_10MC_50exp_1batch_first25.png differ diff --git a/results/AA2024_simulation_10MC_50exp_1batch.xlsx b/results/AA2024_simulation_10MC_50exp_1batch.xlsx new file mode 100644 index 0000000..f3eec57 Binary files /dev/null and b/results/AA2024_simulation_10MC_50exp_1batch.xlsx differ