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..a1d5dbd 100644 --- a/can_baybe-inhibitor.ipynb +++ b/can_baybe-inhibitor.ipynb @@ -30,7 +30,7 @@ }, { "cell_type": "code", - "execution_count": 114, + "execution_count": 27, "metadata": {}, "outputs": [ { @@ -65,48 +65,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 +118,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": 27, "metadata": {}, "output_type": "execute_result" } @@ -211,36 +211,38 @@ "\n", "from baybe import Campaign\n", "from baybe.objective import Objective\n", - "from baybe.parameters import NumericalDiscreteParameter, SubstanceParameter\n", + "from baybe.parameters import NumericalDiscreteParameter, SubstanceParameter, CategoricalParameter\n", "from baybe.recommenders import RandomRecommender, TwoPhaseMetaRecommender\n", "from baybe.searchspace import SearchSpace\n", "from baybe.simulation import simulate_scenarios\n", "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": 28, "metadata": {}, "outputs": [], "source": [ @@ -249,7 +251,7 @@ }, { "cell_type": "code", - "execution_count": 117, + "execution_count": 29, "metadata": {}, "outputs": [], "source": [ @@ -264,7 +266,7 @@ }, { "cell_type": "code", - "execution_count": 118, + "execution_count": 30, "metadata": {}, "outputs": [], "source": [ @@ -358,12 +360,40 @@ " encoding=\"RDKIT\", # optional\n", " decorrelate=0.7, # optional\n", " ) \n", - " ]\n" + " ]\n", + "# one-hot encoding\n", + "parameters_ohe = [\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", + "CategoricalParameter(\n", + " name=\"SMILES\",\n", + " values=unique_SMILES,\n", + " encoding=\"OHE\",\n", + " )\n", + "]\n" ] }, { "cell_type": "code", - "execution_count": 119, + "execution_count": 31, "metadata": {}, "outputs": [], "source": [ @@ -378,12 +408,12 @@ "\n", "searchspace_mordred = SearchSpace.from_dataframe(df = df_no_target, parameters=parameters_mordred)\n", "\n", - "\n", "searchspace_morgan = SearchSpace.from_dataframe(df = df_no_target, parameters=parameters_morgan_fp)\n", "\n", - "\n", "searchspace_rdkit = SearchSpace.from_dataframe(df = df_no_target, parameters=parameters_rdkit)\n", "\n", + "searchspace_ohe = SearchSpace.from_dataframe(df = df_no_target, parameters=parameters_rdkit)\n", + "\n", "\n", "objective = Objective(\n", " mode=\"SINGLE\", targets=[NumericalTarget(name=\"Efficiency\", mode=\"MAX\")]\n", @@ -392,172 +422,159 @@ }, { "cell_type": "code", - "execution_count": 120, + "execution_count": 32, "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": 32, "metadata": {}, "output_type": "execute_result" } @@ -568,13 +585,14 @@ }, { "cell_type": "code", - "execution_count": 121, + "execution_count": 34, "metadata": {}, "outputs": [], "source": [ "campaign_mordred = Campaign(searchspace=searchspace_mordred, objective=objective)\n", "campaign_morgan = Campaign(searchspace=searchspace_morgan, objective=objective)\n", "campaign_rdkit = Campaign(searchspace=searchspace_rdkit, objective=objective)\n", + "campaign_ohe = Campaign(searchspace=searchspace_ohe, objective=objective)\n", "\n", "campaign_rand_mordred = Campaign(\n", " searchspace=searchspace_mordred,\n", @@ -595,146 +613,216 @@ }, { "cell_type": "code", - "execution_count": 122, + "execution_count": 35, "metadata": {}, "outputs": [], "source": [ "scenarios = {\"Mordred\": campaign_mordred, #\"Random\": campaign_rand_mordred,\n", " \"Morgan\": campaign_morgan, #\"Morgan Random\": campaign_rand_morgan,\n", - " \"RDKIT\": campaign_rdkit, \"Random\": campaign_rand_rdkit\n", + " \"RDKIT\": campaign_rdkit,\n", + " \"OHE\": campaign_ohe, \n", + " \"Random\": campaign_rand_rdkit\n", " }" ] }, { "cell_type": "code", - "execution_count": 128, + "execution_count": 36, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ - " 0%| | 0/40 [00:00" ] @@ -773,15 +870,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, 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": 39, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAkcAAAGxCAYAAABoYBJuAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/H5lhTAAAACXBIWXMAAA9hAAAPYQGoP6dpAACJ10lEQVR4nOzdd3xUVdrA8d+5d0omPYEUShJCL9IRRGwoAsqquK67dhD7i+sq9rJiWZW1YWN1XQuua6/r2iN2mkrvNdQ0ICSTNiUz5/3jJgMhAUlImcTn+/mMZu595s6ZuYTzcKrSWmuEEEIIIQQARksXQAghhBAinEhyJIQQQgixH0mOhBBCCCH2I8mREEIIIcR+JDkSQgghhNiPJEdCCCGEEPuR5EgIIYQQYj+SHAkhhBBC7MfW0gVobYLBIDk5OcTExKCUauniCCGEEOIwaK0pKSmhY8eOGMah24YkOaqnnJwc0tLSWroYQgghhGiA7du307lz50PGSHJUTzExMYD15cbGxrZwaYQQQghxONxuN2lpaaF6/FAkOaqn6q602NhYSY6EEEKIVuZwhsTIgGwhhBBCiP1IciSEEEIIsR9JjoQQQggh9iPJkRBCCCHEfiQ5EkIIIYTYjyRHQgghhBD7keRICCGEEGI/khwJIYQQQuxHkiMhhBBCiP20quTo+++/54wzzqBjx44opfjwww9rnNdac/fdd9OhQwdcLhdjxoxhw4YNNWIKCwu58MILiY2NJT4+nssuu4zS0tJm/BRCCCGECGetKjkqKytj4MCBzJo1q87zDz/8ME899RTPPfccCxcuJCoqinHjxuHxeEIxF154IatWrSIrK4uPP/6Y77//niuvvLK5PoIQQgghwpzSWuuWLkRDKKX44IMPmDhxImC1GnXs2JEbb7yRm266CYDi4mJSUlKYPXs25513HmvWrKFv3778/PPPDBs2DIDPP/+c008/nR07dtCxY8dffV+3201cXBzFxcWyt5oQQgjRStSn/m4zG89mZ2eTl5fHmDFjQsfi4uIYMWIE8+fP57zzzmP+/PnEx8eHEiOAMWPGYBgGCxcu5Oyzz254ASorD35OKTDNw4sFsO13W9pybCAAh8rNwyHWNK37BxAMWo9wjjUM6xEusVpb33E4x9bn9zMcYiH8fpdb6O8IbZhUVgYJBoI4bIqyIg/e8krsTpPoxAhKCz34vYHQdUPHd5Xh9xwkDrBHOfcdL/dhdxhEJ0bg3lOO31NJMFCJM8JObHIMRXtKKS8txxUdRUJSDHtz91JRWha6lis6ioSUOPbmF1NR4cEVE209z91Lhbuk7rjSMlxxsSSkxlvP3SWh37lacdFRJHRMZG+B23rfYBBXpKt2TPXz8orQ74Yr0mWVOb+YcncpkdFRJHSIp3DnbkqKiggCGk1MQiJJnZPYtXkne3cXkNA+maQuHdi1JZe9uwusD2AYJCSnWsc372RvQV6dcQntk0nq2old2/Kta7VLIiktuea1quO6dLDiCndbzzNS2bVpR91xW3Lx+MrJOKp31R+Oqt97W8PSnDaTHOXl5QGQkpJS43hKSkroXF5eHsnJyTXO22w2EhMTQzEH8nq9eL3e0HO32113AV566eCFS0+H8eP3Pf/3vw/+F0SHDnDGGfuev/467NctWENSEuyf0L39Nhxs/FRCApx77r7nH3wAe/fWGaqjouCCCwgENRow/vtfjN27rXNVf1FV72ocdDoJXnwJCjANBZ9+is7JIYjVZxuK0xpts8GlU6w4IPj5F+jt22rHAQowrroq9J7Br+ZgZG+uO04pmDIFXVW5qO+/h/XrrZiqv1er3zOgNWV/vBAjMoJopw3mzcO/YiUV/iARNgOHzfpLo8RTiS8QpPLcP5HcOQkFlH4/l9KfFxMbYSfSYaKBXSVePP4ADptBymUXoxISyHd7yf36R7puXUusy47WkFNcgdbQKd6FUpB/ymmsCUTQKyWGDlvWoRcsZGdRBWW+SqIctlBccYWfVUNOIHNADzrERaBXrWbnJ1/VGZfn9pBw9pkkH9UDrWHdD4vpsGQBsS47in0xqbERxLns6DFjyGvXkXX5JXQtzid9yTyoIw5g+4DhbErsRHpCJF0r9sDnn9cZt6vES3bvQbQfPoSuSVGQk0PxOx/UGQeQNOYEGDiQ3GIPm9dkc9TCr2vEFJb7qj5nBGrYMAp792f5jmIGRAVI/PQjtNZsKyynxBtAa+ieFIXLYeLu2Zev4zM5sWcSCQEv5a+8yrq8fb8bvVKiiXTaKPdWsjAylYHn/Y7EKAd79hSz8ZF/ENRwVIdYYiLtFJV4WbGtiH4d40gYPoAtGYP4fPFOlLeS3t+8T+9OsaR0iCZnewkbthXTIz2ODmkxbA0m8qm9R+g9J275ig5pMeQeEJe7vYTFpS62HTWKEwd3oM+gZPLue5oN2XtqxGzYVowGymLbkTHpj/Qd0oFVi3aSP+t5eqW66Nw1ke3r97BpW6FVMQQ1MSkdsP/hT/Q7vhMrf9nBgI0/sOOXbezOdeOuqPp7TUN0hJO4bp3pcv/VrPppJ/2Gd2LLXc9StH4rZR4PaE1khIP2nduRcVQ7duaU0eGuv/DLZ1vY/PM62i/NwlXuBjQGiqSMZHqMyGTXtr0k9ezAd5U92PzLWoJBTca2ZURWFKOA9l1S6TGyK7u27iUpI4H1C7fxo6NX1e+tQdrOFUSX7aFdehI9j+1CQfZekjMTWPPjdvbklLG671mh73ewsZ6j+2gKNxXRoVs8K37MoTB3X5KypvdpaMMkrU8i43vupuiLn+uMA1jXcywd+6cy9vJ+5P37EzLtu+qMS+wQRa8nb2BrdiV9RkUx9+bXqFy0lAMldoii73Ed2dlxFD3Hp/Dx08vwfL+ApF3r64wr21RE1PWT+PjprWxfU0i7PZtIyV9TZ1xst3iy9nZjY45VnScWbiE1b2WtmOryb0s7mtIYq56MK9pOf72xzjiAHZ2H4I7tCOTRK6mcE5O3491URGId39vOjgMpji8irU8BY8fF4H07q864XIBjRzHyr2eSs9FPl8RKVlx8X63vNrfqc/a+4Sxy3El06ZfElzO+xfnFx3XG9T2uIztcnaBfLwgGYOkn8OH/4NyxENsJ0o6G7b/UujcH02aSo6by0EMPce+997Z0MQ4qENQYCoJBzcY8N7k7dxPttDEoLR7TUCzdXsSSbUXsceTTLjWbS4/rgtcfZN7aAo5rZ2A3DbLW5PPdul2A9XfqMQMzOOMC8AeCvPLjJiZ5fURozZwV25i/fgcGAY7tlsqJg3pQXLCT1179DxOPGUCn7kfx5dzFrPplWah8R3dP47hBfSjelcOSLTvpMXIQnXsN4qV3P2PLa2+QUlpEekoSpx8/AtNQ7Nm6nlWbt9IvM532gQD+QIBHn3sRsr5kcKSLU088DtMwKNiwkrWbN9E7PYOU3gOp9Hp54dmnMHWAKYNGYAYC5P7yA1s2r6NLRnc6Dj+RoNYs/+Ij5n/yHzAUGQOHMf7ECdh0EL1xNfbefQn6A6z79D2KtmUDkP3ZbJKHH8vou/5OpAoS2LYeV+++BP3+GnEAa3NXcvwDT9LOBmrLcqJsDoJ+P2s//YDiqjh3eia9Tz+bdjZNjzULaN9pDAGvh3UfvVMVoygE3Old6H36RKKUJmPDIhL6d6WyooKfn56Jmj8PjcFeoDQtgx6nn47d4yduy2acZV4qKzx8+9BDlP7wI+69e2iXkU6XseOwe/zEbtmMrWcPAjZY+vQsNmzeRqVWFJWVURHpoPv4MSi3l8iNm6F7NwI22Pj516x963+URMeyA8jrms6I7p2hjrii7TsoSPyC9TFxbB08gOMvOdeK27AZetSMA9iyYRODZ85A5ZcSO28RAbeHgE2xPmsee3fsBmVnt7Kx1bARsUUxYPogUgvKiekexdpvN7J7az6EGhY0i7Aq3O69+9Hb7SfaMPnm2QXY3/8ZK5UGjWKRUiSmtafXcV3IKAsSbRh8+vQv7FiaQ8+NBYDBInaH/tLtYtiJjXIw//1NLK2sesNgADaUsnZDKQVVccHySlI6RLPy251sKStBdW4f+vOxYXUuezq4a8UV5pahopNRvr18v3gv2X3yOK1jNMEST40Yqj6BERnBDy+vY8uCXYy9vB/xqQl0THeF4vYNJFXsrvCQ/d4m0DBkbBe2fPwR2cv3VJ3dF1lW5qewdDflP+QwZGwXlny5lfzle3B6NQonABU+2L56L44IG12GZ7Dkx1yWZu0Aomin26OrqpMAkLe1kqh2RaT3bc/WdXtZW+IDW1frvC2fgOkAIG97gKgkK27b6j3kba/E3zt9399vZg4BI0DBDj8xG/fF7cnxAPu1tAG7t+4lz6lJ79ueHWt2U7xjT40Iu8+NNkzylrnZXumhW992dcZVx+Yt87B+fjwDhqey4731dcYV7/Cw8accBp95FMu/2sKeDbkkBmr/Y7Z4h4f8zS4GXJTG8vk7yVu2hfb+MswDYqvj0vu2Z9UvueQt244dsPlLa8TuH7djzW525e7AHpkI+8UeGFNdfpu/FLvPZX1OfynFeXvqjCMUazUI7FqbR37p3oN/v1WxecvcZCcl0ecQ32/+up2sn7+TwWO7sPrNhXXGVH/OrcsKGHzVMJZ/tYWCVdvpcojvN/Oi4VYl9vq5sHIOrPaD+Y4V1O1kGPtEHe9StzYz5mjz5s1069aNJUuWMGjQoFDciSeeyKBBg3jyySd56aWXuPHGG9m7X4tJZWUlERERvPPOO3V2q9XVcpSWlla7z7KBTeaFZT6+XpPH4PQEuiZFs3lXCT9t20ul101lST7DUuI5qv8gFn//JT/8vIBh/QZy7Ngz+Pa/7/DRN9/gqwwy5piRTJw0hVUf/psF87/jmCHH0O/sSXz93BMsnf819kAQezCATQc5aviJjLjxLnZnfUr7k05lxQN/JX/et9gCQWwBjb3q0e6Y48l4+FGK3n2X+LPOYufNN1M2b36NjxV17Eg6PfIIRf/9L/HnnMPOG2+k7Me5tT5+KO7994n/4x+tuLnzajSXRx07kk5PPEGlL0Demx+SOPEMIhMj2XzTXZTM/ykUG3PM0XR9+D7K3T4KP/wfiWedQWScg0233UvJ/J9BKWKGD6Xbw/dQVuRlz4efEDfhdGKTXKz56+MULl5Hpc1FwHQSMJ0kDO3L0NsvIndLCaldYvjpkXfZtdRKUrRSaGWAMkgelMmImyayc91eOvWI48cns9i5qoCg6SBgOAiYDgJmBB37d2DsFf1Z88MO+oxMJevFVWxfW7OFLq13AqdeOYA183LpM6ojXz6/gh1r9tT63tJ6J3DqZf1YsyCfPsd14ssXVrF99W7UAb+yobh5OfQ5rjNfvrSG7WsKQQdDsTViju1I1our2LauCFR115MVW1fc9rV70UrViE3vFV9nHFAjNq13AmMv7V1nXHVsWt/2jL28H2t+3EmfY1Lq/M6qY489pweDx2aw5IstzH9vQ62YaiN/353B4zNZ8uVW5r23EaXr7gYceXZXBo/twpI5O5j3/iYAVDBQO+bUDJbN2cJPbyxDoTGCfoxgJWalt+pnP8OuGUePE7ux4buNLJn1MVT/+alSfd3BU39HjxO774uDWrFDrjmtdsz+34Vh/X0y5M9n0GNUFzZ+v5HlT7yDEazECAZQ2vq/Eayk3bAeDL77cop2eUhIsLHs3mcp/GV11XeiUWiUDpIwtC/9H5yGu6iS2Hg7i+9+hF1LVhE0QBsQNKDdkH6MvO0G3Hv9xCa5+PGRx8lfuRx0sCpzAxT0HPd7BvzxLHZtzCGpe0dWfPgx67PeQQEqGKzOU+k+5o/0//2Z7M7Oo33XVFZ/8CEb57yBlfFqCAYwCNB93CX0PuscirfnEZ+eysaP32DTx0+AUYmBD4WP3hPvIG38ZDy784lon8K2z2ez7v0H9/vOrDftfc5dpI+9BM+uPCLap7Bzzitk//c+TFPjMILYDLDbNJ3OnkHcsRcT8FRg2uyULXyNko9vQSld1WIN0Wc8QsSIS9A6iDJMyn96Dff/biOAaT2USRCT9hPuJW7o79EKlGlj7+IPyP3onv0Se0uHCX8lYchEdDCAsjvYs+Qjtv/vAYJaobUiiEEQg8wJN5M8ZIIVZ5jsWvYpWz+eYZ3VAet3ecLtJA45KxSzd/GH5H5yv/XdV3fTa02H0/d7T8OkaPGH5H9yv/UZDTCq6q6k0/9KzIAzUEqhtaZk6Ufs+uT+6j/doDQYiqTfTbfitK4jzpJ0xt3EDDnbulYwSMmiD2rFACRN+CsxQyaiTBOtNcVL/0veRw+isb6L6v93mnALiQNPQ1UPQVj7Mcz5m9WtpoLWn08dwD3oauJGX3tYY47aTHJUPSD7pptu4sYbbwSsRCY5ObnWgOxffvmFoUOHAvDll18yfvz4FhmQXebx4dIBCr78lKSTx7L+7tso+eYbIr0ac7+7EjXqWDo99hhF7723LwmZO6/GtQ4nplryzTfR7rLL2PPiixQ88uhBy3ewuEoDAgYETEi/6XaSLr6EXa+9ysbHH6rx+o6TLqNs3RqKF8yj+7TbSbrwYgpef5UNT8wgdsRIonr1Zet/XsTj6kBJ7FHEHXsqJ147ljVzc6yk4YVVViV/gLQ+iVZleoi4w4mpduzvu1kV7pdbQxVkU8c17Fobrb+AdBAIopTGMBSGaXLsOX046sTOrPxuB/PfX00wWImurAQdAILYHFEcc85RVsz3O1n4/nKCniKguoK0/u+IjGP4ucPpPbIjaxfk8vM7C/CX1U7c7FHtOPrcY+h9TIcjjts/ZsMveSx571v8ezdi4MHAi0EFBl66jf4d/c85g8KtBSRmJLPmvx+x/qs3CWKiMQkqkyAG/U67gH6njaZwSx6JXVJZ/fk3LPv0LaoTAdCgNIN+dwF9xp5M8c584jqlsOHrr1jy4T9BBVAEgADD/3QtXY47Dc+eAiLaJbN17mcsevvxqpJX/ZIqGHrujWSM2j/uUxa98yiqOguoih1y7k1kjDodT+EuIhKT2PnzVyx9fyaGaWDaDEzTxoA/3EJSnxFUVpRhc0Wxd9MSNvzvSQzDsK5nKJQy6XHGX4hJ70vQ78WwOynfuY5tnz0DhtXVrJQmqmNvOo65GgwT7StHOSIhGKDgm3/iyV1r1WkoIjr0JumkK604fwXK7gIdZNfCd6gozEGZTiKSupI0eJyVyFVVpGjN3o2/ECjbizJMlGEQ1akPzoRUAILeMgxnFACV7l1UFmQT1Fb9bE/OxBaXZMV5yjAiquKK8/HnbUDpAAQD2Dr0wpbQCdDoskJUVCKgCLrzCO7ZBMrEaN8NI9q6Fr5ycERa1y3bjS7aFvrHlUpIx4iqjisDR5R1h8oLoXj7vqQhtjNUtcTgrwC71dJC+V4oybF+jukIkQm1YzzF6NJ8qrIQdEwKyhljnav0gs1qidPeElT5vt8FFdkOquMCPqhqXcNbChX7/d3lSgRn9KHjDhpTUse16nrPQ8Tt9xnqdb3qz7r/5zzwWuW7CWXOB/s+fGXoir1V90qhXfEoe2RVnB9l2vd9H+W7rRbeYCXYInAbscQltGt7yVFpaSkbN24EYPDgwTz++OOMHj2axMRE0tPT+fvf/86MGTN45ZVXyMzM5K9//SvLly9n9erVREREAHDaaaeRn5/Pc889h9/v59JLL2XYsGG8/vrrh1WGxkyOPv3kfUbk7T1oohJQUO6EcqdBn5v/SsofziPvw3dZ8Mzf0Ib1LyFtAKZC2e2MumY6KaeeTv43X/D9KzOoDAbQNhNts6FNE0dUDP1POJNe4/7IrtXLSOo3iOyf5rB8/rd4yipQdieGzUFsUirDxoynXedu7M3NJaFDByrKSlk9dxHugmIyBvTCUCbp/bphmAalRSVEx8cQDATZuW4bKMjL3klsUhw9hvQBpTAMwxrwFxuN31uJMhQL/ruatfP34Cvf90ewOhlYNmcbC/67GR20/vWB2jcuSSnFMWd1ZeAp6Sybs50F/62dXBiGYviZXRl4chorv9vJsq+3YRhgcxhAkIhoJ85IOx26JdB7ZAd2rN1N5z7tyV66iz07iqn0eKgoLIRgJbGdO9E+ox1d+rdj54qtdOrfhfwtbty5uyncsBbT0JimptPRg0lIT8XpslG4cSOJ3btT6Q9SmpdP3i8LAYPU4UcTnZyCzW5QuHkLiV27EKgMUrprN7mLloTK32nYYKKTk1CmYu/mrSR2zQClKN+1m7zFi1Daj9IBUoccTURKR9BBKtYtwNVzOBg21JL/wEfXWhc77gY45W50MIgybehgAJSBb8WnlK34Bm1EoG0uogaOIaLHcAD8xXuwx7UDoGLrakrWLa6qYDQxvYfhyuhbFbcbe5zVdVS+fR0l65ejsVrbYnsNJLKT1ZXiLynGHhNnxeVsw71hFSiI7XEUkR3SasV487dRvnWVlQACkT2HYotLgWAQ/56t2NtlgGFQWZyPd9NCsEWAw0lE5tGYzkgCfh+ekhIiYuMwbTYClZV43MWh73ffcT9edzERsfEYNhvBykp8FWUoBXZXNIZpEgwGCPg8mI4IDMN6HvTva9o37Psd95ZjOCP3e75vHIXhjLKOBwJobxkqwnqugkEI+qsvZv1zPRiEoA8Mx37P/fv9AbfXPH7g68BqvauuUIKBfRVMVasTAV9Vi8/+cUHQlaBs+wa0W790tX7HhGht6lN/t6rk6Ntvv2X06NG1jk+aNInZs2ejtWb69Ok8//zzFBUVcdxxx/GPf/yDnj17hmILCwu59tpr+d///odhGJxzzjk89dRTREdHH1YZGjM5WvLt5wwYdAx7PvuY9n/4E2u+/4hVi7/B7ooiIjIeZ3Q8dlcUvY4+iaSUNCor/dhsdkrchRQW5GBiYqBwuKJI7NAJwzDwVXhwuCIIBoPsXL+T0uIKdCV06JZKXHI0hmGwa2shhQVuEjvGkdQpgWBQU15Uwe6dbtp3jiUyzoVhKNx7yikv9hGV4CImwYkOarzllQQqg0TFW9l+WZGXcrePyFhHrWN2h4Er1onDZSN3YxHZy6xxTcNOz6zRkmPaFJ16JXDUCZ3IOKod7j0VxLaPRCkIBoPs2lBARVEpcR3iSEi3/tWngxr3znxiOyWjqv4S37t5K0pDfLeMqpggpTt2Et25UyimcMNmirO3kzKkP5HtE0Frdq9YQWVxIc6EOBL6DQKl8BbuonjlEmJ69MHVIa2qcqmkct1X2HqdAqYNDBvBZe8SXPEhxoCJGAP+YP0LJVAJG7Kgxxgw7WDY0D+9ADqAGnEVBPxWxbTsDRh4vlUxmTb44XFY8Cwccw0cP826TsAHS1+DQRdUxdlRc+6DH2eGkp7Q9X55GYZdGopj3jMQ2xGOOgeNtpIb906I6Vj1fSjrX8u5y6HDAIizkhR2rYU9m6BdN0iqmvlRvB3yVkJqf4jrbB3bswH2boWEDGhXNfDYvRMK1kByX+u9AfZshKKtEJ9eMw6sgZLV1yrcAold9ovJscrSYZD1r3gdhLwVUFEEManQvqdVaQf8gN73L1AhhKhDm02OwkFjJkdBn48d11zDL1sWc+J/PiAxNYPykkLKS/bidEUT4YrF4bKaCyt9AYp3leOKceKKsVNW7GXPzjISO0QSGefEMBSFOWUUF1QQn+IioUMUwaDGU+rHvbuCdp2isDtteEr9lBTu+1dvTGIEEdF2/N4ARfnlxKdEYneah4yr9FkzgyKi7GxaUkDBFjeRcU6OOqETiz/fypYVuykr9uEtr0QHdZ1dXMUF5XTuk0Bix2i6D0kiMs5KvgpWb8Is3UFEQjzRPQaAYeDfu4uS1T8T0/do7AlWclS+dT2enC1EdMwkMsOqTH1796ABZ4LV4lGyZTOl27YRnZFOTIbVglFZUohvywpcvY9B2R3Wv5TzV1nN24YN0o+x/iW9NxtenQh//LdV0b95AXQdDaOug7lPweZv4LzXoWA1/OtkuOLrX4+DxrvW/nFvX2INNjzmGlj/Bfg90Od3VqIGVqIUDMLOX6xm7NhOkJhpfc5gpZX4xKVbLQpet9UtoQwr8XBEgT3SSky8bnDGWucqvdZrq5q2MWzW+2gNlR6rJac6cQnuNx5v/ziwYip9NVtFqpM7rSHgBdNpxQUrrWPKsJJJIYSoB0mOmlBjJUdaa+b+5znaPfAUi7rFcP5H8zAP8hd+wB8gd1MxvopKTLtBu87RRMU5KXd7sTvNw0p64pJcBAMaZ6SNnA1FFOWXExnnIL1fO3auL8JT4qO0yIsr2o4z2k5G33Zs+CU/lPgMPDmNue9tJHvZLipKrIrscMf12CNMRp3TnX7Hd2LHukK8ZZUkd4nBEWGjaHs+8R0TsUc62btiEZGBAiLio1A2h9V/3b6nVdnvWW/9bIuA7B+g0xBY/V/oeyYs+jcMv8JqfQCr5WHBP2DYFFjxLvT/A/z8AoycCrs3wH/OgeFX7ktYfjdzX+vMu1OsY6kDYO4TMOp6qxUlpgOcOh22/wRpI2Dxq1ZcXCfY9LWVnBRXtYYMuRh2/GJNHV35vpUQxHayuikqiqwkpOtoKNwMiV1hW9VAd1eC1VKS1BsqqgYkp4+EvVusZGbnUmtgf0Q8lOZZLTF+j5U4JHSx+vQj21nxYHWNKANiO1ifwRkDUe2lhUUI8Zv0m1wEsrUp3LuL+Vn/5XdAhct58MQoEKBgWyk+T4CoBCdKKcqLfZimgdNlJ1AZxFPqxxlpx1vux+cJYJgKh8vG1hW7yd/iZvf2Ukr3eind6yUpPYaxl/dj17YSOvZI4NN/rDjkoGdPqZ8+ozry+fMra8QZpqIwt5Qty3czeGwGW5bvIi7ZRUpmFyKibERE2XFG2UM/x7aPpKzYS8fuCbjziqjI2U5J0S48xaU4VTqVyktCIhi2TvsKUemxWnDsLiup2Pg1rHgb1nwEp96/r0Ul66+w+WsroQHIW24lLIZtX8zX98PWuVZMWQF887d979NxsBU37xko3mElLAE/nP6o9fOQi63kY+8WK4EpyYXhl1vPvSUw5BLrOsl99sVFxFrdQgPP2xcHEJ2yL6bSY7XadDluX0z7nlYrTVznfXH+cijaBp2HVMW5rdacst1WwlMd5y0BTzEkZMKOReAvhZSjrNe371lzDIkQQoiDkuSoBXgqPfz43ce4qpYI8FYNFj9QMKgpzCmn3O0lOt4ZGpAM1GglAqgo8xOTEMG2eTn0HJ7KJ7OW15n0bF9TyLqFeQwem8HqH3Mo3eshsWMUylAoZQ1kVobC7wuwbfUeBo/NYOuqPSRlxJDeL5HIWAeuGDsOlw2nyxZKetL7tSc+JRKfp+Y0aIfTJLa9C3fObnxuN357JbGZXSnYvh5faTlxKdHEtI/F1BX7Eoj9leRC0Xb433VVY0uAfhPh6MshZymMuBLadbfiqqbd0647jLzWSjoK1sCIq6ykqLRqoc+z/7nv+tGpkDHSGhdzzNXQa3zNchyYfAQDVgJSmG215lQfPzAOrP9Xx+3eCGiIz4CCtdYMDx0ETxH4SiG5HxSsslqMXIlWXP6qfS1InmJrdk1yX6vFq6LQStTiMyB/pRVX6bO+I7/HarWq9IZm7QghhDh8khy1gG07N1OSn4fLa80q8btctWK01hQXlFOyu4LIWAfKOPhskYoSHwv+s5meR6eEpn0XbHXTrlMU0QkRRCdYS+FHJzhp1zGKdp1iKCv20ntkBzr2iKuV0AA4IsxQ4pPWO5G49hE14qrPu3eX4/ME8HsqrSQoby8+dwkEvDgcBrGduuBeswzfnjx0MIjbb1JR4iNl2FD8+ZtxUIrSFTUTCx20uq8Ks2H07dZA5YDf6m464Sbod3ZV15G2Wnp6jq2ZlOyfqFS3zmQeVzPmwDhvifX/hC5WF1T5bmuQsyPKaoUpswaTh9b6KcmzurEiYq3utHbdrK60suqpqPuNqSkvAlec9XPeSishUgaoqllDnhKrO80ZZ/3sjLWee9z7YsB6vmutdd7jtuJ3rbVeo2wQGWMNgo5sb3XdSWIkhBANIslRM/MH/GRvXInhV0RWJUc6KqpWXFmRl6KCcpxRdkzbwbtD8rOLWfhRNskZsfQZ1ZHcTUUMPCWNzIHta7fi1JnQ7Ht+uHGh87vK8bmLwVOEL68I9+5IYnv2o3jXRrx7dqMyerB7xSrKC0sIEo/GwBmpiI70wd5snDFRUFpWMzFZ/g58+6DV+vOHl+Ddy6zWmjOftsbfVLfWlO22Xle2y2pVSR1gdaeB1ZqSs3TfuhqlBVa3XIcBkLMMyndZCUR8upX4lO+uWjtIWdftNMQalBwMWmtluBKscTu2CKurrlr1cL2oZOvnyHZWl1b1xibKsJKU6hat0M/mfj8fkPQmZta+/v6q4/ePE0II0agkOWpmeXt2smfrFlxx7TErrG4iFRVTI8ZT6mdPThmmzcDurGtRdWsq+6ofc1gzN5e0PomMu+Io9uSUYrMbuHdX1Ep6Dkx4AHyeAO7d5XUnPoeIM03N3q05ePO2EywvJlhZSVA5KS32U+FZjyOuA54ihS+3CNOEyDgXdgfY7AYRkQq7XVnjYfz77QO3d4s1aPrEW62EZ8jF8Mtsa2xPTAcrxhFpxZXkQkWxNX6nes2WvVusLjKwppcr05ruHWJAcY6VEDmirIHJJflWF1Zku6pVzB3WYOVKH6QeVZXEtOA4HVlbRgghWoQkR82oMljJpuxVUFaJMz2GCI81xdkRHReK8XsD7MkpJRgIkpQWQ6UvUKsFqKLUx5ble4iIslubKF51FCWFHmx2qyKvK+kx7QZFBWV4Sv0EA5pgUIO2ruWtqMQRYaOixIfd6WLXdjeeUitx0xqCAY0OBinf68ZpD7J3wzqMYAXKZsOIiMYWbcduV9gdYNo8mNpDTIYNs7qB5Ncq+ewf4PtHrIHGsZ2twdHFO6HbSTXjqluA/BXW2JuELg1LXmJSfj1GCCHEb5YkR81oT+kuCjZvwuGKQylFTFXSExlvJUeByiCFOaV4yv1Exzup9AVqteLkZ7vZsXYvoy/uzZxXVjNkXDrlxV4C/mDoGpW+ABUlPjylfuwuG6WF1kw1w7QGW5umwu4wQ+OYtAZvRSUR0XZ8VQmbK9ph9QxVerAFijErCjBK3BhGgKj0GIyIVAybsvbeOcR4qEPylcP8Z2Ddp9bzQRdZU+xL860EpvKAQdpluwBldY/FdpKWFSGEEE1CkqNmEtRBsreuIbi3DFdKGh5/JZFVE87iE5LQQU1Rfhmle72hKfv7twAV7ypnadY2Sgq9jL28H3Pf3UDvYzrgcNlCiVMwqCl3+4iIsuNwGdicNux2g+QusZg2hWEzME3r/7USmkqflYxUeq2WGW+p1ZKjy6CyHCJdkNjOWpzvcEUnV12rjllo5YXWuKB1nwIKTr0Pjvk/KNpixXtL9g2W9ritLjC7C1L6QfUeSkIIIUQTkOSomRRWFJK/ZROmcmF32NlTWEh1h1B8YjLFuyso3uXBFWuvkbj4PAH25JQQ2z6S+JRIRv6+Oyu+2U7fUR0x7TW7lDylfiJjHKRkxmKYdXQ3BSqtFYe93qop3xXW9HBPsTWrq3rVY7C6q0wn2FzWuJyGtNL4K2pPbw9WwvafYdD5VqtRdAqc+Qx0P7n2NPjqQdo7foGIOEjpYw2OFkIIIZqQJEfNQGvNjtxNePIKccQnA1DqLgKg3AEmURTll+OIMLHZDxiArWHRxxtI6daewWMzyF21lYzEbbAnzxo8bHOBaSOIjWAZxCbHYvjc1jT0gM9KeHzl1lo61ccC1bu1s18S5LAGKtenZejX7J/g7N0C+ath41dw6r3WStTKhD+8aC20eOA0e7Bmm5XushZEjEy0yieEEEI0MUmOmkGxt5icLRswvDacKdbaM94Sa4fwEpeB321DdQKH64DbUemlIncH/kqDPqM6smvDDlJ6dcS9rgjf3t3gK6nab0rhKYPISI1rrw32BvclPxDa/BTTDs5o62ejmW69t8Ra26d9T2vfr1PvhQ//DzJGQfdTrJjSgtqv81dY0+rjM6zuOdnyQgghRDOR5KgZ5BZupXxHAUZMLNU9ZoEyNwClETYc2rAGQFfTWGvvFO9gV14kp04ZyIL319Cntwf35jJie/XDvXkTPrd1jUDV7LOYjiZGZNDqAmvK5OdQY4mcMdbYoJI8yFkCa/4HW36EU6Zbs9CWvQlDJ1vXOBhviTXOqH0Pa5802WRUCCFEM5Jap4m5fW52bN2IKgvi6LCvW0iXWmv8lDltxETvNz7I77FWfS7NQ0encNRpA/jyhVVkdqlAKRs+txv35k3Edu0WSpA85ZqoWIPIaKPmispNpa6xRGAlRvEZsGg2/DgT3FUbsXY7GYZOgm0LrE1g6+pCq+YtsQaDH8lUfSGEEOIISHLUxPLduZRtzyFoc2G3WYlLpcdAlZYBUB7hwDRMa4Xmst3WPmL+cnAlUOxJZOELqygvLCb52H1bjFQnSLbISCoKre65mDjj19cTaiwHjiXyFFtjg9p1hzfOs8YVAdij4LgbYNRfoHib1TW2/+sOTJB85VaLUUo/K0am6gshhGgBkhw1oTJ/GTk7N6CL/Nji2wNWYuR1mzi85QBUOJ2ooBd2b7DG3thdEJ1ERblmzlvZBANwwnhXrcTH53ZbrUYVmqgYA1dkMycS1ZuqxnWG7O+t/c7evgQ2fQ1JfaDPGdYGsUm9Dj4Lbf/jlV5ren9Sb0mMhBBCtChJjppQQXkBJdtzCQYdREY4qaww8LrB0F4iPFZy5HPYsRdvhchka0ZW1Vihdcu9BAPQLtkguVPdXWWVlRoUxMQ3Y6tRtT2bYO6T0P9cayzR/H9Y3Wq//5c1VgjAFV93C1F1gmR3WT8H/FZimNgN2nWVxEgIIUSLkuSoiQR1kIK8Tei8QpTDCXuLCBRrHHixGV5cHmsFSL/dYU2jj9o3QNlTHmTzGmv7jr5DnAdNfDzlmph4gwhXMyYTvlL45WVY9QF0PcnaA23TNzD8Cug5tmYiVNcstGrVCz0GK63B2/EZkNRz315pQgghRAuR0a5NRAeD+NYtg11bcJUXU7m7HCNYjmELErS5iPRayU/QGYFhd9V47boVPgIBSEwySDlYq5FfYxiq8ccaRSdbLUC1PxDsWgdb5sLK96zE6I//hj0brRaioq1Wd1hdrz0YHQR3HsR2hOTejbvGkhBCCNFAkhw1ER2oxJu7iwqVgC/YAR0RgeFyWju/K4Poqj3McLpQat9t8FQE2bT68FqNouMUEa5GvoXVM9H2T3J2b4DF/4Ge42D7Quj/Jzj/DWsPtOolA/YfS3Q4CZLWVotRVHtI7iPrGAkhhAgb0q3WRIKBIO4SJzoQjWELYJjBGuejq/ZDs9mcmPttF7J+hZ9AABLaG6R2rrvVyO/TmDar1ajR7Z/kFKyBHx6zZpD94UX44Cpr3aFj/2wtN/BrY4kOpTQfnLGQ0ldWvhZCCBFWJDlqIoGgJlAZUWdiFNQQU2Edczr3zUTzeoJsXO0DfqXVyBMkPtHEGdFEDX/F22FDFgw8HzoOscYV/fgkDLvM6nYr333w11aPJTqU8j1gRlhT9iPiGrfsQgghxBGS5KjJ6VpHSnw+nFW9ai67C1U1CHn9Cj+BSqvVqEPawVuNbDaDmLiq84ezWnVpweHF7VwMK96FdZ9ZG9QG/NZMtNzl0O+sBn36WjxFEAxCh/7W7DwhhBAizMiYoxZQUmElKJUGRNhdGAq8Hr2v1WjwIVqNKoLExisczqrzdY0RAut5Qhfr/K/FxaXBgn/CWxfD6g+txGjwxdYMtJJcq+urPgOtD8ZbAr4K63oxKUd+PSGEEKIJSHLUAirKreSoNEKhDANlGqxf4aPSD/HtDDqkW61CkampOGJjQ6/zeTV2h0FUrGklK9HJdQ+Erk6MDrb4ojPGmim2d6u1hMAb58G8JwENacfABW/BGU9Y23+U5NVvoHVd/BXgzgFfmTX4OrZTw64jhBBCNAPpVmsBfo+1r1qJy8RQioDf2K/VyBFqNaosLw/toeYtLsbrCdIu2cQRE7sv+QlWWgOnC9ZYu9xn/wjte8K8Z6Bgde03T+5rtQhl/2CtYP3OJGuF656nwYA/QocBh06sDrUv2oF8pVBRbM3Qi0uzkqLIRFnkUQghRFiT5KgFHD3qJKJ2+yjPXgQKdmwwqfRDXKJBl/6J2KOiKM/Lq7HJbOGKpcSULSXG54KY38OX02HNf60WGW3NfOPU+60xQnOfgq+mH7wAyrDiFjwLMalw/pvWlHqwxh4dzqrWB6M1eIvBU2LNQmvXDWI6WGshCSGEEK2AJEctoGDzeo5/7DE2PPJXKoJ2tm+0ejdHjE8irlt33Js3hWJ9RYX4vvmEdsddiiqfB33PhbcusvYwq2Y6rd3uh10K67+Aoy+zus0K1tR+8+Q+1vktc+Hoy63FG+u7qnVdggFrsLWvvGqK/lFVC0pG1+ObEUIIIVqeJEctYPuSBexcsYVRT8zk27cXULgdeg9vR7dje+HevAmf2w2AUZFP3KK/YS9aA5E2q7VnxTsQ2c7a7T6us9VdlZgJiV2tlp3oZGsQ9bHX1m4B2n8skiNy36rW9ekqq0v5HvB7rNah9j2tcUz2iIZfTwghhGhBkhy1AKe3grKF8/ji6RmM+8u9pKTl0P+kjjUSI0f+AmKX/h3DX0Kwx+lw9JWoknxUv7Oh4+B9ycyvDb6uPn64cfWhNZQVgOGEjoMgOkW2ABFCCNHqSXLUAiI8XgA2b8hnzdwcBo/NoCw310qMggGi1r1E1Ka3AKjsfxHqjJn487cQYZaBr6RmMnO4Y4SOdCzRgXTQmsnmiIHUo2TNIiGEEG2GTOVvAQlBawB1+sAR9BnVkdU/bMOVlITTCQk5bxGV2gEAz7F3os58gsL1m7FjzXCrNSW/tODgSY23ZN8YosONOxzBALhzISIBOg6UxEgIIUSbIi1HLcBR5iVq1LFMuPJivvzXKirLikh3LiN24GhUz/sIvncFJUP+itn3TxSu2ojLKMU097tVDW3taQzBSisxiukg+6IJIYRok6TlqAV0PupoOj32GL98spjtawqJ9a0nat1LKDRaGZQe9We8HU+kZEcuvqISXFF13Kb6tvY0hkqvlRjFp0Fqf0mMhBBCtEmSHLWAdl17sfPGG1nzy1YA4lNiUH94Ce83syjevAUjMR2wthRxRSqcEWGwaKK/Asp2WbPiUo6S2WhCCCHaLOlWa2beYJCS517A0KDHngRA5IAT8e5YT3H7U6C0HF9pOVprAgGIijUOus9as/GVgscN7XpC++5g1L0prhBCCNEWSMtRM3OXl2Fo62eHPR4AV8GP2DOH1thHze8Fh1MREdnCiZGnCLylkNQH2veQxEgIIUSbJ8lRMyutsGadVTggqOIAcGZ/EtompDpB8nk1kTEKm60Fk6Oy3VDpt7rREjPBkD8uQggh2r42Vdvdc889KKVqPHr37h067/F4mDp1Ku3atSM6OppzzjmH/Pz8Zi2jryo5Kou0U1HqB8AZ7aixj5oZHYMyIaqugdjNIRiw9mwz7NBhoDUAu6W79oQQQohm0qaSI4B+/fqRm5sbevz444+hczfccAP/+9//eOedd/juu+/Iycnh97//fbOWr9JjJUfF0fGAQhHAEW3tP1adIBmOSCJcCqerBRKSgM9KjCLbQafBEJPS/GUQQgghWlCbG5Bts9lITU2tdby4uJgXX3yR119/nZNPPhmAl19+mT59+rBgwQKOOeaYZimf9pZZ5YlIACDSKEK72oXOe4uLKS0pIrmDrfkHYvvKoaIQ4jMgqZfMSBNCCPGb1OZajjZs2EDHjh3p2rUrF154Idu2bQNg0aJF+P1+xowZE4rt3bs36enpzJ8//6DX83q9uN3uGo8jYXoqAKhwVSdHewlEtA+d9/vA7lC4mnsgdsVe8LqhfW9I6SeJkRBCiN+sNpUcjRgxgtmzZ/P555/z7LPPkp2dzfHHH09JSQl5eXk4HA7i4+NrvCYlJYW8vLyDXvOhhx4iLi4u9EhLSzuiMtqqkiOf00qOosy9BCP2tRz5vJqoaIXN3kzJkdbWHmlaQ+oAa6q+2eYaFIUQQojD1qZqwdNOOy3084ABAxgxYgQZGRm8/fbbuFyuBl3z9ttvZ9q0aaHnbrf7iBKkCK8HgIAjHgOINAoJRgwHIBjQKAWR0fXMWXXQ2tYjWGkNplYGmA4wbIceSB2shJJ8cMVDcl/ZI00IIYSgjSVHB4qPj6dnz55s3LiRU089FZ/PR1FRUY3Wo/z8/DrHKFVzOp04nc5GK5PL4wVA2awp+y7TjbZZ23B4vRqn6yArYld6rcUYgwErqdF63zmlrESo+hHwW2sTBSv3xZj2/R4O6zpluyG2EyT3lq1AhBBCiCptOjkqLS1l06ZNXHzxxQwdOhS73c6cOXM455xzAFi3bh3btm1j5MiRzVamSI8PAMOIRgNOuzfUulPph4T2BoZxQHLkL4eyQohKAocLbC6wOayp9qZ9X1Jk2q1jOmAlUwEfVHr2JVbeUuuYr9xqbWrfA9p1t14nhBBCCKCNJUc33XQTZ5xxBhkZGeTk5DB9+nRM0+T8888nLi6Oyy67jGnTppGYmEhsbCx//vOfGTlyZLPNVAOI8litOcqIQgfBbrfWOvL7NDaHwhV5QJda9dYdSb2gXbfDXKHaBrY6Wru0tlqVAl6rVckZJws7CiGEEAdoU8nRjh07OP/889mzZw9JSUkcd9xxLFiwgKSkJABmzpyJYRicc845eL1exo0bxz/+8Y9mLWO0J2D9oK1uLHuE1T3m82qi4wzsjv1ajTxu8JVZW3ckdDnyREYpq8XJ5jiy6wghhBBtWJtKjt58881Dno+IiGDWrFnMmjWrmUpUk9YQ4wmiUQR1JABmhEkwqNEaomL2S34qiqwusZS+1rpDskK1EEII0SzaVHIU7sr8fiL84LNHASYQxHA58Hk0zghFRPWK2OV7IBiE1P4Q17kliyyEEEL85siAk2bkLrcWkKxwWhvOugw3AUc8fr8mOlZZA7FLCwAFHQZIYiSEEEK0AEmOmlF51aazxTHxgLU6ts+WiM1uWAOxS3KtafapAyDm4MsLCCGEEKLpSLdaM/JXbTpbGhkPQFRVcmQaQezeXRARa23dIYsxCiGEEC1GWo6aUdBjbTpb7ooHINLci8+WgKrYg3IlWF1pkhgJIYQQLUpajpqTpxwAn8Mac+Q03CgNyu6CDv3BGdOSpRNCCCEE0nLUrGxVyVGlw9o6xGaUYyhQpgGO6JYsmhBCCCGqSHLUjBwea9PZYNW+aqbpBRTKVLKOkRBCCBEmJDlqRk6vtemsNqzkSJl+lKEwDmtLECGEEEI0B0mOmlGk14cGtLLGFmkziNIKZUpyJIQQQoQLSY6aUZTHR6UtEpQ1Dl7bQCHJkRBCCBFOJDlqRtGeSrzVM9VUCR4jEqWUNSBbCCGEEGFBauVmFO0J4nNa440izb14jGgUyJgjIYQQIoxIctRMKoNBoit0qOUoythLhRGDUmDYJDkSQgghwoUkR83E7SnH1OCrWuMo0tiLV0VhAMqUtTiFEEKIcCHJUTMpLbf2VSt3WS1HDrMUDBNDKZBuNSGEECJsSHLUTDyeEgDKI6zkyG7zoACUQhlyG4QQQohwIbVyM6mssFqOvE4rOTJNLygD01AoQ1bHFkIIIcKFJEfNJOipAKDSbo05wqzEQGEqQ1qOhBBCiDAitXIzMao2nQ3YrJYjbBoMrMRIkiMhhBAibEit3Ezs3goqTSfacAIQsGmUAQqk5UgIIYQII1IrNxOnx4Ovao0juyrHZ0ZgYkMrSY6EEEKIcCK1cjNxeb2hwdhRxl7KiUGbhrQcCSGEEGFGauVmEunx4d1vAUiPjsI0DJQCuQ1CCCFE+JBauZlEefyhbjWXWYwXO8owUdKtJoQQQoQVqZWbSbQnEEqOnGYZoDEwqhaBlHWOhBBCiHAhyVEziakI4nVa3Wp2uxetQZkmSlbIFkIIIcKK1MrNoMLvx+Un1HJks/lBa0xrODZK9lYTQgghwoYkR82guMLaV616QLZhD6DRYFpdasqUbjUhhBAiXEhy1AzKymvuq4ZDgdbYlGmNN1JyG4QQQohwIbVyM/B5SgkYdgK2SAC0wwR01VR+Q7rVhBBCiDAiyVEzCHrK8FV1qZl4qbS7IKjQoTFHchuEEEKIcCG1cnPwlOOtGowdZe7Fa8YCGkMpa381U1qOhBBCiHAhyVEzsHnK8VWNN4o09uI1Y6p2nKVqjSMZkC2EEEKEC0mOmoHd4wnNVIswSwgqGygwtJIB2UIIIUSYkVq5GUR4PftWx7aVWQc1aKqm8cuYIyGEECJsSK3cDFweX2gav93mCR03DTCk1UgIIYQIK1IzN4NIrz80W81mq9x3QimUKbdACCGECCe/2Zp51qxZdOnShYiICEaMGMFPP/3UZO8V7akMzVZT9qB1UIPSCmWTmWpCCCFEOPlNJkdvvfUW06ZNY/r06SxevJiBAwcybtw4CgoKmuT9YioCoZYj5aiamWaAkn3VhBBCiLDzm0yOHn/8ca644gouvfRS+vbty3PPPUdkZCQvvfRSo79XIBgk0mvgd8QAVatja6yWI6UwTFujv6cQQgghGu43lxz5fD4WLVrEmDFjQscMw2DMmDHMnz+/VrzX68Xtdtd41EeZ30fQZiVGBn4qHREEdRCUgYHCkG41IYQQIqz85pKj3bt3EwgESElJqXE8JSWFvLy8WvEPPfQQcXFxoUdaWlq93q/cV4bXEQ9ApFGE14xBY3WpoYKydYgQQggRZqRm/hW33347xcXFocf27dvr9Xqvrxyf0xpvFGnuxWdEobU1KNswFBjSrSaEEEKEk99czdy+fXtM0yQ/P7/G8fz8fFJTU2vFO51OnE5ng9+v0lcRmqkWYZaCcoEOYhoKQxkylV8IIYQIM7+5mtnhcDB06FDmzJkTOhYMBpkzZw4jR45s9PfTnvLQTDWHWW4dCwbRBhgo6VYTQgghwsxvruUIYNq0aUyaNIlhw4YxfPhwnnjiCcrKyrj00ksb/b1MnyfUcmS3e6kENBqFgTIkORJCCCHCTYNr5ilTplBSUlLreFlZGVOmTDmiQjW1P/3pTzz66KPcfffdDBo0iKVLl/L555/XGqTdGOw+T2jMkWnzA6C1Bqyp/LKvmhBCCBFeGlwzv/LKK1RUVNQ6XlFRwb///e8jKlRzuPbaa9m6dSter5eFCxcyYsSIJnkfx36bzpoOayC2NZPfsMYcKdUk7yuEEEKIhql3t5rb7UZrjdaakpISIiIiQucCgQCffvopycnJjVrI1szl9eGNtpIj7NWJUNDaV01Jt5oQQggRbuqdHMXHx1uVulL07Nmz1nmlFPfee2+jFK4tiPT42bP/6tgA2lrpyJAxR0IIIUTYqXdy9M0336C15uSTT+a9994jMTExdM7hcJCRkUHHjh0btZCtWUTABcoAglRWLQmgq5Ij01CgZIVsIYQQIpzUOzk68cQTAcjOziY9PV3GzPwKZyASADvF+ExrYHZQawxlSMuREEIIEYYaXDOvWbOGuXPnhp7PmjWLQYMGccEFF7B3795GKVxbYNdWl1qEUUylUTU+q2q2mmmaKEOSSyGEECKcNDg5uvnmm0ObsK5YsYJp06Zx+umnk52dzbRp0xqtgK2ZNxBAGdZgbJdt34a1Go1S1ow1SY6EEEKI8NLgRSCzs7Pp27cvAO+99x5nnHEGDz74IIsXL+b0009vtAK2ZqW+MrxVq2NH2suAeMAac2QYJqBQhow5EkIIIcJJg1uOHA4H5eXWdhhfffUVY8eOBSAxMTHUovRbV+GrwOeIB8Bh94WOKw1KGSgD2VtNCCGECDMNbjk67rjjmDZtGqNGjeKnn37irbfeAmD9+vV07ty50QrYmvm95XidGQDYbJVUp0c6aG08qwyjaiabEEIIIcJFg2vmZ555BpvNxrvvvsuzzz5Lp06dAPjss88YP358oxWwNQv4ykOrYyuHDh0PosEwq9aLkuRICCGECCcNbjlKT0/n448/rnV85syZR1SgtkT5PKExR9j3O641hjUiW6byCyGEEGHmiGrmTZs2cdddd3H++edTUFAAWC1Hq1atapTCtXY2bwW+quRIO/ZlR1qDYZjWjDVTBmQLIYQQ4aTBydF3331H//79WbhwIe+//z6lpaUALFu2jOnTpzdaAVszh1+hDatxLuhwhI5rrTFQKIWMORJCCCHCTINr5ttuu42//e1vZGVl4div4j/55JNZsGBBoxSutYvwW61Fhi7Ba4/e74yuWh1bSXIkhBBChJkG18wrVqzg7LPPrnU8OTmZ3bt3H1Gh2gpnwFoR20YxWu03vEsHMZRpTeOX7VeEEEKIsNLg5Cg+Pp7c3Nxax5csWRKaufZbZw9GAWCqklrnDENhGEqSIyGEECLMNDg5Ou+887j11lvJy8tDKUUwGGTu3LncdNNNXHLJJY1ZxlbLxOpKsxmlNU8EFRgKZZPB2EIIIUS4aXBy9OCDD9K7d2/S0tIoLS2lb9++nHDCCRx77LHcddddjVnGVkspa6aazV5xwAmN0obMVBNCCCHCUIPXOXI4HPzrX//i7rvvZsWKFZSWljJ48GB69OjRmOVrtQKBANqwkiOnw1/rvKEUhqxxJIQQQoSdBidH1dLS0khLS2uMsrQphYW78Vetjh0ZAcH9TyrQaGk5EkIIIcJQg5ouNmzYwHvvvUd2djYAn3zyCSeccAJHH300DzzwAFrrX7lC25eTsxVvVXLkcB2QBGkwlIFhHnFuKoQQQohGVu/a+YMPPuCPf/wjhmGglOL555/nqquu4qSTTiI2NpZ77rkHm83Grbfe2hTlbTV25e3E52gPgI6w1zqvpOVICCGECEv1bjl64IEHuOWWW/B4PDz77LNcffXVPPTQQ3z22Wd8/PHHzJo1i9mzZzdBUVsXd24+QdNaHDPgcNY6r5QBhiRHQgghRLipd3K0bt06pkyZglKKSZMm4fP5GDNmTOj82LFj2bp1a6MWsjXyFVgLYRqBciptrgPOKgzZV00IIYQIS/VOjsrKyoiJibFebBi4XC4iIyND510uF16vt/FK2EoFi63p+0bQXXuLEKUxlELJApBCCCFE2Kl3cqQOqNQPfC6qlFv/M3RxjcNaAxqUoVAylV8IIYQIO/UekK21pmfPnqGEqHp9o+o1e2SmmkX57BABihIgKnRc66A13kgZIMmREEIIEXbqnRy9/PLLTVGOtidQ1dWoSoEoRp39B6LjE/j0xecAhYG0HAkhhBDhqN7J0aRJk5qiHG2O0ta+atqsYNTZfyAuKZniXQVorVGAMiU5EkIIIcJRo6xCWFpaSjBYYw1oYmNjG+PSrVb6McNZuzLAsDMmhBKjuR+8iw4CSmEqJDkSQgghwlCDk6Ps7GyuvfZavv32WzweT+i41hqlFIFAoFEK2FodN+VYEn/MYeApaaHECAAdBEOhlCHJkRBCCBGGGpwcXXTRRWiteemll0hJSZEZawdYO28ng8d2oWRX0b7ECIAgCgPDajpqsfIJIYQQom4NTo6WLVvGokWL6NWrV2OWp80YcHIGxXmFxKYkMOrsP4QSpGDVZD5DpvILIYQQYanBtfPRRx/N9u3bG7MsbUpQB/ly9j/Zm5tLXFIyo87+A0DVmCMDU5koQ1rbhBBCiHDT4JajF154gauvvpqdO3dy1FFHYbfX3Fx1wIABR1y41sxXNQ5rzquvcOqlU0IJ0levvYKBwjANa70jIYQQQoSVBidHu3btYtOmTVx66aWhY0opGZBdh7kfvBta50gBKGvrFWVKciSEEEKEmwYnR1OmTGHw4MG88cYbMiD7MFSPOdJag1aYNlNWyBZCCCHCUINr561bt/L3v/+dESNG0KVLFzIyMmo8WkKXLl1Ce71VP2bMmFEjZvny5Rx//PFERESQlpbGww8/3KxlDGK1rBnKQCmzWd9bCCGEEL+uwS1HJ598MsuWLaN79+6NWZ4jdt9993HFFVeEnsfExIR+drvdjB07ljFjxvDcc8+xYsUKpkyZQnx8PFdeeWWzlE8HgxiYGDZTZqsJIYQQYajBydEZZ5zBDTfcwIoVK+jfv3+tAdlnnnnmEReuIWJiYkhNTa3z3GuvvYbP5+Oll17C4XDQr18/li5dyuOPP95syRFYK2MbSsYcCSGEEOFIaa11Q15oHKLVo6UGZHfp0gWPx4Pf7yc9PZ0LLriAG264AZvNygEvueQS3G43H374Yeg133zzDSeffDKFhYUkJCT86nu43W7i4uIoLi4+5BYpFWVlfPz0U6AgMn5fXElxEU7lZMTRQ+h4/PFg2g96DSGEEEI0jsOtv+EIWo4O3EstHFx33XUMGTKExMRE5s2bx+23305ubi6PP/44AHl5eWRmZtZ4TUpKSuhcXcmR1+vF6/WGnrvd7iMqo9KgTMNa40im8gshhBBhJ+xr59tuu63WIOsDH2vXrgVg2rRpnHTSSQwYMICrr76axx57jKeffrpGclNfDz30EHFxcaFHWlraEX0erYMYykTJ9iFCCCFEWGpwy9F99913yPN33313Qy9dw4033sjkyZMPGdO1a9c6j48YMYLKykq2bNlCr169SE1NJT8/v0ZM9fODjVO6/fbbmTZtWui52+0+ogRJo1GGwjAUyPIHQgghRNhpcHL0wQcf1Hju9/vJzs7GZrPRrVu3RkuOkpKSSEpKatBrly5dimEYJCcnAzBy5EjuvPNO/H5/aAB5VlYWvXr1Ouh4I6fTidPpbFjh66C1RqFQpkzjF0IIIcJRg5OjJUuW1DrmdruZPHkyZ5999hEVqiHmz5/PwoULGT16NDExMcyfP58bbriBiy66KJT4XHDBBdx7771cdtll3HrrraxcuZInn3ySmTNnNl9BNZiGIcmREEIIEaYanBzVJTY2lnvvvZczzjiDiy++uDEv/aucTidvvvkm99xzD16vl8zMTG644YYaXWJxcXF8+eWXTJ06laFDh9K+fXvuvvvuZp3Gr7UGpTAkORJCCCHCUqMmRwDFxcUUFxc39mV/1ZAhQ1iwYMGvxg0YMIAffvihGUp0MBpTyQKQQgghRLhqcHL01FNP1XiutSY3N5dXX32V00477YgL1mbpIIahMGyNnpcKIYQQohE0uIY+cJyOYRgkJSUxadIkbr/99iMuWFumDCUtR0IIIUSYanBylJ2d3Zjl+O0IgoECU1qOhBBCiHBU7+aLQCDA8uXLqaioqHWuoqKC5cuXh+Xq2WFDAYZGGTIgWwghhAhH9U6OXn31VaZMmYLD4ah1zm63M2XKFF5//fVGKVxbZSjpVhNCCCHCVb1r6BdffJGbbroJs46p6DabjVtuuYXnn3++UQrXJilQyGw1IYQQIlzVu4Zet24dxxxzzEHPH3300axZs+aICtWmaTAMwJCtQ4QQQohwVO/kqKys7JA705eUlFBeXn5EhWrTlLWnmrQcCSGEEOGp3jV0jx49mDdv3kHP//jjj/To0eOICtWmaY1hGJIcCSGEEGGq3jX0BRdcwF133cXy5ctrnVu2bBl33303F1xwQaMUri3SWFP5ZbaaEEIIEZ7qvdjODTfcwGeffcbQoUMZM2YMvXv3BmDt2rV89dVXjBo1ihtuuKHRC9omaAAli0AKIYQQYazeyZHdbufLL79k5syZvP7663z//fdorenZsycPPPAA119/PXa7vSnK2uppNGiFYSisBY+EEEIIEW4atEyz3W7nlltu4ZZbbvnV2DfeeIMzzzyTqKiohrxVm6K1RimFYSAtR0IIIUSYavIa+qqrriI/P7+p36ZVCFaNODIMEyVT+YUQQoiw1OTJkda6qd+i9dAapQFDBmQLIYQQ4Ur6dpqRDlrdajbDhjLlqxdCCCHCkdTQzUijQYFhKlkhWwghhAhTkhw1Jx3EGnNkoJR0qwkhhBDhSJKjZqS11WCkTNl4VgghhAhXTV5DZ2RkyLpHVXTQWgfSRKFMaTkSQgghwlGDk6NJkybx/fff/2rcypUrSUtLa+jbtClaBzBQGA4TlLQcCSGEEOGowTV0cXExY8aMoUePHjz44IPs3LmzMcvVRmk0CpthICtkCyGEEOGpwcnRhx9+yM6dO7nmmmt466236NKlC6eddhrvvvsufr+/McvYdmhQKEzTJi1HQgghRJg6oho6KSmJadOmsWzZMhYuXEj37t25+OKL6dixIzfccAMbNmxorHK2CUE0hqEwbQbIgGwhhBAiLDVKDZ2bm0tWVhZZWVmYpsnpp5/OihUr6Nu3LzNnzmyMt2gbgkFAYdplMLYQQggRrhqcHPn9ft577z1+97vfkZGRwTvvvMP1119PTk4Or7zyCl999RVvv/029913X2OWt1WzdlZTmPYG7fcrhBBCiGbQ4Fq6Q4cOBINBzj//fH766ScGDRpUK2b06NHEx8cfQfHamKBGyb5qQgghRFhrcHI0c+ZMzj33XCIiIg4aEx8fT3Z2dkPfou3RGqUMDNlXTQghhAhbDa6lzzzzTMrLy2sdLywsxO12H1Gh2iqtgxhKoUxZFFMIIYQIVw1Ojs477zzefPPNWsfffvttzjvvvCMqVFulwdpXTVqOhBBCiLDV4Fp64cKFjB49utbxk046iYULFx5RodoqrTUKBbJ1iBBCCBG2Gpwceb1eKisrax33+/1UVFQcUaHaKmvjWQOlJDkSQgghwlWDk6Phw4fz/PPP1zr+3HPPMXTo0CMqVJulNYaBdKsJIYQQYazBs9X+9re/MWbMGJYtW8Ypp5wCwJw5c/j555/58ssvG62AbUsQw2aiZHVsIYQQImw1uJYeNWoU8+fPJy0tjbfffpv//e9/dO/eneXLl3P88cc3Zhnbjqq91WTrECGEECJ8HdFSzYMGDeK1115rrLK0fVpjGoa0HAkhhBBh7IiSo2AwyMaNGykoKCAYDNY4d8IJJxxRwdomhTIVSqmWLogQQgghDqLBydGCBQu44IIL2Lp1K1rrGueUUgQCgSMuXFujtUYp2T5ECCGECGcN7t+5+uqrGTZsGCtXrqSwsJC9e/eGHoWFhY1ZRgAeeOABjj32WCIjIw+6X9u2bduYMGECkZGRJCcnc/PNN9dabuDbb79lyJAhOJ1OunfvzuzZsxu9rAenqvZWk241IYQQIlw1uOVow4YNvPvuu3Tv3r0xy3NQPp+Pc889l5EjR/Liiy/WOh8IBJgwYQKpqanMmzeP3NxcLrnkEux2Ow8++CAA2dnZTJgwgauvvprXXnuNOXPmcPnll9OhQwfGjRvX9B9CKWv7EEmOhBBCiLDV4ORoxIgRbNy4sdmSo3vvvRfgoC09X375JatXr+arr74iJSWFQYMGcf/993Prrbdyzz334HA4eO6558jMzOSxxx4DoE+fPvz444/MnDmzeZIjrVEGWP8RQgghRDhqcHL05z//mRtvvJG8vDz69++P3V5zM9UBAwYcceHqY/78+fTv35+UlJTQsXHjxnHNNdewatUqBg8ezPz58xkzZkyN140bN47rr7/+oNf1er14vd7Q8yPbVFdhKBNlyIBsIYQQIlw1ODk655xzAJgyZUromFIqNOi4uQdk5+Xl1UiMgNDzvLy8Q8a43W4qKipwuVy1rvvQQw+FWq2OmAbDJt1qQgghRDhrcC2dnZ1d67F58+bQ/w/HbbfdZs3eOsRj7dq1DS1io7j99tspLi4OPbZv335E11OYsn2IEEIIEcYa3HKUkZFxxG9+4403Mnny5EPGdO3a9bCulZqayk8//VTjWH5+fuhc9f+rj+0fExsbW2erEYDT6cTpdB5WGQ5Fa1C6anFsaTkSQgghwtYRLQL56quv8txzz5Gdnc38+fPJyMjgiSeeIDMzk7POOutXX5+UlERSUtKRFCFk5MiRPPDAAxQUFJCcnAxAVlYWsbGx9O3bNxTz6aef1nhdVlYWI0eObJQyHJpGo1CmTdY5EkIIIcJYg5swnn32WaZNm8bpp59OUVFRaIxRfHw8TzzxRGOVL2Tbtm0sXbqUbdu2EQgEWLp0KUuXLqW0tBSAsWPH0rdvXy6++GKWLVvGF198wV133cXUqVNDLT9XX301mzdv5pZbbmHt2rX84x//4O233+aGG25o9PIeSOsgSilMs2p/NSGEEEKEpQYnR08//TT/+te/uPPOOzHNfS0hw4YNY8WKFY1SuP3dfffdDB48mOnTp1NaWsrgwYMZPHgwv/zyCwCmafLxxx9jmiYjR47koosu4pJLLuG+++4LXSMzM5NPPvmErKwsBg4cyGOPPcYLL7zQLNP4g4ChFYZhQ5nSciSEEEKEqwZ3q2VnZzN48OBax51OJ2VlZUdUqLrMnj37V1ezzsjIqNVtdqCTTjqJJUuWNGLJDpPWoKzZarLOkRBCCBG+GlxLZ2ZmsnTp0lrHP//8c/r06XMkZWqTdFADClNJciSEEEKEswa3HE2bNo2pU6fi8XjQWvPTTz/xxhtv8NBDD/HCCy80ZhnbBE0QAMNuk+RICCGECGMNTo4uv/xyXC4Xd911F+Xl5VxwwQV07NiRJ598kvPOO68xy9g2aI3CwDQMmcovhBBChLEjmsp/4YUXcuGFF1JeXk5paWloCr2oLaitBiPTdkRfuRBCCCGaWKPU1JGRkURGRjbGpdquoDUg27RLciSEEEKEs3rV1EOGDGHOnDkkJCQwePBglDr4ej2LFy8+4sK1JVoHQRvY7DKNXwghhAhn9UqOzjrrrNCCihMnTmyK8rRhGgCbaW/hcgghhBDiUOqVHE2fPr3On8Wv01pjoDDtkhwJIYQQ4azB06Z+/vlnFi5cWOv4woULQ6tWi300VYtAmjLmSAghhAhnDU6Opk6dyvbt22sd37lzJ1OnTj2iQrVJQY2hwJCWIyGEECKsNTg5Wr16NUOGDKl1fPDgwaxevfqICtUWaa1RysCwSXIkhBBChLMGJ0dOp5P8/Pxax3Nzc7HJWj61aA2GAmXKApBCCCFEOGtwTT127Fhuv/12iouLQ8eKioq44447OPXUUxulcG2KtlaBPNTyB0IIIYRoeQ1u4nn00Uc54YQTyMjIYPDgwQAsXbqUlJQUXn311UYrYJuhg7J1iBBCCNEKNDg56tSpE8uXL+e1115j2bJluFwuLr30Us4//3zsMui4liCglIGS5EgIIYQIa0c0OCgqKoorr7yyscrStmmNMpUkR0IIIUSYq1dy9NFHH3Haaadht9v56KOPDhl75plnHlHB2ppgUGMaBsqQ7UOEEEKIcFav5GjixInk5eWRnJx8yO1DlFIEAoEjLVvboqlKjmRAthBCCBHO6pUcBYPBOn8Wh0FrDEO61YQQQohwV6+aOjExkd27dwMwZcoUSkpKmqRQbZOqWuhIkiMhhBAinNWrpvb5fLjdbgBeeeUVPB5PkxSqTQpqTFNmqwkhhBDhrl7daiNHjmTixIkMHToUrTXXXXcdLperztiXXnqpUQrYlihJjoQQQoiwV6/k6D//+Q8zZ85k06ZNABQXF0vrUT2YSgZkCyGEEOGuXslRSkoKM2bMACAzM5NXX32Vdu3aNUnB2pygBlPJCtlCCCFEmGvwgOzRo0fjcDiapFBtkVbWTDVZ50gIIYQIbzIguxkZhoGS2WpCCCFEWJMB2c1FKwxloExpORJCCCHCWYMHZCulZEB2PSgdxLQZss6REEIIEeZkQHZz0IAyMAwFSmarCSGEEOGs3s0Yp59+OsXFxWRnZ9OuXTtmzJhBUVFR6PyePXvo27dvY5ax1dNolAbTNKXlSAghhAhz9a6pP//8c7xeb+j5gw8+SGFhYeh5ZWUl69ata5zStREaQCmUKduHCCGEEOHuiGtqrXVjlKNN0zqI0mAzTelWE0IIIcKcNGM0Fw3KVq8hXkIIIYRoAfVOjpRSqANaPw58LmrSWoMBpl2SIyGEECLc1bu21lozefJknE4nAB6Ph6uvvpqoqCiAGuORhCUY1ChlWAOyhRBCCBHW6p0cTZo0qcbziy66qFbMJZdc0vAStUlB0GCz21u6IEIIIY5AIBDA7/e3dDHEQTgcDoxG2MO03snRyy+/fMRv+lujtNVyJGOOhBCiddJak5eXV2PpGhF+DMMgMzPziPd+ldq6GQQ0gMZmk5YjIYRojaoTo+TkZCIjI2WsbRgKBoPk5OSQm5tLenr6Ed2jVpMcPfDAA3zyyScsXboUh8NRZ/Ze1xfxxhtvcN5554Wef/vtt0ybNo1Vq1aRlpbGXXfdxeTJk5uw5EBQoxQYZqv5uoUQQlQJBAKhxEh2hQhvSUlJ5OTkUFlZif0IhrK0mqn8Pp+Pc889l2uuueaQcS+//DK5ubmhx8SJE0PnsrOzmTBhAqNHj2bp0qVcf/31XH755XzxxRdNWvagDqAA035kzXxCCCGaX/UYo8jIyBYuifg11d1pgUDgiK7Tapoy7r33XgBmz559yLj4+HhSU1PrPPfcc8+RmZnJY489BkCfPn348ccfmTlzJuPGjWvU8u5PARgGprQcCSFEqyVdaeGvse5Rq2k5OlxTp06lffv2DB8+nJdeeqnGCt7z589nzJgxNeLHjRvH/PnzD3o9r9eL2+2u8agvrTVaa0yZrSaEEOI34KSTTuL6669vkmt36dKFJ554okmuXa1NJUf33Xcfb7/9NllZWZxzzjn83//9H08//XTofF5eHikpKTVek5KSgtvtpqKios5rPvTQQ8TFxYUeaWlp9S6XBgxlYhjyrw4hhBDNZ/LkySiluPrqq2udmzp1Kkqpph932wq1aHJ02223hVbcPthj7dq1h329v/71r4waNYrBgwdz6623csstt/DII48cURlvv/12iouLQ4/t27fX+xrBQNAakC0rZAshhGhmaWlpvPnmmzUaATweD6+//jrp6ekNvq7WmsrKyga91ufzNfh9m0OLJkc33ngja9asOeSja9euDb7+iBEj2LFjR2jV7tTUVPLz82vE5OfnExsbi8vlqvMaTqeT2NjYGo/60lpjGApT1jkSQgjRzIYMGUJaWhrvv/9+6Nj7779Peno6gwcPDh3zer1cd911JCcnExERwXHHHcfPP/8cOv/tt9+ilOKzzz5j6NChOJ1OfvzxR8rKyrjkkkuIjo6mQ4cOoXG9++vSpQv3338/l1xyCbGxsVx55ZUA/Pjjjxx//PG4XC7S0tK47rrrKCsrC72uoKCAM844A5fLRWZmJq+99lpTfEW1tGhtnZSURFJSUpNdf+nSpSQkJIS2Ohk5ciSffvppjZisrCxGjhzZZGUAQGuUoVCNsGqnEEKIlqW1psJfv9lQhlI4bQbeyiBBrWs9P1wuu9mgQcdTpkzh5Zdf5sILLwTgpZde4tJLL+Xbb78Nxdxyyy289957vPLKK2RkZPDwww8zbtw4Nm7cSGJiYijutttu49FHH6Vr164kJCRw880389133/Hf//6X5ORk7rjjDhYvXsygQYNqlOHRRx/l7rvvZvr06QBs2rSJ8ePH87e//Y2XXnqJXbt2ce2113LttdeGFpyePHkyOTk5fPPNN9jtdq677joKCgrq/fnrq9U0ZWzbto3CwkK2bdtGIBBg6dKlAHTv3p3o6Gj+97//kZ+fzzHHHENERARZWVk8+OCD3HTTTaFrXH311TzzzDPccsstTJkyha+//pq3336bTz75pMnLbyhJjoQQoi2o8Afoe3f9l4A5vkd7nj5/MG/9vJ0/HZ3GFf/+hR827K7XNVbfN45IR/2r7osuuojbb7+drVu3AjB37lzefPPNUHJUVlbGs88+y+zZsznttNMA+Ne//kVWVhYvvvgiN998c+ha9913H6eeeioApaWlvPjii/znP//hlFNOAeCVV16hc+fOtcpw8sknc+ONN4aeX3755Vx44YWhgds9evTgqaee4sQTT+TZZ59l27ZtfPbZZ/z0008cffTRALz44ov06dOn3p+/vlpNcnT33XfzyiuvhJ5XNwV+8803nHTSSdjtdmbNmsUNN9yA1pru3bvz+OOPc8UVV4Rek5mZySeffMINN9zAk08+SefOnXnhhReadBo/gA5oTLsBMg1UCCF+s37YsJu3ft7OVSd245/fbap3YnQkkpKSmDBhArNnz0ZrzYQJE2jfvn3o/KZNm/D7/YwaNSp0zG63M3z4cNasWVPjWsOGDavxOp/Px4gRI0LHEhMT6dWrV60y7P86gGXLlrF8+fIaXWVaa4LBINnZ2axfvx6bzcbQoUND53v37k18fHz9v4B6ajXJ0ezZsw+5xtH48eMZP378r17npJNOYsmSJY1Ysl+nwepWU9JyJIQQrZ3LbrL6vvr/o7q6K80fCHLlCV2ZdGyXenWpVb93Q02ZMoVrr70WgFmzZjX4OlFRUY3yutLSUq666iquu+66WrHp6emsX7++Qe/TGFpNctSqaY0yTelWE0KINkAp1aCurWp20+pFiDiCRKchxo8fj8/n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oH/AACrKyvj46afwerw4DZNTLz6P+MwezVhSIYQQjcHj8ZCdnU1mZmazz5pqjcrKyujUqROPPfbYIVudmsKh7tXh1t8g3WpNT2uUoWT7ECGEEG3SkiVLWLt2LcOHD6e4uJj77rsPgLPOOquFS9Zwkhw1MatZTmHazF+JFEIIIVqnRx99lHXr1uFwOBg6dCg//PBDjaUCWhtJjpqatgZ2KVnnSAghRBs0ePBgFi1a1NLFaFQySrgZKENh2iU5EkIIIVoDSY6amg5iGAamKV+1EEII0RpIjd3EtMZatMuQMUdCCCFEayDJURPTQTBMA2XIVy2EEEK0BlJjNzmNYZqSHAkhhBCthNTYTUxrrGXUpVtNCCGEaBUkOWpiSlvdatDwzQKFEEII0XwkOWpqGkybAUq+aiGEEM1r8uTJKKVQSmG328nMzOSWW27B4/GEYqrPK6WIioqiR48eTJ48udbaRd9++y1KKYqKikLHcnJy6N+/PyeccALFxcU1YvZ/77oeXbp0aaZvof6kxm5qumr3Y0mOhBBCtIDx48eTm5vL5s2bmTlzJv/85z+ZPn16jZiXX36Z3NxcVq1axaxZsygtLWXEiBH8+9//Puh1N23axHHHHUdGRgZffPEFcXFxNc4/+eST5Obmhh77v09ubi4///xz43/YRtIqauwtW7Zw2WWXkZmZicvlolu3bkyfPh2fz1cjbvny5Rx//PFERESQlpbGww8/XOta77zzDr179yYiIoL+/fvz6aefNmnZFWCYSpIjIYQQLcLpdJKamkpaWhoTJ05kzJgxZGVl1YiJj48nNTWVLl26MHbsWN59910uvPBCrr32Wvbu3VvrmsuXL+e4445j5MiRfPjhh7hcrloxcXFxpKamhh77v09qaipJSUlN84EbQauosdeuXUswGOSf//wnq1atYubMmTz33HPccccdoRi3283YsWPJyMhg0aJFPPLII9xzzz08//zzoZh58+Zx/vnnc9lll7FkyRImTpzIxIkTWblyZdMVXoMyDZDZakII0SZorSn3l9fr4an0oLXGU+mp8/nhPrTWR1T2lStXMm/ePBwOx6/G3nDDDZSUlNRKpObNm8eJJ57IOeecw3/+8x9sbXB7rFbxicaPH8/48eNDz7t27cq6det49tlnefTRRwF47bXX8Pl8vPTSSzgcDvr168fSpUt5/PHHufLK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HxMdHU1lZSVerxfDMHjmmWcA6NSpEzfddFMo9s9//jNffPEFb7/9NsOHDw8dHzBgANOnTwegR48ePPPMM8yZM4dTTz2Vr776irVr1/LFF1/QsWNHAB588EFOO+200Otff/11PB4P//73v4mKigLgmWee4YwzzuDvf/87KSkpACQmJvLUU09hGAa9evXi4Ycfpry8nDvuuAOA22+/nRkzZvDjjz9y3nnn1et7qA9JjppQnC0em93R0sUQQggRBravKWTN3BwGj81gyZdb650YNdTo0aN59tlnKSsrY+bMmdhsNs455xwAAoEADz74IG+//TY7d+7E5/Ph9XqJjIyscY0BAwbUeN6hQwcKCgoAWLNmDWlpaaHECGDkyJE14tesWcPAgQNDiRHAqFGjCAaDrFu3LpQc9evXD8PY16mVkpLCUUcdFXpumibt2rULvXdTkeSoKRkGSsYcCSFEm2JzGFz55In1fp1SYNoNApVBBp2aTv+TOlPfXjKbo/6jYaKioujevTsAL730EgMHDuTFF1/ksssu45FHHuHJJ5/kiSeeoH///kRFRXH99dfj8/lqXMNutx/wWRTBYLDeZfk1db1Pc733/iQ5akqGIYtACiFEG6OUqnfX1v5MmwLA5mj++sEwDO644w6mTZvGBRdcwNy5cznrrLO46KKLAGv80Pr16+nbt+9hX7NPnz5s376d3NxcOnToAMCCBQtqxcyePZuysrJQ69HcuXND3WfhRgZkNxXDwDRNlGn/9VghhBCimZx77rmYpsmsWbPo0aMHWVlZzJs3jzVr1nDVVVeRn59fr+uNGTOGnj17MmnSJJYtW8YPP/zAnXfeWSPmwgsvJCIigkmTJrFy5Uq++eYb/vznP3PxxReHutTCSatIjrZs2cJll11GZmYmLpeLbt26MX369BrNflu2bAktdLX/48Ds9Z133qF3795ERETQv39/Pv300yYps2mzYRw1kogO6U1yfSGEEKIhbDYb1157LQ8//DA33ngjQ4YMYdy4cZx00kmkpqYyceLEel3PMAw++OADKioqGD58OJdffjkPPPBAjZjIyEi++OILCgsLOfroo/nDH/7AKaecEhoYHm6UPtJ5gc3g888/56233uL888+ne/furFy5kiuuuIKLL76YRx99FLCSo8zMTL766iv69esXem27du1C/ZXz5s3jhBNO4KGH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", + "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(f\"./img/{exp_dataset_name}_simulation_{N_MC_ITERATIONS}MC_{N_DOE_ITERATIONS}exp_{BATCH_SIZE}batch_first25.png\")" + ] + }, + { + "cell_type": "code", + "execution_count": 40, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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+NTg4OiVV1457A/93QlqDMBwNPhyCyGECANaa/Ly8mpNXSPCj2EYdO/e/bDXfpWndQsIao3GwFRyuYUQoi2qDoxSU1OJioqSXNswFAwGyc3NZffu3XTp0uWw7pE8rVtC1WwHplO61YQQoq0JBAKhwEhWhQhvKSkp5ObmUllZid3e+GeujC1vEUEMpbCZEhwJIURbU51jFBUV1co1Eb+lujstEAgc1nkkOGoJWlvzHJkyWk0IIdoq6UoLf011j9pMcHT//fdz9NFHExUVRUJCQr1lqudgqvl68803a5X59ttvGT58OE6nk169ejFnzpxmr3tAa5QCuyRkCyGE+B044YQTuPHGG5vl3N26deOJJ55olnNXazPBkc/n47zzzuO66647aLlXXnmF3bt3h15nn312aF9OTg6TJk3ixBNPZMWKFdx4441ceeWVfPHFF81b+argSBkSHAkhhGg5U6ZMQSnFtddeW2fftGnTUEoxZcqUlq9YmGszT+t77rkH4DdbehISEkhPT6933/PPP0/37t159NFHAejfvz8//vgjjz/+OBMmTGjS+taktUYrA1PmORJCCNHCMjMzefPNN3n88ceJjIwErAmc33jjDbp06dLo82qtCQQC2GwNDyV8Pt9hD7dvTm2m5ehQTZs2jeTkZEaNGsXLL79ca2HchQsXMm7cuFrlJ0yYwMKFCw94Pq/Xi8vlqvVqMK0xlUJJzpEQQogWNnz4cDIzM5k7d25o29y5c+nSpQvDhg0LbfN6vdxwww2kpqYSERHBMcccw+LFi0P7v/32W5RSfPbZZ4wYMQKn08mPP/6I2+3msssuIyYmho4dO4YaIGrq1q0b9913H5dddhlxcXFcffXVAPz4448ce+yxREZGkpmZyQ033IDb7Q4dV1BQwBlnnEFkZCTdu3fn9ddfb45LVEe7Co7uvfde3n77bbKysjj33HP5f//v//H000+H9ufl5ZGWllbrmLS0NFwuFxUVFfWec+bMmcTHx4demZmZDa6XrkrIVk0wa6cQQojWpbWm3FfZoJfHH0BrjccfqPf9ob5q/sLfEFOnTq01ifPLL7/M5ZdfXqvMjBkzeO+993j11VdZtmwZvXr1YsKECRQWFtYqd9tttzFr1iyys7MZPHgwt956K9999x3/+9//+PLLL/n2229ZtmxZnTo88sgjDBkyhOXLl/P3v/+dzZs3M3HiRM4991xWrVrFW2+9xY8//sj1118fOmbKlCns2LGDb775hnfffZdnn32WgoKCRl2DhmjVbrXbbruNBx988KBlsrOz6dev3yGd7+9//3vo52HDhuF2u3n44Ye54YYbGl3H22+/nenTp4feu1yuBgdISoOhDAmOhBCiHajwBxhwV8NzVY/tnczTFw7jrcU7OP/ITK769xJ+2Li3Qef45d4JRDVicM8ll1zC7bffzrZt2wCYP38+b775Jt9++y0Abreb5557jjlz5nDqqacC8K9//YusrCxeeuklbr311tC57r33Xk455RQAysrKeOmll/jPf/7DySefDMCrr75K586d69ThpJNO4uabbw69v/LKK7n44otDidu9e/fmqaee4vjjj+e5555j+/btfPbZZ/z8888ceeSRALz00kv079+/wd+/oVo1OLr55pt/MxGsR48ejT7/6NGjue+++/B6vTidTtLT08nPz69VJj8/n7i4uFA/7K85nc7QIruNFQxqDJsER0II8Xv2w8a9vLV4B9cc35N/fre5wYHR4UhJSWHSpEnMmTMHrTWTJk0iOTk5tH/z5s34/X7Gjh0b2ma32xk1ahTZ2dm1zjVy5Mhax/l8PkaPHh3alpSURN++fevUoeZxACtXrmTVqlW1usq01gSDQXJyctiwYQM2m40RI0aE9vfr1++AI9abUqsGRykpKaSkpDTb+VesWEFiYmIouBkzZgyffvpprTJZWVmMGTOm2eoAECSAYYAyZI4MIYRo6yLtJr/c2/BBPIZSOG0G/kCQq4/rweSjuxFsYDdZpL3xuatTp04NdVnNnj270eeJjo5ukuPKysq45ppr6u3d6dKlCxs2bGjU5zSFNjNabfv27RQWFrJ9+3YCgQArVqwAoFevXsTExPDRRx+Rn5/PUUcdRUREBFlZWTzwwAPccsstoXNce+21PPPMM8yYMYOpU6fy9ddf8/bbb/PJJ580b+WDVcnYShKyhRCirVNKNaprq5rdtH5RjjiMQKcxJk6ciM/nQylVZ4R2z549cTgczJ8/n65duwLWzOCLFy8+6HxFPXv2xG63s2jRotDIt6KiIjZs2MDxxx9/0PoMHz6cX375hV69etW7v1+/flRWVrJ06dJQt9r69etbZPHfNhMc3XXXXbz66quh99UZ9t988w0nnHACdrud2bNnc9NNN6G1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M9ZeYUq+kRBCtBuRtkgWXbSowccZysBpOvEH/EwZOIUL+11IUAcb/NkNFR0dTa9evQB4+eWXGTJkCC+99BJXXHHFQY/Lzs4GoHv37rW2//Of/2TGjBmceuqpfPrppxx33HENrlO4axPB0bp16wgGg/zzn/+kV69erFmzhquuugq3280jjzwCgMvlYvz48YwbN47nn3+e1atXM3XqVBISErj66qsBq5/0wgsvZObMmZx++um88cYbnH322SxbtowjjjiieSqvFYa0HAkhRLuhlGpw11ZNdtMOQIQtoqmqdMgMw+Bvf/sb06dP56KLLiIy8sDB1hNPPEFcXBzjxo2rtV0pxQsvvIBhGJx22ml88sknHH/88c1d9RbVJrrVJk6cyCuvvML48ePp0aMHZ555Jrfccgtz584NlXn99dfx+Xy8/PLLDBw4kAsuuIAbbriBxx57LFTmySefZOLEidx6663079+f++67j+HDhzdrv6lhgM1oEzGoEEKI34HzzjsP0zSZPXt2aFtxcTF5eXls27aNrKws/vjHP/LGG2/w3HPPkZCQUOccSimef/55LrvsMk477TS+/fbblvsCLaBNBEf1KSkpISkpKfR+4cKFHHfccbW62SZMmMD69espKioKlfl1BDxhwgQWLjxwv6/X68XlctV6NYwCW5u9zEIIIdoZm83G9ddfz0MPPYTb7Qbg8ssvp2PHjvTr14/rrruOmJgYfv75Zy666KIDnkcpxezZs7n88suZNGkS33zzTUt9hWbXJps0Nm3axNNPPx3qUgPIy8ur0y+alpYW2peYmEheXl5oW80yeXl5B/ysmTNncs899zS6rkqBzWZv9PFCCCFEY82ZM6fe7bfddhu33XYbwCFPD3DCCSfUKauU4plnnqnVA3Og8x3uNAQtqVWbNG677baDTi2ulGLdunW1jtm1axcTJ07kvPPO46qrrmr2Ot5+++2UlJSEXjt27GjwOWS0mhBCCNF2tGrL0c0338yUKVMOWqZHjx6hn3NzcznxxBM5+uijeeGFF2qVS09PJz8/v9a26vfVs3EeqMzBZut0Op04nc7f/C4HpMBshxNkCSGEEO1Vqz61U1JSSElJOaSyu3bt4sQTT2TEiBG88sorGL9aq2zMmDHccccd+P1+7HarGysrK4u+ffuGpj0fM2YM8+bN48Ybbwwdl5WVxZgxY5rmC9VHgSFD+YUQQog2o01kCu/atYsTTjiBLl268Mgjj7Bnzx7y8vJq5QpddNFFOBwOrrjiCtauXctbb73Fk08+yfTp00Nl/vKXv/D555/z6KOPsm7dOv7xj3+wZMkSrr/++uarvDIwZLSaEEII0Wa0iad2VlYWmzZtYtOmTXTu3LnWvuoEr/j4eL788kumTZvGiBEjSE5O5q677grNcQRw9NFH88Ybb3DnnXfyt7/9jd69e/PBBx803xxHUNWtJi1HQgghRFvRJoKjKVOm/GZuEsDgwYN/czrz8847j/POO6+JavbbDAWG2SYa6IQQQghBG+lWa8u0MjBlKL8QQgjRZkhw1MwMpWW0mhBCCNGGSHDU3AyFIcGREEII0WZIcNTMFGAzJTgSQggh2goJjpqbUjJDthBCiFazY8cOpk6dSkZGBg6Hg65du/KXv/yFffv2hcqccMIJteYArDZnzpxaC8/OmTOn3tUsIiIiWuCbtBxp0mhuysBmSkK2EEKIlrdlyxbGjBlDnz59+O9//0v37t1Zu3Ytt956K5999hk//fRTrUXcD0VcXBzr16+vtU0p1ZTVbnUSHDUzw5DlQ4QQQrSOadOm4XA4+PLLL4mMjASgS5cuDBs2jJ49e3LHHXfw3HPPNeicSqmDLrvVHshTu5lpFHaHtBwJIUR7obVGV1Q07CDDQDmdaK8XgsG67w+Riow85FaawsJCvvjiC+6///5QYFQtPT2diy++mLfeeotnn322QV/l90CCo2ZmGApDutWEEKLd0BUVrB8+osHHRY89mk6PPkrxe++RcO657Jw2Dff8BQ06R99lS1FRUYdUduPGjWit6d+/f737+/fvT1FREXv27AHg2Wef5cUXX6xVprKysk4+UUlJCTExMbW2HXvssXz22WeH+jXCngRHzUwZMs+REEIIcM9fQPF779HhiivY99JLDQ6MGqt6ma3fcvHFF3PHHXfU2jZ37lweeOCBWttiY2NZtmxZrW2/bplq6+Sp3dyUiZLgSAgh2g0VGUnfZUsbfmB1V5rfT9LUqSRefHGDutSqP/tQ9erVC6UU2dnZnHPOOXX2Z2dnk5iYSEpKCmCtUdqrV69aZVJTU+v5Gkadcu2NPLWbmWEolMxzJIQQ7YZS6pC7tuplt1ItVDMPf+/QoQOnnHIKzz77LDfddFOt1p28vDxef/11LrvssnY30qwpyDxHzUwpA8OUeY6EEEK0vGeeeQav18uECRP4/vvv2bFjB59//jmnnHIKnTp14v7772/wObXW5OXl1XkFG9gKFs4kOGpmyjBQEhwJIYRoBb1792bJkiX06NGDP/3pT/Ts2ZOrr76aE088kYULFzZ4jiMAl8tFx44d67wKCgqa4Ru0DqUPNVNLANZfivj4eEpKSoiLiztguQq3m4+fforIqAhOv+GmFqyhEEKIpuTxeMjJyaF79+7tbibo9uZg9+pQn98gLUfNTtZVE0IIIdoWCY6amayrJoQQQrQtEhw1M9Mul1gIIYRoS+TJ3cwM6VYTQggh2hQJjpqZ5BwJIYQQbYsER81M2WVdNSGEEKItkeComdkckpAthBBCtCUSHDUjQymU6WjtagghhBCiASQ4ak6GwrTJJRZCCCHaEnlyNyOlAEO61YQQQvz+KKX44IMPWrsajSLBUbNS2Ey5xEIIIVrHlClTUEqhlMJut9O9e3dmzJiBx+Np7aqFNRln3oyUqWTRWSGEEK1q4sSJvPLKK/j9fpYuXcrkyZNRSvHggw+2dtXCljRrNCOlFKZN4k8hhBCtx+l0kp6eTmZmJmeffTbjxo0jKysLgH379nHhhRfSqVMnoqKiGDRoEP/9739rHX/CCSdwww03MGPGDJKSkkhPT+cf//hHrTIbN27kuOOOIyIiggEDBoTOX9Pq1as56aSTiIyMpEOHDlx99dWUlZWF9k+ZMoWzzz6bBx54gLS0NBISErj33nuprKzk1ltvJSkpic6dO/PKK680/UX6FQmOmpFCgXSrCSFEu6K1xu8NNOhV6QugtabSV//7Q31prQ+r7mvWrGHBggU4HNZIao/Hw4gRI/jkk09Ys2YNV199NZdeeik///xzreNeffVVoqOjWbRoEQ899BD33ntvKAAKBoP84Q9/wOFwsGjRIp5//nn++te/1jre7XYzYcIEEhMTWbx4Me+88w5fffUV119/fa1yX3/9Nbm5uXz//fc89thj3H333Zx++ukkJiayaNEirr32Wq655hp27tx5WNfht0izRnOyGdgMmQRSCCHak0pfkBf+8l2Dj8vsn8T4KweSPT+X/mMz+PS51ezILmzQOa5+8njszoala3z88cfExMRQWVmJ1+vFMAyeeeYZADp16sQtt9wSKvvnP/+ZL774grfffptRo0aFtg8ePJi7774bgN69e/PMM88wb948TjnlFL766ivWrVvHF198QUZGBgAPPPAAp556auj4N954A4/Hw7///W+io6MBeOaZZzjjjDN48MEHSUtLAyApKYmnnnoKwzDo27cvDz30EOXl5fztb38D4Pbbb2fWrFn8+OOPXHDBBQ26Dg0hwVEzUYDCwJScIyGEEMCO7EKy5+cybHxXln+5rcGBUWOdeOKJPPfcc7jdbh5//HFsNhvnnnsuAIFAgAceeIC3336bXbt24fP58Hq9REVF1TrH4MGDa73v2LEjBQUFAGRnZ5OZmRkKjADGjBlTq3x2djZDhgwJBUYAY8eOJRgMsn79+lBwNHDgQAxjf49LWloaRxxxROi9aZp06NAh9NnNRYKjZmIaivgoOzFRMgmkEEK0JzaHwdVPHt/g45QC024QqAwy9JQuDDqhMw3tJbM5Gp6qER0dTa9evQB4+eWXGTJkCC+99BJXXHEFDz/8ME8++SRPPPEEgwYNIjo6mhtvvBGfz1frHPZfLYWllCIYDDa4Lr+lvs9pqc+uSYKjZmLYbCR0cBAZH9faVRFCCNGElFIN7tqqybQpoHWWlzIMg7/97W9Mnz6diy66iPnz53PWWWdxySWXAFb+0IYNGxgwYMAhn7N///7s2LGD3bt307FjRwB++umnOmXmzJmD2+0OtR7Nnz8/1H0WbiRbuJkYhkn3biOIjUlp7aoIIYQQIeeddx6maTJ79mx69+5NVlYWCxYsIDs7m2uuuYb8/PwGnW/cuHH06dOHyZMns3LlSn744QfuuOOOWmUuvvhiIiIimDx5MmvWrOGbb77hz3/+M5deemmoSy2cSHDUXAwDZ3QsRkREa9dECCGECLHZbFx//fU89NBD3HzzzQwfPpwJEyZwwgknkJ6eztlnn92g8xmGwfvvv09FRQWjRo3iyiuv5P77769VJioqii+++ILCwkKOPPJI/vjHP3LyySeHEsPDjdKHOy7wd8blchEfH09JSQlxcdJlJoQQ7Z3H4yEnJ4fu3bsTIb/whrWD3auGPL+l5UgIIYQQogYJjoQQQgghamgTwdHWrVu54oor6N69O5GRkfTs2ZO777671lDDrVu3hhbXq/n6dcb8O++8Q79+/YiIiGDQoEF8+umnLf11hBBCCBHG2sRQ/nXr1hEMBvnnP/9Jr169WLNmDVdddRVut5tHHnmkVtmvvvqKgQMHht536NAh9POCBQu48MILmTlzJqeffjpvvPEGZ599NsuWLas1yZQQQgghfr/abEL2ww8/zHPPPceWLVsAq+Woe/fuLF++nKFDh9Z7zPnnn4/b7ebjjz8ObTvqqKMYOnQozz///CF9riRkCyHE74skZLcdv/uE7JKSEpKSkupsP/PMM0lNTeWYY47hww8/rLVv4cKFjBs3rta2CRMmsHDhwmatqxBCiLavjbYl/K401T1qE91qv7Zp0yaefvrpWl1qMTExPProo4wdOxbDMHjvvfc4++yz+eCDDzjzzDMByMvLqzPZVFpaGnl5eQf8LK/Xi9frDb13uVxN/G2EEEKEs+rlK8rLy4mMjGzl2oiDqc5FPtx1TVs1OLrtttt48MEHD1omOzubfv36hd7v2rWLiRMnct5553HVVVeFticnJzN9+vTQ+yOPPJLc3FwefvjhUHDUGDNnzuSee+5p9PFCCCHaNtM0SUhICC12GhUVhVKqlWslfi0YDLJnzx6ioqKw2Q4vvGnV4Ojmm29mypQpBy3To0eP0M+5ubmceOKJHH300bzwwgu/ef7Ro0eTlZUVep+enl5nWvT8/HzS09MPeI7bb7+9VtDlcrnIzMz8zc8WQgjRflQ/J5p7NXhxeAzDoEuXLocdvLZqcJSSkkJKyqGtPbZr1y5OPPFERowYwSuvvIJh/Ha61IoVK0KL4AGMGTOGefPmceONN4a2ZWVlMWbMmAOew+l04nQ6D6mOQggh2ielFB07diQ1NRW/39/a1REH4HA4Dik++C1tIudo165dnHDCCXTt2pVHHnmEPXv2hPZVR/OvvvoqDoeDYcOGATB37lxefvllXnzxxVDZv/zlLxx//PE8+uijTJo0iTfffJMlS5YcUiuUEEIIYZrmYeeziPDXJoKjrKwsNm3axKZNm+jcuXOtfTUz0++77z62bduGzWajX79+vPXWW/zxj38M7T/66KN54403uPPOO/nb3/5G7969+eCDD2SOIyGEEEKEtNl5jlqLzHMkhBBCtD2/i3mOhBBCCCGaQ5voVgsn1Q1tMt+REEII0XZUP7cPpcNMgqMG2rdvH4AM5xdCCCHaoNLSUuLj4w9aRoKjBqpesmT79u2/eXFF86meb2rHjh2S+9VK5B60PrkHrU/uQXg4lPugtaa0tJSMjIzfPJ8ERw1UPX9CfHy8/EMIA3FxcXIfWpncg9Yn96D1yT0ID791Hw61UUMSsoUQQgghapDgSAghhBCiBgmOGsjpdHL33XfLkiKtTO5D65N70PrkHrQ+uQfhoanvg0wCKYQQQghRg7QcCSGEEELUIMGREEIIIUQNEhwJIYQQQtQgwVEDzZ49m27duhEREcHo0aP5+eefW7tK7db333/PGWecQUZGBkopPvjgg1r7tdbcdddddOzYkcjISMaNG8fGjRtbp7Lt1MyZMznyyCOJjY0lNTWVs88+m/Xr19cq4/F4mDZtGh06dCAmJoZzzz2X/Pz8Vqpx+/Pcc88xePDg0PwtY8aM4bPPPgvtl+vf8mbNmoVSihtvvDG0Te5D8/vHP/6BUqrWq1+/fqH9TXkPJDhqgLfeeovp06dz9913s2zZMoYMGcKECRMoKCho7aq1S263myFDhjB79ux69z/00EM89dRTPP/88yxatIjo6GgmTJiAx+Np4Zq2X9999x3Tpk3jp59+IisrC7/fz/jx43G73aEyN910Ex999BHvvPMO3333Hbm5ufzhD39oxVq3L507d2bWrFksXbqUJUuWcNJJJ3HWWWexdu1aQK5/S1u8eDH//Oc/GTx4cK3tch9axsCBA9m9e3fo9eOPP4b2Nek90OKQjRo1Sk+bNi30PhAI6IyMDD1z5sxWrNXvA6Dff//90PtgMKjT09P1ww8/HNpWXFysnU6n/u9//9sKNfx9KCgo0ID+7rvvtNbWNbfb7fqdd94JlcnOztaAXrhwYWtVs91LTEzUL774olz/FlZaWqp79+6ts7Ky9PHHH6//8pe/aK3l30FLufvuu/WQIUPq3dfU90Bajg6Rz+dj6dKljBs3LrTNMAzGjRvHwoULW7Fmv085OTnk5eXVuh/x8fGMHj1a7kczKikpAfavMbh06VL8fn+t+9CvXz+6dOki96EZBAIB3nzzTdxuN2PGjJHr38KmTZvGpEmTal1vkH8HLWnjxo1kZGTQo0cPLr74YrZv3w40/T2QtdUO0d69ewkEAqSlpdXanpaWxrp161qpVr9feXl5APXej+p9omkFg0FuvPFGxo4dyxFHHAFY98HhcJCQkFCrrNyHprV69WrGjBmDx+MhJiaG999/nwEDBrBixQq5/i3kzTffZNmyZSxevLjOPvl30DJGjx7NnDlz6Nu3L7t37+aee+7h2GOPZc2aNU1+DyQ4EkIckmnTprFmzZpaffyiZfTt25cVK1ZQUlLCu+++y+TJk/nuu+9au1q/Gzt27OAvf/kLWVlZREREtHZ1frdOPfXU0M+DBw9m9OjRdO3albfffpvIyMgm/SzpVjtEycnJmKZZJ/M9Pz+f9PT0VqrV71f1NZf70TKuv/56Pv74Y7755hs6d+4c2p6eno7P56O4uLhWebkPTcvhcNCrVy9GjBjBzJkzGTJkCE8++aRc/xaydOlSCgoKGD58ODabDZvNxnfffcdTTz2FzWYjLS1N7kMrSEhIoE+fPmzatKnJ/y1IcHSIHA4HI0aMYN68eaFtwWCQefPmMWbMmFas2e9T9+7dSU9Pr3U/XC4XixYtkvvRhLTWXH/99bz//vt8/fXXdO/evdb+ESNGYLfba92H9evXs337drkPzSgYDOL1euX6t5CTTz6Z1atXs2LFitBr5MiRXHzxxaGf5T60vLKyMjZv3kzHjh2b/t9CI5PGf5fefPNN7XQ69Zw5c/Qvv/yir776ap2QkKDz8vJau2rtUmlpqV6+fLlevny5BvRjjz2mly9frrdt26a11nrWrFk6ISFB/+9//9OrVq3SZ511lu7evbuuqKho5Zq3H9ddd52Oj4/X3377rd69e3foVV5eHipz7bXX6i5duuivv/5aL1myRI8ZM0aPGTOmFWvdvtx22236u+++0zk5OXrVqlX6tttu00op/eWXX2qt5fq3lpqj1bSW+9ASbr75Zv3tt9/qnJwcPX/+fD1u3DidnJysCwoKtNZNew8kOGqgp59+Wnfp0kU7HA49atQo/dNPP7V2ldqtb775RgN1XpMnT9ZaW8P5//73v+u0tDTtdDr1ySefrNevX9+6lW5n6rv+gH7llVdCZSoqKvT/+3//TycmJuqoqCh9zjnn6N27d7depduZqVOn6q5du2qHw6FTUlL0ySefHAqMtJbr31p+HRzJfWh+559/vu7YsaN2OBy6U6dO+vzzz9ebNm0K7W/Ke6C01vowW7aEEEIIIdoNyTkSQgghhKhBgiMhhBBCiBokOBJCCCGEqEGCIyGEEEKIGiQ4EkIIIYSoQYIjIYQQQogaJDgSQgghhKhBgiMhhBBCiBokOBJCiCamlOKDDz5o7WoIIRpJgiMhRL2mTJmCUopZs2bV2v7BBx+glGqlWlmUUvW+3nzzzVatV7Xdu3dz6qmntnY1mDNnDgkJCa1dDSHaHAmOhBAHFBERwYMPPvj/27vXkKi2Ng7g/5rRRsfLaMqoCV7yNug4WUZpecW8QJKBFFaW2k0oTEqtMC8p6WigZimCA+aHMqIUCmoINM3spqlFYoaaUZRpqYVC5ug6H3rdr/uo75k6p7fLeX6wYe+19n7Ws+aDPKy9ZsTw8PCPTmWWiooKvHnzhndERET80Jw+f/4MALCwsMCiRYt+aC6EkG9HxREhZF5BQUGwsLBAbm7unP2ZmZlYtmwZr62oqAi2trbcdUxMDCIiIpCTkwOpVAqJRIKsrCxoNBokJyfD1NQU1tbWqKio+KrcJBIJLCwseIdIJAIAxMXFwd3dHePj4wC+FC0eHh7Yvn07AKCvr49bafL29oZIJIKbmxsaGhp4Yzx58gRhYWEwMDCAVCpFdHQ03r17x/X7+/tj//79SExMhJmZGUJCQgDwX6tNj3Xx4kX4+PhAT08PK1euxLNnz9Dc3AxPT08YGBggLCwMg4ODvPFVKhVkMhlEIhFcXFxQWlrK9U3Hra6uRkBAAPT19aFQKHD37l0AQH19PWJjY/HhwwduZS0zMxMAUFpaCkdHR4hEIkilUkRGRn7VZ0/I746KI0LIvAQCAXJycnD69Gm8evXqm+PU1dXh9evXuHXrFgoKCpCRkYH169fDxMQE9+/fR3x8PPbu3fu3xpipuLgYY2NjOHLkCAAgNTUVIyMjOHPmDO++5ORkHDp0CG1tbfDy8kJ4eDjev38PABgZGUFgYCA8PDzQ0tICtVqNt2/fYtOmTbwYlZWV0NXVRVNTE8rKyubNKSMjA8eOHUNrayuEQiG2bNmClJQUnDp1Co2Njeju7kZ6ejp3/7lz55Ceno4TJ06gs7MTOTk5SEtLQ2VlJS9uamoqkpKS0N7eDicnJ0RFRUGj0cDb2xtFRUUwMjLiVtaSkpLQ0tKChIQEZGVloaurC2q1Gr6+vn/r8ybkt8MIIWQOO3bsYBs2bGCMMbZ69WoWFxfHGGOspqaGTf/pyMjIYAqFgvdcYWEhs7Gx4cWxsbFhk5OTXJuzszPz8fHhrjUaDROLxayqqkqr3AAwkUjExGIx73jx4gV3z507d5iOjg5LS0tjQqGQNTY2cn3Pnz9nAJhSqeTaJiYmmLW1NcvLy2OMMZadnc2Cg4N54758+ZIBYF1dXYwxxvz8/JiHh8ec+dXU1PDGUqlUXH9VVRUDwGpra7m23Nxc5uzszF0vXbqUnT9/nhc3OzubeXl5zRu3o6ODAWCdnZ2MMcYqKiqYsbExL8bly5eZkZER+/jx46y8CSFfCH9YVUYI+WXk5eUhMDAQSUlJ3/S8q6srFi7870K1VCqFm5sbdy0QCLB48WIMDAxoHbOwsBBBQUG8NisrK+7cy8sLSUlJyM7OxuHDh7F27dpZMby8vLhzoVAIT09PdHZ2AgAePXqEmzdvwsDAYNZzPT09cHJyAgCsWLFCq3zd3d25c6lUCgCQy+W8tun5j42NoaenBzt37sTu3bu5ezQaDYyNjeeNa2lpCQAYGBiAi4vLnHmsW7cONjY2sLe3R2hoKEJDQ7Fx40bo6+trNQ9C/g2oOCKE/CVfX1+EhITg6NGjiImJ4doXLlwIxhjv3omJiVnP6+jo8K4XLFgwZ9vU1JTWOVlYWMDBwWHe/qmpKTQ1NUEgEKC7u1vruNNGR0cRHh6OvLy8WX3TRQgAiMVireLNnO/0t/3+3DY9/9HRUQBAeXk5Vq1axYsjEAj+Mu7/+hwNDQ3R2tqK+vp63LhxA+np6cjMzERzczN9s42Q/6A9R4QQrSiVSly9epXb8AsA5ubm6O/v5xVI7e3tPyC72U6ePImnT5+ioaEBarV6zg3f9+7d4841Gg0ePnwImUwGAFi+fDk6Ojpga2sLBwcH3qFtQfStpFIprKys0NvbO2tsOzs7rePo6upicnJyVrtQKERQUBDy8/Px+PFj9PX1oa6u7p+cAiG/NFo5IoRoRS6XY+vWrSguLuba/P39MTg4iPz8fERGRkKtVuP69eswMjL67vmMjIygv7+f12ZoaAixWIy2tjakp6fj0qVLWLNmDQoKCnDgwAH4+fnB3t6eu7+kpASOjo6QyWQoLCzE8PAw4uLiAAD79u1DeXk5oqKikJKSAlNTU3R3d+PChQtQqVSzVnD+acePH0dCQgKMjY0RGhqK8fFxtLS0YHh4GAcPHtQqhq2tLUZHR1FbWwuFQgF9fX3U1dWht7cXvr6+MDExwbVr1zA1NQVnZ+fvOh9CfiW0ckQI0VpWVhbvlY1MJkNpaSlKSkqgUCjw4MGDb96X9LViY2NhaWnJO06fPo1Pnz5h27ZtiImJQXh4OABgz549CAgIQHR0NG8lRalUQqlUQqFQ4Pbt27hy5QrMzMwAfNm/1NTUhMnJSQQHB0MulyMxMRESiYS3f+p72bVrF1QqFSoqKiCXy+Hn54ezZ89+1cqRt7c34uPjsXnzZpibmyM/Px8SiQTV1dUIDAyETCZDWVkZqqqq4Orq+h1nQ8ivZQH784YBQgj5zfX19cHOzg5tbW2zfqeJEEJo5YgQQgghZAYqjgghP5WcnBwYGBjMefwM/6+MEPL7o9dqhJCfytDQEIaGhubs09PTw5IlS/7PGRFC/m2oOCKEEEIImYFeqxFCCCGEzEDFESGEEELIDFQcEUIIIYTMQMURIYQQQsgMVBwRQgghhMxAxREhhBBCyAxUHBFCCCGEzEDFESGEEELIDH8AhLEAkcJiNVUAAAAASUVORK5CYII=", + "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\")\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.png\")" ] }, { @@ -974,691 +1133,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..12f3c03 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..08c4f70 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..76fcf9d 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..02a72cb Binary files /dev/null and b/results/AA2024_simulation_10MC_50exp_1batch.xlsx differ