news 2026/8/15 13:16:46

AutoDock Vina 分子对接实战:30 分钟跑通从配体到结合能的全流程

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
AutoDock Vina 分子对接实战:30 分钟跑通从配体到结合能的全流程

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.pdbqt1iep_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 ...

三步读懂这张表:

  1. mode:候选构象编号,按能量从优到劣排列,mode 1 即"最可能结合方式"
  2. affinity:预测结合自由能,-13.23 kcal/mol意味着结合很强(我们这套体系的标准答案是约 -13,说明对接成功)
  3. 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.pdbqt1iep_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.rstdocking_flexible.rstdocking_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),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/15 13:12:28

Rocky Linux 8.6 整机系统备份与迁移方案文档文档用途

Rocky Linux 8.6 整机系统备份与迁移方案文档文档用途将已部署 Harbor、Docker、cpolar、frp 的 Rocky Linux 8.6 完整系统(系统 所有软件 配置)备份,迁移至另一台物理主机。重要前提目标主机磁盘分区结构尽量与源主机保持一致;…

作者头像 李华
网站建设 2026/8/15 13:08:45

Echarts折线图进阶配置:从基础到专业的视觉与交互优化指南

1. 从“能用”到“好用”:为什么你的Echarts折线图总差点意思? 每次做数据可视化,尤其是折线图,你是不是也遇到过这种场景:数据传进去了,图表也出来了,但怎么看都觉得“丑”,或者总觉…

作者头像 李华
网站建设 2026/8/15 13:06:54

Flutter面试冲刺:30天从原理到实战,打造高含金量教程App

1. 项目概述:一次高强度面试冲刺的复盘 去年年底,我经历了一次堪称“魔鬼”的职业转型冲刺。目标很明确:从传统的移动端开发,转向以Flutter为核心技术的跨平台领域,并瞄准了业内几家头部公司。我给自己设定了30天的死线…

作者头像 李华