AutoDock Vina 1.2(2021)是 Vina 发布十余年后的重要更新。它的改进主要在工程可用性而非算法核心——但这些改进对实际工作流的影响很大。
主要改进
| 改进 | 意义 |
|---|---|
| 多打分函数 | vina、vinardo、ad4 可选 |
| Python API | 可嵌入 Python 流程,无需子进程调用 |
| 大环支持 | 可处理大环化合物的柔性 |
| 批量对接 | 一次处理多个配体,复用格点 |
| 水分子模型 | 支持部分显式水(AD4 打分时) |
| 改进的输出 | 更详细的能量分解 |
Python API:最实用的改进
from vina import Vina
v = Vina(sf_name="vina", cpu=8, seed=42, verbosity=1)
v.set_receptor("receptor.pdbqt")
# 计算格点(只需一次,可复用于多个配体)
v.compute_vina_maps(center=[11.2, 23.4, -5.7], box_size=[22, 22, 22])
# 批量对接
results = []
for name, ligand_path in ligands:
v.set_ligand_from_file(ligand_path)
# 可选:先做局部优化
energy_before = v.score()
v.optimize()
v.dock(exhaustiveness=16, n_poses=5)
energies = v.energies()
results.append({"name": name, "score": float(energies[0][0])})
v.write_poses(f"out/{name}.pdbqt", n_poses=3, overwrite=True)
# 关键优势:
# 1) 格点只算一次,批量对接时省下大量时间
# 2) 无需启动子进程,减少 I/O 开销
# 3) 可以在内存中处理,便于集成到生成模型的打分循环(见 351)
# 4) 能直接拿到能量分解
「格点复用」是批量筛选的关键优化:命令行版本每次调用都要重算格点,而 API 版本可以算一次用于所有配体——对十万级筛选,这个差异很可观。
三种打分函数的对比
| 打分函数 | 特点 | 建议 |
|---|---|---|
vina |
原始的经验打分 | 默认选择 |
vinardo |
重新参数化,项更少 | 某些体系上富集更好,值得试 |
ad4 |
AutoDock 4 的力场打分 | 需要预计算格点;含金属参数 |
# 命令行切换
vina --scoring vinardo --receptor rec.pdbqt --ligand lig.pdbqt ...
# Python API
v = Vina(sf_name="vinardo")
# 实践建议:
# 在自家体系上用已知活性/非活性分子测试三种打分函数,
# 比较富集因子(EF@1%),选表现最好的
# → 不同靶点上的最优选择可能不同
#
# Vinardo 的设计思路:
# 比 Vina 项更少(去掉了一个高斯项),
# 重新在更新的数据上拟合
# → 在某些基准上姿势预测与富集都有改善
大环支持
- 问题:大环的环内键在传统对接中被当作刚性,因为处理环的柔性需要特殊算法;
- Vina 1.2 的方案:配合 Meeko 的
--macrocycle选项,把大环临时「打开」成柔性链,对接后再闭合; - 意义:大环化合物(见 373《大环化合物 Macrocycle》)是重要的药物模态,之前的对接工具处理它们时会严重低估柔性;
- 使用:
mk_prepare_ligand.py -i macrocycle.sdf -o out.pdbqt --macrocycle(见 106《Meeko》)。
能量分解的用途
v.set_ligand_from_file("ligand.pdbqt")
v.dock(exhaustiveness=32)
# 获取详细的能量项
energies = v.energies()
# 返回每个姿势的:
# [总分, 内部能量, 各项贡献...]
# 用途:
# 1) 诊断异常高分
# 如果某个分子分数极好,看是哪一项贡献的
# → 全靠疏水项 = 可能是「大而油」的假阳性
#
# 2) 比较不同分子的结合模式差异
# 氢键项 vs 疏水项的比例,反映结合的性质
#
# 3) 内部能量检查
# 配体的内部能量过高 = 处于扭曲的高能构象
# → 该姿势可能不合理
版本迁移的注意事项
- 结果可能与 1.1 不同:算法细节有调整,历史数据与新数据不应直接混合比较;
- PDBQT 准备工具变更:官方推荐用 Meeko(见 106《Meeko》)替代旧的 MGLTools 脚本(后者依赖 Python 2);
- 固定 seed 仍然必要:搜索仍有随机成分;
- 锁定版本:在生产流程中固定 Vina 版本,保证结果可复现。
实际的选型建议
| 场景 | 建议 |
|---|---|
| 大规模批量筛选 | Python API + 格点复用 |
| 嵌入生成模型打分 | Python API(见 351《在分子生成中加入 Docking Score 约束》) |
| 需要 CNN 重打分 | GNINA(见 099《GNINA 论文精读》) |
| 需要自定义打分项 | smina(见 100《Smina》) |
| 大环化合物 | Vina 1.2 + Meeko --macrocycle |
| 金属蛋白 | ad4 打分函数 |
关键要点
- Python API 与格点复用是批量筛选最实用的改进;
- 三种打分函数应在自家体系上用已知活性分子比较富集因子后选择;
- 大环化合物必须配合 Meeko 的
--macrocycle才能正确处理柔性; - 能量分解可用于诊断「全靠疏水项」的假阳性。
延伸资源
- Vina 原论文:097《AutoDock Vina 论文精读》;smina:100《Smina》;GNINA:099《GNINA 论文精读》;
- Meeko:106《Meeko》;实战:336《用 AutoDock Vina 跑 Docking》。