Views
No views yet
| Folder | TL, DR | Description |
|---|---|---|
| MolCRAFT | Unified Space for Molecule Generation | MolCRAFT is the first SBDD generative model based on Bayesian Flow Network (BFN) operating in the unified continuous parameter space for different modalities, with variance reduction sampling strategy to generate high-quality samples with more than 10x speedup. |
| MolJO | Gradient-Guided Molecule Optimization | MolJO is a gradient-based Structure-Based Molecule Optimization (SBMO) framework derived within BFN. It employs joint guidance across continuous coordinates and discrete atom types, alongside a backward correction strategy for effective optimization. |
| MolPilot | Optimal Scheduling | MolPilot enhances SBDD by introducing a VLB-Optimal Scheduling (VOS) strategy for the twisted multimodal probability paths, significantly improving molecular geometries and interaction modeling, achieving 95.9% PB-Valid rate. |
targetdiff folder) and BFN-based models (our MolPilot).1# Example: TargetDiff molopt_score_model.py
2
3class ScorePosNet3D(nn.Module):
4 def get_diffusion_loss(...):
5 ##### Original Training Loss #####
6 time_step, pt = self.sample_time(num_graphs, protein_pos.device, self.sample_time_method)
7 # Xt = a.sqrt() * X0 + (1-a).sqrt() * eps
8 ligand_pos_perturbed = a_pos.sqrt() * ligand_pos + (1.0 - a_pos).sqrt() * pos_noise # pos_noise * std
9
10 ##### VOS Generalized Loss #####
11 time_step_v, pt = self.sample_time(num_graphs, protein_pos.device, self.sample_time_method)
12 # Vt = a * V0 + (1-a) / K
13 log_ligand_v0 = index_to_log_onehot(ligand_v, self.num_classes)
14 ligand_v_perturbed, log_ligand_vt = self.q_v_sample(log_ligand_v0, time_step_v, batch_ligand)
15 kl_v = self.compute_v_Lt(log_v_model_prob=log_v_model_prob, log_v0=log_ligand_v0,
16 log_v_true_prob=log_v_true_prob, t=time_step_v, batch=batch_ligand)
17test/test_geodesic_budget.py.nvidia-container-runtime enabled on your Linux system is required.[!TIP]
- This repo provides an easy-to-use script to install docker and nvidia-container-runtime, in
./dockerrunsudo ./setup_docker_for_host.shto set up your host machine.- For details, please refer to the install guide.
make command.1cd ./docker
2makedata folder by default, and accessible in the data Google Drive folder.crossdocked_v1.1_rmsd1.0_pocket10_processed_final.lmdbcrossdocked_pocket10_pose_split.pttest_set.zip into data folder. It includes the original PDB files that will be used in Vina Docking.1data:
2 name: pl # [pl, pl_tr] where tr means offline-transformedpython train_bfn_twisted.py --exp_name ${EXP_NAME} --revision ${REVISION} --config_file configs/crossdock_train_test.yaml --time_decoupledpython train_bfn_twisted.py --sigma1_coord 0.05 --beta1 1.5 --beta1_bond 1.5 --lr 5e-4 --time_emb_dim 0 --self_condition --epochs 30 --batch_size 16 --max_grad_norm Q --scheduler plateau --destination_prediction True --use_discrete_t True --num_samples 10 --sampling_strategy end_back_pmf --sample_num_atoms ref --ligand_atom_mode add_aromaticpython train_bfn_twisted.py --no_wandb --debug --epochs 1CONFIG to configs/crossdock_train_test.yaml. For PoseBusters, set it to configs/posebusters_test.yaml.1# Sample with time scheduler
2python train_bfn_twisted.py --config_file ${CONFIG} --ckpt_path ${CKPT_PATH} --time_scheduler_path ${TIME_SCHEDULER} --test_only --exp_name ${EXP_NAME} --revision ${REVISION} --num_samples ${NUM_MOLS_PER_POCKET} --sample_steps 100 --eval_batch_size ${BATCH_SIZE}python sample_for_pocket.py --protein_path ${PDB_PATH} --ligand_path ${SDF_PATH} --time_scheduler_path ${TIME_SCHEDULER} --num_samples ${NUM_MOLS_PER_POCKET}molpilot_ref_vina_docked.pt on CrossDock in the sample Google Drive folder.@article{qiu2025piloting,
title={Piloting Structure-Based Drug Design via Modality-Specific Optimal Schedule},
author={Qiu, Keyue and Song, Yuxuan and Fan, Zhehuan and Liu, Peidong and Zhang, Zhe and Zheng, Mingyue and Zhou, Hao and Ma, Wei-Ying},
journal={ICML 2025},
year={2025}
}