AutoDock Vina 分子对接实战:30 分钟跑通从配体到结合能的全流程
【免费下载链接】AutoDock-VinaAutoDock Vina项目地址: https://gitcode.com/gh_mirrors/au/AutoDock-Vina
如果你正在研究"某款药物分子为什么能抑制某个疾病靶点",或者想筛选一批候选化合物与蛋白质的结合能力,那么你迟早会被同一件事卡住:如何快速、可信地预测分子之间的结合强度。AutoDock Vina 就是为此而生的开源分子对接引擎,它以极快的速度评估配体在受体结合口袋中的上百万种摆放方式,并给出按能量排序的候选构象。本指南将带你以一条真实案例为主线,从零跑通一次完整的分子对接,并顺藤摸瓜掌握灵活对接与 Python 自动化两个进阶技能。
上图是项目自带的分子对接工作流程总览:从配体、受体的结构预处理,到 Meeko 生成 PDBQT 输入文件,再到对接计算与结果导出。我们下面的每一步都能在这张图上找到对应位置。
配钥匙之前,先想清楚这把锁长什么样
分子对接要回答的问题,可以想象成配钥匙:蛋白质的活性口袋是一把锁,候选药物是钥匙毛坯,对接算法就是替你反复试磨、找出最贴合锁芯的那把。但与现实中配钥匙不同,Vina 不需要你真把钥匙插进去——它用一套经验势能函数(力场)打分,把"锁与钥匙匹配得好不好"换算成一个数值:结合自由能(单位 kcal/mol,数值越负,结合越强)。
Vina 凭什么在同类工具里脱颖而出?三点:一是快,得益于预计算网格(把受体周围的势能预先算好,存进三维网格文件),搜索速度比传统方法快出数倍;二是全,内置三种力场(vina、vinardo、ad4),适配刚性与柔性受体、水合对接、大环分子等场景;三是轻,命令行工具简洁到一条命令就能完成对接,同时也提供 Python 绑定,方便你把它嵌入自己的筛选流程。
一句话总结定位:它是目前最容易上手、又足够专业的分子对接引擎。接下来我们不再纸上谈兵,直接用一个真实病例做完整实操。
一条主线走通:把抗癌药伊马替尼放回它的靶点口袋
我们的实验对象是经典体系:抗癌药**伊马替尼(imatinib)**与它的靶点 c-Abl 激酶(PDB 编号 1iep),后者是慢性髓性白血病治疗的关键蛋白。这个体系的示例数据已经打包在项目里,我们只需照着做即可。
第 0 步:拉代码、装工具
先获取项目源码(其中的example/目录自带全部示例数据),再安装两个核心 Python 包:
git clone https://gitcode.com/gh_mirrors/au/AutoDock-Vina cd AutoDock-Vina pip install -U numpy scipy rdkit vina meeko gemmi prody上面这条命令做了三件事:
vina是对接引擎本体;meeko负责把分子文件转换成对接专用的 PDBQT 格式;rdkit等是 meeko 的化学计算依赖。建议在虚拟环境(如 conda)中安装,避免污染系统 Python。
装完后确认命令可用:
vina --version mk_prepare_ligand.py --help看到版本号与帮助信息,说明环境就绪。✅
第 1 步:让受体"裸体"出场(制备受体)
受体蛋白在晶体结构里往往带着杂原子和水分子,对接前要清理成标准格式。Vina 1.2 的新工具mk_prepare_receptor.py一条命令搞定:
cd example/basic_docking/data 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逐项拆解参数:
-i:输入的受体 PDB 文件(示例已含氢原子,H后缀即 "Hydrogen")-o:输出文件名的基底,所有产物都以此为前缀-p:生成受体 PDBQT 文件(对接引擎真正吃的格式)-v:同时生成对接盒子信息,包括box.txt配置文件和可可视化的box.pdb--box_size与--box_center:划定搜索空间——一个边长 20 Å、中心在给定坐标的正方体,相当于告诉 Vina "钥匙只在这个锁芯区域里试"
这步会产出1iep_receptor.pdbqt和1iep_receptor.box.txt。其中box.txt是纯文本,内容如下,我们下一节直接复用它:
center_x = 15.190 center_y = 53.903 center_z = 16.917 size_x = 20.0 size_y = 20.0 size_z = 20.0第 2 步:给配体"洗个澡"(制备配体)
接下来把配体 SDF 转成 PDBQT。为什么不用 PDB 格式?因为 PDB 不含键连接信息,算法无法判断哪些原子之间成键,直接会影响可旋转键的识别。SDF 则自带键级与电荷,是推荐输入:
mk_prepare_ligand.py -i 1iep_ligand.sdf -o 1iep_ligand.pdbqt输出文件1iep_ligand.pdbqt里标注了每个可旋转键的位置——Vina 在搜索时正是围绕这些键"扭动"配体,就像配钥匙时调整钥匙齿的各个角度。
第 3 步:按下对接按钮(执行计算)
受体、配体、盒子三者齐备,运行这一条命令:
vina --receptor 1iep_receptor.pdbqt --ligand 1iep_ligand.pdbqt \ --config 1iep_receptor.box.txt \ --exhaustiveness 32 --out 1iep_ligand_vina_out.pdbqt参数说明:
--receptor/--ligand:刚体受体与配体的 PDBQT 文件--config:直接引用上一步生成的盒子配置,免去手敲坐标--exhaustiveness 32:穷举度,衡量搜索"下多少功夫"。默认 8 足够快,但伊马替尼这种大而灵活的分子用默认值偶发找不到正确姿态,调到 32 结果更稳定(代价是耗时约翻 4 倍)--out:结果输出文件
命令行运行期间,你会看到进度条从 0% 走到 100%,然后打印一张结果表。终端里这几十秒的等待,背后是算法评估了海量配体姿态——这正是 Vina "极速计算"的体现。
第 4 步:读结果,只看三列
对接结束后的输出大致如下:
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 ...三步读懂这张表:
- mode:候选构象编号,按能量从优到劣排列,mode 1 即"最可能结合方式"
- affinity:预测结合自由能,
-13.23 kcal/mol意味着结合很强(我们这套体系的标准答案是约 -13,说明对接成功) - rmsd l.b./u.b.:该构象与最优构象的空间差异,单位 Å。两个值接近 0,说明它们几乎同一姿态;若其他 mode 的 RMSD 高达 10 以上,说明那是"另一种摆法"——通常只需关注最优的几个
经验法则:affinity 越负越强;同一体系多次运行 mode 1 的能量与姿态稳定,则结果可信。数值本身的意义要和同体系横向比,不要跨受体比较。
进阶一:让靶点侧链动起来(灵活对接)
前面的流程把受体当成一块"死板"的锁——这在现实中不成立:结合时,口袋里的某些氨基酸侧链会摆动来"拥抱"配体。Vina 允许你圈定少数柔性残基参与运动。
适用场景:晶体结构里口袋较窄、配体进入需要侧链让位的情况。示例是 c-Abl 的 Thr315 残基(伊马替尼耐药突变的关键位点)。
操作示例:制备受体时用-f指定柔性残基,-a忽略结构缺失部分:
cd example/flexible_docking/data mk_prepare_receptor.py -i 1fpu_receptorH.pdb -o 1fpu_receptor -p -v \ --box_size 20 20 20 --box_center 15.190 53.903 16.917 \ -f A:315 -a注意这次会生成两个受体文件:1fpu_receptor_rigid.pdbqt(刚体部分)和1fpu_receptor_flex.pdbqt(Thr315 的柔性侧链)。对接时用--flex把它们一起喂给 Vina:
vina --receptor 1fpu_receptor_rigid.pdbqt --flex 1fpu_receptor_flex.pdbqt \ --ligand 1iep_ligand.pdbqt --config 1fpu_receptor.box.txt \ --exhaustiveness 32 --out 1fpu_ligand_flex_vina_out.pdbqt结果怎么读:结果表结构完全相同,但输出 PDBQT 里同时包含了配体姿态和柔性侧链的构象。观察 mode 1 中 Thr315 侧链的朝向,你能直观看到"侧链为配体让路"的过程。注意:引入柔性会显著增加自由度,exhaustiveness 建议同步调高,否则搜索不充分。
进阶二:从"敲命令"到"写脚本"(Python 编程对接)
当你要批量筛选上百个配体时,逐条敲命令会让人崩溃。Vina 提供了 Python 绑定,把对接变成几行可控代码。
适用场景:虚拟筛选(虚拟筛选)、自动化工作流、需要把对接嵌入机器学习管线的场合。
操作示例:项目example/python_scripting/first_example.py就是一个完整范例,核心逻辑如下:
from vina import Vina v = Vina(sf_name='vina') # 选择力场,可换 ad4 / vinardo 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]) energy = v.score() # 给当前姿态打分 print('Score: %.3f (kcal/mol)' % energy[0]) v.dock(exhaustiveness=32, n_poses=20) # 执行对接,保留 20 个构象 v.write_poses('out.pdbqt', n_poses=5) # 只写出前 5 个最优姿态在example/python_scripting/目录下直接运行:
python first_example.py结果怎么读:脚本会在终端打印"Score before/after minimization"两行能量,并在目录下生成1iep_ligand_minimized.pdbqt与1iep_ligand_vina_out.pdbqt。minimization 前后的差值告诉你局部优化的收益;n_poses参数控制写出的构象数量。想批量对接,只需在外层for循环里替换配体文件名即可。
进阶三:把水分子也算进账本(水合对接)
蛋白结合口袋里的水分子不是摆设:有些水被牢牢锁住,配体结合时必须与它们协同成"水桥"。默认对接忽略水,会导致片段类药物(如尼古丁,示例体系 1uw6)的评分失真。Vina 1.2 支持给配体"装饰"上可取舍的水分子。
适用场景:片段筛选(fragment-based drug discovery)、口袋中水分子保守性强的情况。
操作示例:先用scrub.py补氢,再用mk_prepare_ligand.py的-w选项挂水:
cd example/hydrated_docking/data scrub.py 1uw6_ligand.sdf -o 1uw6_ligandH.sdf mk_prepare_ligand.py -i 1uw6_ligandH.sdf -o 1uw6_ligand.pdbqt -w随后用配套脚本mapwater.py生成水原子亲和力地图(example/autodock_scripts/目录下):
python ../autodock_scripts/mapwater.py -r 1uw6_receptor.pdbqt -s 1uw6_receptor.W.map结果怎么读:水合对接的结果 PDBQT 中,水分子以W原子类型出现。对比"有水/无水"两次对接的 mode 1,你会发现带水对接的构象 RMSD 通常更接近晶体结构——这就是水分子参与结合的直接证据。
避坑指南:五个高频报错与误区
1. 现象:报错Command line parse error,或提示缺少 receptor/ligand原因:参数名拼错、或忘了给搜索空间参数(center/size)。解决办法:执行vina --help核对全部参数名,务必确认--receptor、--ligand与--config(或center_x等六个参数)同时齐备。
2. 现象:配体用 PDB 格式制备后,可旋转键数量异常原因:PDB 格式不记录键连接,导致成键判断错误。解决办法:改用 SDF 输入,通过mk_prepare_ligand.py转换;这几乎是官方文档唯一强烈警告的格式陷阱。
3. 现象:--scoring ad4与--scoring vina的分数差别很大,以为算错了原因:两种力场的能量标度不同。ad4 需要先用autogrid4预计算亲和力图(--maps参数),而 vina 力场自动内部计算。两者分数不可相互比较,选一种力场后在同一体系内纵向对比。
4. 现象:用默认 exhaustiveness=8 对接大分子配体,结果每次跑都不一样原因:搜索不充分,算法陷入局部最优。解决办法:把--exhaustiveness提高到 24~32,必要时固定--seed保证可复现(--seed 42即可)。
5. 误区:以为输出目录里的.map、.glg、.fld是多余文件,顺手删掉原因:这些是 AD4 力场对接必需的网格文件与 AutoGrid 日志(.glg 是日志,.map/.fld 是势能网格)。若后续想切换--scoring ad4重跑,就得重新生成它们。建议单独归档,别与输入文件混放。
继续深挖:项目里藏着的宝藏
完成主线实验后,这些路径值得逐一打开:
docs/source/:官方教程全集,docking_basic.rst(本指南的权威版)、docking_python.rst、docking_flexible.rst、docking_hydrated.rst分别对应我们走完的三条路线example/:七个实战案例,除已用的三个外,还有大环分子对接(docking_with_macrocycles/)、锌金属蛋白对接(docking_with_zinc_metalloproteins/)、多配体批量对接(mulitple_ligands_docking/)src/main/main.cpp:命令行参数的全部定义,--num_modes、--energy_range、--spacing等进阶参数都在这里,读完你对 Vina 的掌控会上一个台阶src/lib/:核心算法源码,如monte_carlo.cpp(蒙特卡洛搜索)、quasi_newton.cpp(局部优化)、ad4cache.cpp(AD4 网格缓存),想理解"快"的秘密可以到这里data/:原子参数文件,AD4_parameters.dat是 AD4 力场的灵魂
现在,把第一次对接留在你的终端里
回顾一下你刚才完成的旅程:理解了"对接即配钥匙"的核心思想,用三条命令把抗癌药伊马替尼放回 c-Abl 的口袋,读懂了结合能表格,又掌握了灵活侧链、Python 批处理与水分子的三个进阶玩法。你已经不是"听过分子对接"的人,而是跑通过一次完整分子对接的人。
接下来请打开终端,从git clone开始,或者直接进入example/basic_docking/data目录,把本指南的命令亲手敲一遍。看到进度条跑满、结果表打印出来的那一刻,你会明白:分子对接,真的没有想象中那么远。🚀
【免费下载链接】AutoDock-VinaAutoDock Vina项目地址: https://gitcode.com/gh_mirrors/au/AutoDock-Vina
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考