AutoDock Vina分子对接从0到1:完整实战流程、参数解读与避坑指南
【免费下载链接】AutoDock-VinaAutoDock Vina项目地址: https://gitcode.com/gh_mirrors/au/AutoDock-Vina
AutoDock Vina 是计算化学与药物研发领域被引用最广的开源分子对接引擎之一,它的任务可以浓缩成一句话:判断一个候选小分子(配体)会以什么姿态、多大结合亲和力进入蛋白质受体上的口袋。无论你是刚接触结构生物学的学生,还是想搭建虚拟筛选管线的研发人员,本教程都从一张真实运行的“成绩单”倒推整套流程,带你一步步跑通分子对接,并把新手最容易卡住的环节提前拆开讲明白。
一次真实对接的终端输出长什么样:先认识 mode、affinity 与 RMSD
很多人第一次跑通 Vina,盯着终端却不知道自己在看什么。一次对接顺利结束后,屏幕上会出现这样一张表:
mode | affinity | dist from best mode | (kcal/mol) | rmsd l.b.| rmsd u.b. -----+------------+----------+---------- 1 -13.23 0 0 2 -11.29 0.9857 1.681 3 -11.28 3.044 12.41 4 -11.15 3.813 12.24三个核心名词,先记在脑子里:
| 名词 | 人话解释 |
|---|---|
| mode | 算法找到的一个“候选结合姿势”(pose),按得分从好到差排序 |
| affinity | 预测的结合亲和力,单位 kcal/mol,负值代表结合过程放能,越负通常意味着结合越紧 |
| RMSD | 该姿势与参考姿势的空间差异(l.b./u.b. 是两种计算口径),单位 Å,mode 1 和它自己比当然是 0 |
mode 1 通常是所有候选姿势中最优的那个,也是后续做可视化、做分析时最常关注的起点。但请记住:这张表只是终点,难的是走到终点之前的那几步。下面我们倒推一下,拿到这张成绩单需要经历什么。
跑通分子对接的前置准备:工具链、PDBQT 输入文件与搜索盒子
一次对接背后其实是一条流水线:从配体/受体的原始结构出发,经过预处理变成 Vina 认识的格式,再划定搜索区域,最后才轮到引擎上场。整条管线可以用项目仓库里这张流程图一眼看全:
用一条 pip 命令装齐 AutoDock Vina 和 Meeko 预处理工具
Vina 本身负责“算”,但输入文件的准备工作推荐交给配套的 Meeko 工具包。建议在 conda 或 venv 虚拟环境里执行:
pip install -U numpy scipy rdkit vina meeko这条命令装入了计算引擎(vina)和三个预处理命令行工具(mk_prepare_ligand.py、mk_prepare_receptor.py、mk_export.py)。装完可以敲一下vina --version确认引擎可用。
想直接看官方示例的话,可以克隆整个项目仓库:
git clone https://gitcode.com/gh_mirrors/au/AutoDock-Vina仓库里的example/basic_docking/目录自带完整的输入与预期输出,非常适合边看边练。
为什么不能把 PDB 文件直接丢给 Vina
这是新手第一道坎:Vina 的输入格式是 PDBQT,而不是你从数据库下载的 PDB。
- PDB 文件里没有键连关系,用它描述小分子会丢信息,很多情况下直接导致对接结果不可信。
- PDBQT 相当于分子界的“统一制服”:它在 PDB 坐标基础上补上了原子类型、部分电荷、可旋转键等信息,Vina 只认这套格式。
一句话总结:预处理省掉的功夫,都会变成结果里的坑。
配体与受体的 PDBQT 制作命令
以仓库自带示例1iep(抗癌药伊马替尼与 c-Abl 激酶)为例,受体准备:
mk_prepare_receptor.py -i 1iep_receptorH.pdb -o 1iep_receptor -p -v \ --box_size 20 20 20 --box_center 15.190 53.903 16.917这条命令把受体 PDB 转成1iep_receptor.pdbqt(-p),同时额外输出一个盒子参数文件(-v加盒子参数)。配体准备:
mk_prepare_ligand.py -i 1iep_ligand.sdf -o 1iep_ligand.pdbqt注意配体输入推荐用 SDF 而非 PDB——前者自带键连信息。如果你的小分子结构里还没有氢原子,建议先用加氢工具处理后再走这一步,成败有时就差在一个氢原子上。
对接盒子:中心与尺寸怎么定、最容易错在哪
“盒子”就是 Vina 允许配体探索的三维搜索区域,可以理解成用手电筒在黑暗房间里扫一块区域,灯光照不到的地方一概不算。你需要给出中心坐标(--box_center)和三个方向的边长(--box_size,单位是 Å)。
这里有两个经典翻车点,提前打预防针:
- 别把格点数当埃用。AutoDock4 时代盒子的尺寸常用格点(0.375 Å/格)表示,Vina 直接按 Å 算,混用会得到一个巨大无比的搜索区。
- 盒子不是越大越好。搜索区超过 27000 ų(约 30×30×30)会触发警告,算法要在更大的空间里碰运气,结果反而更不稳定。原则是“刚好罩住结合口袋,不贪大”。
第一次对接的三种启动姿势:直传参数、配置文件与 AutoDock4 力场
输入文件备齐后,启动对接有三种常见姿势,按你的使用习惯任选。
姿势一:所有参数堆在命令行
适合快速试跑,一次性把条件写全:
vina --receptor 1iep_receptor.pdbqt --ligand 1iep_ligand.pdbqt \ --center_x 15.190 --center_y 53.903 --center_z 16.917 \ --size_x 20 --size_y 20 --size_z 20 \ --exhaustiveness 32 --out 1iep_ligand_vina_out.pdbqt--exhaustiveness控制搜索的“卖力程度”,默认是 8;像伊马替尼这种比较难缠的体系,官方教程建议调到 32,结果会更稳定,代价是更长的计算时间。
姿势二:把条件写进配置文件
参数多的时候,用配置文件更清爽,也好归档复现。新建一个config.txt:
receptor = 1iep_receptor.pdbqt ligand = 1iep_ligand.pdbqt center_x = 15.190 center_y = 53.903 center_z = 16.917 size_x = 20 size_y = 20 size_z = 20 exhaustiveness = 32 cpu = 8 out = 1iep_ligand_vina_out.pdbqt然后一句命令搞定:
vina --config config.txt姿势三:切换 AutoDock4 力场,走“预生成亲和力图谱”路线
Vina 默认自带 Vina 力场,会内部算好所有图谱;但如果你想用 AutoDock4 力场(例如做水合对接),就得先让 AutoGrid4 预生成亲和力图谱:
autogrid4 -p 1iep_receptor.gpf -l 1iep_receptor.glg然后带着图谱跑:
vina --ligand 1iep_ligand.pdbqt --maps 1iep_receptor --scoring ad4 \ --exhaustiveness 32 --out 1iep_ligand_ad4_out.pdbqt提醒:Vina 力场和 AutoDock4 力场的分数没有可比性,别拿两边的能量直接对比,那是拿苹果比橘子。
对接成绩单的读法:能量、RMSD 与“结果对不对”的判断标准
跑完只是第一步,会读结果才是关键能力。
能量怎么读:结合亲和力是负值,越负越好,但这个“好”是有上下文的。在 1iep 这个示例体系里,接近晶体构象的 pose 用 Vina 力场打分大约在 -13 kcal/mol 附近,AutoDock4 力场约 -14 kcal/mol。如果你的体系和教程一致,跑出的分数和这个量级差距很大,就该回头检查输入了。
怎么判断 pose 对没对:最硬核的办法是把对接结果和实验测定的晶体构象叠在一起算 RMSD,通常 < 2 Å 就算复现得不错。如果你有已知活性的配体或天然配体结构,先做一次“回对接”(把已知配体放回原口袋)验证流程,比盲目批量跑要靠谱得多。
结果转格式:PDBQT 不是通用格式,很多可视化软件(比如某些版本的 PyMOL)显示起来很怪。用 Meeko 转成 SDF,能保留正确的键级与形式电荷:
mk_export.py 1iep_ligand_vina_out.pdbqt -s 1iep_ligand_vina_out.sdf进阶玩家还可以直接调打分函数的权重,例如下面这条命令会把所有氢键的强度翻倍:
vina ... --weight_hydrogen -1.2 ...进阶玩法一:柔性对接,让指定残基的侧链也动起来
标准对接把受体当成一尊雕像,配体在雕像表面找位置。但真实蛋白在结合时往往会有侧链“让位”,这就是柔性对接想解决的问题——允许口袋里的某几个残基侧链跟着配体一起动。
以仓库示例1fpu为例,把第 315 号苏氨酸(链 A)设为柔性残基:
mk_prepare_receptor.py -i 1fpu_receptorH.pdb -o 1fpu_receptor -p -v \ -f A:315 -a --box_size 20 20 20 --box_center 15.190 53.903 16.917-f A:315就是“指定柔性残基”的关键参数。这条命令会把受体拆成两个文件:
1fpu_receptor_rigid.pdbqt:不动的刚性部分1fpu_receptor_flex.pdbqt:会动的柔性侧链
对接时把两个文件一起喂给 Vina:
vina --receptor 1fpu_receptor_rigid.pdbqt --flex 1fpu_receptor_flex.pdbqt \ --ligand 1iep_ligand.pdbqt --config 1fpu_receptor.box.txt \ --out 1fpu_ligand_flex_vina_out.pdbqt注意:柔性残基数量不要贪多,侧链越多搜索空间越复杂,跑得越慢、越容易发散。详细教程在 docs/source/docking_flexible.rst。
进阶玩法二:水合对接,把水分子也摆进结合口袋
蛋白口袋里的水分子不是摆设:有些水被牢牢锁在保守位点,配体结合时未必能把它们全部挤走,这些“钉子户”水会直接影响配体怎么摆。水合对接的思路,是给配体装饰一圈可移动的“假想水”,能放得下就加分,和受体撞了就自动丢弃。
实操分三步:
- 给配体加氢、加水,生成带水标记的 PDBQT:
scrub.py 1uw6_ligand.sdf -o 1uw6_ligandH.sdf mk_prepare_ligand.py -i 1uw6_ligandH.sdf -o 1uw6_ligand.pdbqt -w-w是关键:告诉 Vina 配体上带有一圈显式水(W 原子)。
按 AutoDock4 力场预生成亲和力图谱(水合对接是基于 AutoDock4 力场标定验证的,所以绕不开
autogrid4那一步)。对接结束后,用仓库
example/autodock_scripts/里的辅助脚本收尾:mapwater.py分析水分子在结果中的保留情况,dry.py去掉多余的水并重新打分。
对于片段级小分子(比如碎片药物发现场景),显式考虑水通常能明显改善构象预测。完整的套路见 docs/source/docking_hydrated.rst。
进阶玩法三:用 Python 脚本把对接升级成批量虚拟筛选流水线
单打独斗跑一个配体只是热身,真正的生产力在批量。Vina 提供 Python 绑定,让你在脚本里完成“加载受体 → 算图谱 → 对接 → 导出”的全过程。仓库里的 example/python_scripting/first_example.py 是一个极好的入门模板:
from vina import Vina v = Vina(sf_name='vina', verbosity=1) v.set_receptor('1iep_receptor.pdbqt') v.set_ligand_from_file('1iep_ligand.pdbqt') v.compute_vina_maps(center=[15.190, 53.903, 16.917], box_size=[20, 20, 20]) v.dock(exhaustiveness=32, n_poses=9) v.write_poses('1iep_ligand_py_out.pdbqt', n_poses=5, overwrite=True)其中sf_name可以换成ad4或vinardo来切换力场。想换成optimize()还能做局部能量优化,用来消除手动摆放姿势里的空间冲突很顺手。
批量筛选的窍门:如果先调用compute_vina_maps()再设置配体,Vina 会把 Vina 力场定义的全部 22 种原子类型图谱一次性算好。这样不管后面的配体库里出现什么原子类型,图谱都齐了,不必逐个配体重算——这正是虚拟筛选能跑起来的关键:
import glob from vina import Vina v = Vina(sf_name='vina') v.set_receptor('receptor.pdbqt') v.compute_vina_maps(center=[15.0, 53.0, 16.0], box_size=[20, 20, 20]) for path in glob.glob('library/*.pdbqt'): v.set_ligand_from_file(path) v.dock(exhaustiveness=16, n_poses=1) v.write_poses('results/' + path.split('/')[-1], overwrite=True)跑完把每个配体的最优得分汇总,就是一张可供排序的初筛榜单。脚本细节的逐步讲解见 docs/source/docking_python.rst。
新手高频翻车点与排查思路速查表
把社区里被问得最多的问题整理成一张速查表,遇到症状直接对号入座:
| 症状 | 原因 | 药方 |
|---|---|---|
报错can not open conf.txt,文件明明存在 | 文件浏览器把扩展名藏了,实际文件名是conf.txt.txt | 打开“显示文件扩展名”,确认文件名 |
| 按老视频教程敲命令报 usage errors | 老版本选项是--all,新版改成了--out | 使用vina --help核对当前选项 |
在集群上报boost thread resource错误 | 集群配置禁止创建线程,Vina 没法并行 | 联系系统管理员,或换一台能开线程的机器 |
| 同样参数跑两次,结果不一样 | 搜索算法带随机性,这不是 bug | 想要复现就固定随机种子(--seed) |
| 出现搜索空间超过 27000 ų 的警告 | 你很可能把盒子尺寸按格点(0.375 Å)填了 | 确认尺寸单位是 Å,把盒子改小 |
| 改了配体部分电荷,结果毫无变化 | Vina 用自己内部的静电处理,忽略你喂的电荷 | 想调静电就去改打分权重,改电荷没用 |
| 结果构象合理,但氢原子的位置很奇怪 | Vina 是 united-atom 打分,只关心重原子 | 正常现象;真正要管好的是输入结构的质子化状态 |
指定了--num_modes 20,输出却不足 20 个 | 输出数量还受energy_range截断限制 | 适当调大energy_range |
| 结果在 PyMOL 里显示得歪七扭八 | PDBQT 不是标准结构格式 | 用mk_export.py转成 SDF 再看 |
更完整的问题库在 docs/source/faq.rst,遇到罕见报错先去翻一翻,大概率能找到答案。
下一步行动指南:用好项目自带的“教材”目录
学到这,你已经不是对接小白了。接下来的成长路线,项目仓库本身就替你铺好了:
- 对照练习:
example/basic_docking/solution/里放着一整套预期输出(PDBQT、图谱、日志),你跑出的结果可以直接和它对答案,这种自带参考答案的练习在开源项目里相当难得。 - 按需进阶:基础掌握后,按“柔性对接 → 水合对接 → 大环分子 → 锌金属蛋白 → 多配体”的顺序逐个攻破,每个示例都有配套文档和现成数据。
- 看源码:想知道
--exhaustiveness背后到底在干什么,可以去 src/ 源码目录逛一圈,入口在 src/main/main.cpp,搜索算法在monte_carlo.cpp、quasi_newton.cpp这几个文件里。
最后给你一个可以立刻执行的小任务:克隆仓库,进入example/basic_docking/data/,照着本文的“姿势二”配好config.txt,把exhaustiveness从 8 试到 32,对比两次成绩单的差异。这一步做完,你对“搜索强度”这个概念的理解,会超过绝大多数只看教程不动手的人。
分子对接是一门实践出真知的功夫,理论看得再多,也不如亲手跑通一次对接来得踏实。打开终端,开始你的第一次 Vina 之旅吧。
【免费下载链接】AutoDock-VinaAutoDock Vina项目地址: https://gitcode.com/gh_mirrors/au/AutoDock-Vina
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考