A novel variational approach to transition path sampling (TPS) based on the Doob’s h-transform. Our method can be used to sample transition paths between two meta-stable states of molecular systems.
A transition path of alanine dipeptide sampled using our method.
You can use the environment.yml
file to setup this project. However, it only works on CPU.
conda env create -f environment.yml
We also provide a requirements.txt, and a pyproject.toml. So if you are using uv you can instead run
uv sync
to install the dependencies and setup a virtual environment. Either activate the environment or use the provided uv run
command to run the scripts.
The best way to understand our method is to look at the jupyter notebook which contains the necessary code for 2D potentials in one place.
However, this notebook is very limited in scope and only contains the most basic examples. In the following, we will show the interfaces to run more complex examples. You can also look at the setups in the configs/
folder.
You can either use the TPS shooting baselines provided by us, or re-create them by running
python tps_baseline_mueller.py
# For this to work, you need to specify which baselines to run by changing the all_paths variable in the script
python eval/evaluate_mueller.py
to generate and evaluate transitions for the Müller-Brown toy-potential or use
python tps_baseline.py --mechanism two-way-shooting --num_paths 1000 --states phi-psi
# num_steps compiles multiple MD steps into a single one. This makes sampling faster but increases startup time. Only really worth it for long running simulations
python tps_baseline.py --mechanism two-way-shooting --num_paths 100 --fixed_length 1000 --states phi-psi --num_steps 50
python tps_baseline.py --mechanism two-way-shooting --num_paths 1000 --states rmsd
python eval/evaluate_tps.py
for ALDP respectively.
Note: In both cases, you might need to change the paths that you want to evaluate in evaluate_mueller.py
or evaluate_tps.py
.
To sample trajectories with our method, we provide ready to go config files in configs/
. You can run them with
python main.py --config configs/toy/mueller_single_gaussian.yaml
python main.py --config configs/toy/dual_channel_single_gaussian.yaml
python main.py --config configs/toy/dual_channel_two_gaussian.yaml
for the toy examples and
python main.py --config configs/aldp_diagonal_single_gaussian.yaml
for real molecular systems.
If you find our work useful, please consider citing our paper:
@inproceedings{du2024doob,
author = {Du, Yuanqi and Plainer, Michael and Brekelmans, Rob and Duan, Chenru and No{\'e}, Frank and Gomes, Carla P. and Aspuru-Guzik, Al{\'a}n and Neklyudov, Kirill},
title = {Doob’s Lagrangian: A Sample-Efficient Variational Approach to Transition Path Sampling},
year = {2024},
booktitle = {Advances in Neural Information Processing Systems},
}