第1节:AutoDock Vina简介与发展历程

咱们今天先聊聊AutoDock Vina。很多做计算化学的朋友,尤其是搞药物设计的,都管它叫“维也纳”。为啥?因为它来自The Scripps Research Institute,开发团队在La Jolla,跟维也纳没啥关系——纯粹是Vina这个词在拉丁语里是“葡萄酒”的意思。不过大家叫顺口了,我也跟着这么叫。

我第一次接触Vina,大概是2010年。那时候还是AutoDock 4的天下,做对接得配置Grid参数,跑一次要折腾半天。后来同事扔给我一个命令:./vina --receptor protein.pdbqt --ligand ligand.pdbqt。我当时就愣了——就这?回车,一分钟后结果出来了。从此,我再也没碰过老版本的AutoDock。

1.1 从AutoDock到Vina:一次精准的降维打击

说Vina之前,得先提一下它爹——AutoDock。90年代诞生的老牌分子对接软件,学术界用得非常多。但老AutoDock有个问题:配置太繁琐。

  • 网格映射:得指定盒子大小、格点间距,还得算格点能量。
  • 参数多:遗传算法里面的突变率、交叉率、种群数……新手看着就头大。
  • 速度慢:单个配体对接,少则几分钟,多则半小时。

Vina在2010年横空出世,目标很明确:让分子对接变得简单。它把配置缩减到三样东西:受体文件、配体文件、盒子中心坐标和尺寸。没了。你想想看,一个工具如果上手需要读三天的说明书,那它就是设计失败了。

Vina做的核心改进,其实就是两件事:

  1. 全局搜索用随机扰动 + 局部优化:不再用遗传算法的复杂交叉变异,而是靠大量的随机初始构象加BFGS局部优化。效果好,还更快。
  2. 评分函数简化:老AutoDock的评分函数项太多,Vina只保留了关键的疏水作用、静电作用、氢键和转角熵。少了花里胡哨的东西,反而更鲁棒。

我记得我当时手头有个项目:一个激酶靶点,手里有2000多个化合物要做虚拟筛选。用AutoDock 4,一台机器跑一个星期。换成Vina后,同样的机器,两天就跑完了。而且对接出来的pose,用已知的晶体结构验证,RMSD中位数从1.8 Å降到了1.2 Å。这种体验,你用过一次就不会回头。

Vina的承诺:你只需要给三个文件,我还你一个对接结果。零配置,零等待。

1.2 核心算法架构:搜索 + 评分 = 结果

Vina的算法到底怎么干的?我用一个图说清楚它。

AutoDock Vina 核心流程:搜索 · 评分 · 排序 受体 PDBQT + 盒子参数 配体 PDBQT 可旋转键已标记 预处理:合并非旋转键、设置柔性残基 把配体拆成刚体部分 + 可旋转二面角 迭代式蒙特卡洛随机扰动 + BFGS局部优化 每步:平移0.2Å / 旋转2° → 能量最小化 → 按Metropolis准则接受 输出:Top-N对接构象 + 打分 按亲和力排序,输出PDBQT和打分 核心思想 1. 刚体受体 + 柔性配体 2. 评分函数 = w1·ΔG疏水 + w2·ΔG静电 + w3·ΔG氢键 + w4·ΔG旋转熵 3. 没有网格预处理 4. 用Trilinear插值算能量 5. 支持多线程并行 关键参数: exhaustiveness(默认8) num_modes(默认9) energy_range(默认3 kcal/mol)

这个流程里,最妙的一步是BFGS局部优化。Vina每做完一次随机扰动,不急着判断好坏,先做一个快速的梯度下降,找到最近的局部极小点。这样算出来的能量更有意义。而老AutoDock用的是遗传算法,基本就是在那儿穷举,效率差了一大截。

避坑指南:我曾经遇到一个案例,配体太大(超过20个可旋转键),Vina默认的8次穷举迭代根本搜不出合理构象。把exhaustiveness调到64,跑了3小时,终于找到了跟晶体结构吻合的pose。所以遇到大分子配体,不要省计算量。

1.3 版本演进:从零到一,再到生态

Vina从2010年发布至今,经历了几个关键版本。我帮你捋一遍。

