Beyond Affinity: A Benchmark of 1D, 2D, and 3D Methods Reveals Critical Trade-offs in Structure-Based Drug Design
August 7, 2025 ยท View on GitHub
This repository hosts an open-source benchmark for Structure-based Drug Design, to facilitate the transparent and reproducible evaluation of algorithmic advances in molecular optimization. This repository supports 15 Structure-based Drug Design algorithms on 4 tasks categories.
15 Methods
Model | Dimension | Tested molcules (Avg) | requires_gpu |
|---|---|---|---|
| 3DSBDD | 3D | 771 | yes |
| Pocket2mol | 3D | 928 | yes |
| PocketFlow | 3D | 1000 | yes |
| RenGen | 3D | 631 | yes |
| DST | 2D | 1001 | no |
| Graph GA | 2D | 643 | no |
| MIMOSA | 2D | 1001 | yes |
| MolDQN | 2D | 501 | yes |
| Pasithea | 1D | 914 | yes |
| REINVENT | 1D | 1000 | yes |
| SELFIES-VAE-BO | 1D | 200 | yes |
| SMILES-GA | 1D | 584 | no |
| SMILES-LSTM-HC | 1D | 501 | no |
| SMILES-VAE-BO | 1D | 200 | yes |
| TargetDiff | 3D | 75 | yes |
Receptor information
All the receptors used in our benchmark can be found in receptor/ folder
Sampling and evaluating
For 3DSBDD and Pocket2mol, we use this command to generate:
python sample_for_pdb.py --pdb_path [your pdb] --center=[centers] --bbox_size [box size] --outdir [your outdir]
Also need to change the num_samples in the sample_for_pdb.yml
For PocketFlow, we use this command to generate:
python main_generate.py -pkt [your pdb] --ckpt ckpt/ZINC-pretrained-255000.pt -n 1000 -d cuda:0 --root_path [your outdir] --name [pdb name] -at 1.0 -bt 1.0 --max_atom_num 35 -ft 0.5 -cm True --with_print True
For ResGen, we first convert our pdb file to sdf file and use this command to generate:
python gen.py --pdb_file [your pdb] --sdf_file [correspond sdf] --outdir [your outdir]
For the rest of models that are under PMO, we use the following command to generate
python -u run.py --method [method to test] --task production --n_runs 3 --wandb offline --max_oracle_calls 5 --custom_docking [your pdb] --custom_docking_config [your pdb config]
After getting molecules, we could start evaluate. First we calculate the docking score using vina_test_model_pmo.py or vina_test_model_pmo.py. Then we could run Heuristic Oracles and Molecule Generation Oracles using heuristic_merics.py and generation_metrics.py. At last we could run pose test with posebuster_test.py and clash_test.py
Environment
To run vina, please use vina_environment
To run Heuristic Oracles and Molecule Generation Oracles, please use pyscreener_environment
To run pose test, please use posebusters_environment