diff --git a/DesignBodipy_GA.py b/DesignBodipy_GA.py index 867b2db..c3677f0 100644 --- a/DesignBodipy_GA.py +++ b/DesignBodipy_GA.py @@ -28,8 +28,8 @@ help="Number of initial evaluations (Parent population) to build the GA model, default = 20") parser.add_argument("--iter", "-i", type=int, default=200, help="Maximum number of iterations (generations), default = 200") -parser.add_argument("--mut", "-m", type=float, default=0.01, - help="Probability of mutation of each group, default = 0.01") +parser.add_argument("--mut", "-m", type=float, default=0.1, + help="Probability of mutation of each group, default = 0.1") parser.add_argument("--tol", "-t", type=float, default=0.001, help="Tolerance, stop iterations once absolute error is less then, default = 0.001") diff --git a/README.md b/README.md index 7d2ca34..5d8020d 100644 --- a/README.md +++ b/README.md @@ -2,35 +2,31 @@ Inverse Design of Substituted BODIPY ====================================== We provide python codes to inverse design BODIPY molecules, as discussed in Ref-1. -DesignBodipy_Bayes.py can be used to design molecules using Bayesian optimization based on Gaussian process regression. +`DesignBodipy_Bayes.py` can be used to design molecules using Bayesian optimization based on Gaussian process regression. -DesignBodipy_GA.py can be used for genetic algoritm (GA) optimization +`DesignBodipy_GA.py` can be used for genetic algoritm (GA) optimization Both programs use a trained kernel ridge regression machine learning (KRR-ML) model to evaluate the S0→S1 excitation energy. -## Example run: Bayesian Optimization +## Download the design code and SLATM descriptors for 77k training BODIPY molecules + ``` -$ python3 DesignBodipy_Bayes.py +git clone https://github.com/moldis-group/bodipy.git +cd bodipy/data +wget http://moldis.tifrh.res.in/bodipy/desc.npy +cd .. ``` -Additional parameters can be sought using `--help` argument. Given below are all possible flags. - ---- -| Flag/ arg | Description | Default [range] | Compulsory | -|:----:|:-----------:|:-------:|:----------:| -|[target]| Target S0->S1 value, in eV. Positional argument, non optional.| - | ✓ | -| --group, -g | # of substitutions in target BODIPY. | 2 [2, 7]|✗| -| --data -d | Location of datafiles to be used in KRR ML, contains descriptor and coefficients.| `./data`|✗| -| --restart, -r | # of evaluations for single EI evaluation. More evaluations give more robust minima, with higher computation cost. | 5 [1, ∞] | ✗| -| --exploration, -x | Exploitation vs Exploration parameter | 0.01 (0,100)| ✗| -| --seed, -s | Number of initial evaluations to build Gaussian Process surrogate. More evaluations might help converging faster. | 5 [1, ∞] | ✗| -| --iter, -i | Maximum number of iterations. | 200 [1, ∞] | ✗| ---- - -Once run, it will run for `iter` times and print successive improvements towards obtaining target molecule. An example run is shown below: +## Example run: Bayesian Optimization + ``` $ python3 DesignBodipy_Bayes.py 2.7 +``` + +Additional parameters can be obtained using `python3 DesignBodipy_Bayes.py --help` +Screenshot of output +``` Searching for 2D BODIPY near 2.700000 eV Reading ML model from ./data Iterations 200; Initial evaluations 5 @@ -52,12 +48,38 @@ ITER POS GROUPS S0S1(eV) Target ## Example run: GA Optimization ``` -$ python3 DesignBodipy_GA.py +$ python3 DesignBodipy_GA.py 2.7 +``` + +Additional parameters can be obtained using `python3 DesignBodipy_GA.py --help` + + +Screenshot of output +``` +Searching for 7D BODIPY near 2.700000 eV +Reading ML model from ./data +Generations 200; Parent population 20 +Starting Genetic optization +Starting population estimation +Calculating parent: 20 +Current Gen 0, Median: 2.985662 Best: 2.767993 +Best Groups [19.0, 18.0, 20.0, 34.0, 45.0, 7.0, 30.0] ; Pos [0, 1, 2, 3, 4, 5, 6] +Evaluating: 10 of 10 +Current Gen 1, Median: 2.926014 Best: 2.767993 +Best Groups [19.0, 18.0, 20.0, 34.0, 45.0, 7.0, 30.0] ; Pos [0, 1, 2, 3, 4, 5, 6] +Evaluating: 10 of 10 +Current Gen 2, Median: 2.885984 Best: 2.708469 +Best Groups [19.0, 40.0, 14.0, 43.0, 23.0, 7.0, 11.0] ; Pos [0, 1, 2, 3, 4, 5, 6] +Evaluating: 10 of 10 +Current Gen 3, Median: 2.859153 Best: 2.708469 +Best Groups [19.0, 40.0, 14.0, 43.0, 23.0, 7.0, 11.0] ; Pos [0, 1, 2, 3, 4, 5, 6] +... + ``` ## Requirements: -1. Python3.6 and above +1. Python3.6 [tested] 2. Numpy 3. Scipy (scipy.optimize.minimize for iter minimization) 4. Scikit-learn (for Gaussian Process) @@ -77,10 +99,11 @@ A publicly accessible web interface hosting a trained machine learning (ML) mode ## Reference: -[1] _Data-Driven Modeling of S0 -> S1 Transition in the Chemical Space of BODIPYs: High-Throughput Computation, Machine Learning Modeling and Inverse Design_, +[1] _Data-Driven Modeling of S0 -> S1 Transition in the Chemical Space of BODIPYs: High-Throughput Computation, Machine Learning Modeling and Inverse Design_ Amit Gupta, Sabyasachi Chakraborty, Debashree Ghosh, Raghunathan Ramakrishnan - submitted (2021) arxiv - Dataset: [https://moldis-group.github.io/BODIPYs/](https://doi.org/10.6084/m9.figshare.16529214.v1) + The Journal of Chemical Physics, 155 (2021) 244102. + DOI: [https://doi.org/10.1063/5.0076787](https://doi.org/10.1063/5.0076787) + Dataset: [https://moldis-group.github.io/BODIPYs/](https://moldis-group.github.io/BODIPYs/) Dataset DOI: [10.6084/m9.figshare.16529214.v1](https://doi.org/10.6084/m9.figshare.16529214.v1)