版本 发布时间 核心变化 我印象最深的坑
Vina 1.0 2010 开山之作。单核CPU,不支持多线程。 只能串行跑,做个虚拟筛选得等一周。
Vina 1.1 2011 加入多线程支持。速度直接翻4倍(4核)。 多线程超过8个容易崩,得手动限核。
Vina 1.2.0 2021 支持GPU加速(CUDA)、修正打分函数参数。 GPU版对显存要求高,8GB卡只能跑小分子。
Vina 1.2.5 2023 支持柔性残基、RNA/DNA对接、共价对接。 柔性残基定义复杂,容易报错。

你看这个表格,Vina的进化其实很有逻辑。前面几年主要在加速,后面几年在扩能力。为啥2021年才加入GPU?因为CUDA生态成熟了,Vina团队不需要自己从零写GPU代码,直接用现成的框架就好。这就是一个成熟开源项目的生存智慧——不重复造轮子,只造自己擅长的。

1.4 为什么是Vina?不是其他的?

市面上分子对接软件不少。Glide、Gold、MOE、LeDock……各有各的本事。但Vina在学术界和开源社区里,地位一直很稳。我总结三个原因:

  1. 开源免费:对于课题组,尤其是经费紧张的地方,这个太关键了。当年我读博时,导师给不起Glide的license费,Vina就是我们唯一的武器。
  2. 命令行友好:Vina天然适合脚本化和高通量。我一般用Python写个循环,把几千个配体塞给Vina,再写个脚本把结果整理成表格。一次配置,终身使用。
  3. 结果可复现:Vina的随机种子是固定的,只要参数不变,在任何人机器上跑出来结果一模一样。这在发文章的时候很重要——审稿人可以复现你的结果。

注意:Vina的评分函数并不是万能的。它在大规模虚拟筛选时对Top化合物的富集因子还不错,但对绝对结合自由能的预测,误差通常在1-2 kcal/mol。所以不要拿Vina的打分做定量预测——它的强项是挑出“可能的活性分子”,不是告诉你“这个分子结合得多强”。

1.5 一个简单的第一次运行

说了这么多,不如上手跑一个。假设你已经在Linux系统里装好了Vina,一个最小工作流是这样的:

# 准备受体文件(改成PDBQT格式)
# 一般用MGLTools的prepare_receptor4.py

prepare_receptor4.py -r protein.pdb -o protein.pdbqt

# 准备配体文件(同样改格式)
prepare_ligand4.py -l ligand.sdf -o ligand.pdbqt

# 设置对接盒子(中心坐标和尺寸)
# 假设蛋白活性口袋中心在 (x=12.5, y=8.3, z=-4.7)
# 盒子大小设为 20×20×20 Å

# 运行Vina
vina --receptor protein.pdbqt \
     --ligand ligand.pdbqt \
     --center_x 12.5 --center_y 8.3 --center_z -4.7 \
     --size_x 20 --size_y 20 --size_z 20 \
     --exhaustiveness 16 \
     --num_modes 9 \
     --out output.pdbqt

# 跑完后的结果:output.pdbqt 里含有9个对接构象
# 每个构象的评分在REMARK行里可以找到

第一次跑的同学,可能会遇到一个经典问题——盒子太小。Vina要求盒子完全覆盖配体的所有可能的摆放位置。如果盒子的边缘太靠近配体初始构象,Vina会把配体“推出”盒子外,然后报错。我习惯把盒子设得比配体最大的可能延伸大5 Å,这样基本不会出问题。

小贴士:盒子中心怎么定?最可靠的办法是拿已知的共晶结构,把配体的几何中心坐标直接拿来用。没有晶体结构的话,可以用PyMOL或Chimera量一下活性口袋的空腔中心——用鼠标点几个关键残基,取它们的坐标平均值,八九不离十。

1.6 Vina还活着,而且活得很好

有人问我,深度学习这么火,是不是Vina要过时了?我的回答是:不会。

Vina代表着经典计算化学的顶峰——物理模型驱动,可解释性强,计算成本可控。深度学习模型在打分精度上确实有提升,但它们的可泛化性和可迁移性还有很大问题。你拿一个训练集里没有的蛋白类型去跑深度学习打分,预测结果可能非常离谱。而Vina的评分函数是基于物理化学原理的,“没见过”并不等于“不会算”。

咱们这个课程的目的,就是要把Vina这个老伙计的潜力彻底挖出来。后面的章节里,我会带你调参数、建特征、结合机器学习做筛选。你有好想法,它就能帮你实现。