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

ModelDimensionTested molcules (Avg) requires_gpu
3DSBDD3D771yes
Pocket2mol3D928yes
PocketFlow3D1000yes
RenGen3D631yes
DST2D1001no
Graph GA2D643no
MIMOSA2D1001yes
MolDQN2D501yes
Pasithea1D914yes
REINVENT1D1000yes
SELFIES-VAE-BO1D200yes
SMILES-GA1D584no
SMILES-LSTM-HC1D501no
SMILES-VAE-BO1D200yes
TargetDiff3D75yes

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