AutoDock Vina(Trott & Olson, J. Comput. Chem. 2010)是被引用最多的对接软件论文之一。理解它的算法设计,有助于理解现代对接工具的共同基础与局限。
相对 AutoDock 4 的核心改进
| 方面 | AutoDock 4 | Vina |
|---|---|---|
| 打分函数 | 基于力场(AMBER 类)+ 经验校正 | 纯经验性,项更少更简单 |
| 搜索算法 | 拉马克遗传算法 | 迭代局部搜索 + Broyden-Fletcher-Goldfarb-Shanno 优化 |
| 格点预计算 | 需要单独的 autogrid 步骤 | 内部自动处理 |
| 多线程 | 不支持 | 原生支持 |
| 速度 | 基准 | 快约两个数量级 |
| 姿势预测准确度 | 基准 | 论文报告显著提高 |
「更简单反而更准」是 Vina 的一个重要启示:它的打分函数比 AutoDock 4 简单得多,却在姿势预测上表现更好。这说明过度复杂的物理项在参数化不足时反而引入噪声。
打分函数的构成
# Vina 的打分函数是原子对之间的距离依赖函数之和
#
# c = Σ_{i<j} f(d_ij)
#
# 其中 d_ij 是原子表面距离(surface distance):
# d_ij = r_ij - R_i - R_j
# (减去了范德华半径,因此接触时 d ≈ 0)
#
# 包含五个项:
#
# 1) 空间位阻项(steric)
# gauss1: 短程吸引
# gauss2: 中程吸引
# repulsion: 距离过近时的强斥力
#
# 2) 疏水项(hydrophobic)
# 仅在疏水原子对之间计算
# 在一定距离范围内给予奖励
#
# 3) 氢键项(hydrogen bonding)
# 在氢键供受体对之间计算
# 注意:Vina 的氢键项没有角度依赖,
# 只看距离 —— 这是一个已知的简化
#
# 权重从 PDBbind 数据拟合得到
#
# 最终的「亲和力」还要除以一个与可旋转键数相关的因子:
# ΔG_predicted = c / (1 + w × N_rot)
# → 对柔性分子的粗糙熵惩罚
# 关键局限(论文本身也承认):
# - 无显式的静电项(疏水与氢键项隐含了部分静电)
# - 无显式的去溶剂化项
# - 氢键无角度依赖
# - 熵处理极其粗糙
搜索算法
- 迭代局部搜索(ILS):从随机构象出发,做局部优化;然后施加一个随机扰动,再优化;用 Metropolis 准则决定是否接受新解;重复;
- 局部优化用 BFGS:这是 Vina 的关键设计——BFGS 是拟牛顿法,使用梯度信息,收敛远快于无梯度的方法。Vina 的打分函数被设计成可解析求导,正是为了让 BFGS 能用;
- 多线程独立运行:
exhaustiveness参数控制独立运行的次数,各线程从不同起点搜索,最后合并结果。这是「简单粗暴但有效」的并行化; - 含义:
exhaustiveness越大,找到全局最优的概率越高,但耗时线性增长。
论文的评估与后来的再评估
- 论文的报告:在一组测试集上,Vina 的姿势预测成功率(RMSD < 2 Å)显著高于 AutoDock 4,速度快约两个数量级;
- 后来的独立评估:
- Vina 在姿势预测上确实是可靠的基线,成功率通常在 35%~50%(取决于测试集);
- 但在虚拟筛选的富集能力上,与其它方法的差异并不总是显著;
- 在真实筛选基准(如 LIT-PCBA,见 242《LIT-PCBA》)上,所有对接方法的富集能力都远低于精选基准上的表现。
- 它成为事实标准的原因:免费开源、易用、速度快、结果可复现、社区大——这些工程属性的价值不低于算法本身。
论文中值得注意的细节
- 「亲和力」的单位是 kcal/mol,但这是拟合出来的经验值,论文本身就提醒不应过度解读其绝对值;
- 柔性侧链支持:Vina 支持指定受体的部分侧链为柔性,这在处理诱导契合时有用(但会显著增加搜索空间);
- 打分函数的可导性:这是刻意的设计选择,为了让 BFGS 优化可行;
- 随机性:搜索有随机成分,不固定 seed 则结果不可复现——这是使用中必须注意的。
对后续工作的影响
| 衍生工具 | 改动 |
|---|---|
| smina(见 100《Smina》) | 可自定义打分函数与更灵活的参数 |
| GNINA(见 099《GNINA 论文精读》) | 在 smina 基础上加 CNN 重打分 |
| Vina 1.2(见 098《AutoDock Vina 1.2》) | 多打分函数、Python API、大环支持 |
| QuickVina | 加速的搜索策略 |
| Vina-GPU | GPU 加速 |
Vina 的代码成为了整个开源对接生态的基础——这是它比打分函数本身更持久的贡献。
关键要点
- Vina 的打分函数比前代更简单却更准——过度复杂的物理项在参数化不足时反而有害;
- 打分函数被设计成可解析求导,以便用 BFGS 做高效局部优化;
- 无显式静电与去溶剂化项、氢键无角度依赖,这些是已知的简化;
- 它成为事实标准,工程属性(免费、易用、快、可复现)的贡献不低于算法。
延伸资源
- Vina 1.2:098《AutoDock Vina 1.2》;smina:100《Smina》;GNINA:099《GNINA 论文精读》;
- 打分函数局限:095《Docking Score》;实战:336《用 AutoDock Vina 跑 Docking》。