AutoDock Vina 分子对接完全指南拆解引擎原理亲手跑通真实药物结合案例【免费下载链接】AutoDock-VinaAutoDock Vina项目地址: https://gitcode.com/gh_mirrors/au/AutoDock-Vina想在电脑上预测某个小分子能不能钻进某个蛋白的口袋里分子对接工具 AutoDock Vina 就是干这件事的开源利器。它免费、速度快、全球实验室都在用而且只要你会敲几行命令就能得到定量结果。这篇文章不打算按部就班地教你怎么点按钮而是先带你拆开这台机器看它凭什么跑得快再以抗癌药伊马替尼Imatinib与 c-Abl 激酶的真实案例为练习场亲手完成一次完整的分子对接。上图来自项目官方文档展示了 AutoDock Vina 完成一次分子对接的完整链路预处理输入、设定搜索空间、运行搜索算法、输出结合模式。看懂这张图你就理解了整篇文章的骨架。场景导入幕先回答一个现实问题——我该信哪个候选分子想象一下你所在的课题组正在做抗肿瘤药物研发经过一轮高通量筛选手上有 2000 个候选化合物但实验测结合活性既贵又慢。这时候你希望有一个工具能先算一遍把最有可能结合靶蛋白的那几十个挑出来再去订化合物做实验。这就是虚拟筛选而分子对接就是它的核心计算引擎。问题是市面上对接程序不少为什么偏偏是 AutoDock Vina 被用得最多答案藏在它的出身里。它诞生于 Scripps 研究所的分子图形实验室Molecular Graphics Lab这个团队在分子对接领域耕耘了几十年AutoDock 系列本身就是行业老牌。Vina 是新一代的重新实现——源码、得分函数、搜索算法全部重写而不是旧版的升级补丁。官方文档里有一句话很直白与其说它是 AutoDock 的新版本不如说它是新一代。对普通用户来说Vina 最直观的三个优点你在下载它的那一刻就能感受到快官方口径是比传统 AutoDock4 快一到两个数量级一个常规对接常常几十秒到几分钟就完成。省心命令行参数极少不需要你手动调节几十个内部参数。开放Apache 2.0 协议源码在仓库里随便看还衍生出了 QuickVina2、Smina、Vinardo 等一堆改进版本。但快不是天上掉下来的。下一幕我们来拆解它为什么快。核心价值幕Vina 凭什么快三个关键设计一次讲透能量计算不是实时算而是先查表如果你对计算化学稍有了解会知道分子间的相互作用能量通常由一系列成对原子的势能函数累加而来。如果配体和受体各有一千个原子每次评估能量就要算一百万对相互作用——而搜索算法要评估成千上万次这个开销谁也扛不住。Vina 的思路是预先算好用时去查。它会在你指定的对接盒子搜索空间里铺一张三维网格把任意位置上的某种原子类型感受到的受体能量提前算好存进网格。真正搜索的时候配体原子每移动到一个位置只需从网格里取值而不是现场算一对对相互作用。这就像你要在陌生城市里找餐厅与其每次出门都现场翻地图不如先买一张标注了所有餐厅的地图出门直接查。docs/source/docking_basic.rst里提到Vina 力场下这些网格由程序在对接前内部自动计算而如果你用 AutoDock4 力场则需要先用autogrid4预计算亲和力图谱affinity maps这也是为什么基础教程里会有生成.gpf和一堆.map文件的那一步。搜索不是瞎撞而是局部精修全局抽样光算得快还不够还得找得准。Vina 的搜索算法可以这样理解它启动若干次独立的随机搜索次数由--exhaustiveness参数控制每次从随机构象出发用Broyden–Fletcher–Goldfarb–ShannoBFGS梯度优化算法反复做随机扰动→局部优化→按能量决定接受或拒绝的循环。每次局部优化都在位置、取向、可旋转键二面角组成的坐标空间里做精细调整。这比传统遗传算法AutoDock4 的做法在同样工作量下能探索得更充分也是它提速的重要来源。有趣的是Vina 的每一次独立运行都可能记住多个有希望的中间构象最后自动做合并、聚簇、排序所以一次运行往往能输出 9 到 20 个结合模式供你挑选。FAQ 里专门解释了exhaustiveness的真实含义——它决定独立运行的次数也同时限制并行度。得分函数小而精Vina 的得分函数只有少数几项却抓住了关键空间位阻、疏水作用、氢键贡献再加一个和配体柔性相关的项。它采用联合原子模型united-atom只对重原子显式建模氢原子的位置在输出中是任意摆放的——但氢键供体/受体的判定又依赖输入结构的正确质子化。这个看似矛盾的设计正是它小而精的体现少算一些无关紧要的项把力气花在决定结合的关键相互作用上。现在原理讲完了是时候动手了。实践闯关幕以伊马替尼与 c-Abl 为靶完成一次真实分子对接我们选用的案例来自项目自带示例目录example/basic_docking/把抗癌药物伊马替尼Imatinib对接进 c-Abl 激酶结构域PDB 编号 1iep。所有输入文件都放在该目录的data/子目录下跑完后可对照solution/里的预期输出验证你的结果。在开始之前你需要准备环境。官方文档docs/source/docking_requirements.rst建议用 Python 包 Meeko 负责配体与受体的预处理推荐在 Conda 环境里一次性装齐conda create -n vina python3 conda activate vina conda config --env --add channels conda-forge conda install -c conda-forge numpy scipy rdkit vina meeko gemmi autogrid装好之后终端里应当能调用mk_prepare_ligand.py、mk_prepare_receptor.py、mk_export.py这三个命令。可以用which mk_prepare_ligand.py验证。下面开始闯关。关卡一把受体蛋白变成可对接的 PDBQT 文件为什么需要这一步Vina 只认 PDBQT 格式——它比普通 PDB 多了原子类型和部分电荷信息。直接从 PDB 数据库下载的晶体结构往往含氢不全、还带着水分子和共结晶配体直接对接会出问题。在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官方已帮你做好了加氢处理的1iep_receptorH.pdb-o指定输出文件名的前缀-p生成受体 PDBQT-v配合--box_size和--box_center生成对接盒子的配置文件和可视化文件。这个命令会产出三个文件1iep_receptor.pdbqt对接用、1iep_receptor.box.txt盒子参数可直接当 Vina 的配置文件、1iep_receptor.box.pdb用 PyMOL 可视化盒子用的。盒子中心(15.190, 53.903, 16.917)是活性位点的大致位置尺寸 20×20×20 Å——你可以把盒子想象成配体只允许在这个立方体里活动。关卡二准备配体分子——千万避开 PDB 格式为什么强调这点官方教程的原话是强烈建议不要用 PDB 格式准备小分子因为它不含键连接信息。你的实验成败有时就悬在一个氢原子上。这里我们使用 SDF 格式自带键连接与 3D 构象mk_prepare_ligand.py -i 1iep_ligand.sdf -o 1iep_ligand.pdbqt如果输入的配体缺氢可以先用 Molscrub 的scrub.py补氢和生成 3D 构象再交给mk_prepare_ligand.py。质子化状态一定要检查——它决定了配体哪些原子是氢键供体或受体而这是得分函数的重要输入。关卡三正式跑对接——两种力场二选一现在到了重头戏。Vina 支持两种力场用法差别正好印证了第一幕讲的查表思想方式 AVina 力场无需预计算图谱新手推荐直接使用关卡一生成的配置文件即可vina --receptor 1iep_receptor.pdbqt --ligand 1iep_ligand.pdbqt \ --config 1iep_receptor.box.txt --exhaustiveness 32 --out 1iep_ligand_vina_out.pdbqt--exhaustiveness 32是把默认的 8 提高到 32——伊马替尼是个较灵活的分子默认参数下 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 ...方式 BAutoDock4 力场需先预计算亲和力图谱先用带-g选项的命令生成 GPF 文件再调用 AutoGrid4mk_prepare_receptor.py -i 1iep_receptorH.pdb -o 1iep_receptor -p -v -g \ --box_size 20 20 20 --box_center 15.190 53.903 16.917 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对照solution/目录下的预期输出Vina 力场最佳结合能约-13 kcal/molAutoDock4 力场约-14 kcal/mol。注意两种力场的能量不可互相比较官方文档特别提醒过这一点——你只能在同一力场内部横向对比不同配体。这里顺带解释一个常见误解结合能是负值数值越小负得越多代表结合越稳定通常在 -6 到 -12 kcal/mol 之间算是有希望的候选。但它只是计算预测最终还是要靠实验验证。关卡四把结果导出成通用格式并挑战 Python 脚本化对接输出是 PDBQT很多可视化软件支持不好。用 Meeko 转成 SDF 最稳妥因为它会把 SMILES 写进 PDBQT 头部转出的分子能保留正确的键级和形式电荷mk_export.py 1iep_ligand_vina_out.pdbqt -s 1iep_ligand_vina_out.sdf拿到 SDF 后你可以用 PyMOL 等软件叠合到晶体结构上观察配体是否落在活性位点、有没有形成关键氢键。如果你觉得命令行还是不够高效Vina 提供了 Python 绑定示例脚本就在example/python_scripting/first_example.py。跑通一个最简单的流程只需要十几行from vina import Vina v Vina(sf_namevina) 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 before minimization: %.3f (kcal/mol) % energy[0]) energy_minimized v.optimize() print(Score after minimization : %.3f (kcal/mol) % energy_minimized[0]) v.dock(exhaustiveness32, n_poses20) v.write_poses(1iep_ligand_vina_out.pdbqt, n_poses5, overwriteTrue)这段代码做了什么Vina(sf_namevina)创建对接对象指定力场换成ad4或vinardo即可切换compute_vina_maps()在给定中心与尺寸下预计算亲和力网格——正是第一幕讲的查表思想在 API 层的体现score()与optimize()前者只算当前构象的能量适合快速打分后者做一次局部能量最小化适合消除手动摆放造成的原子冲突dock()真正执行搜索n_poses20表示保留 20 个构象最后只写出前 5 个。如果你要批量筛选几百个配体建议在compute_vina_maps()之前不加载配体——这样会一次性计算 Vina 力场定义的全部 22 种原子类型的网格之后每个配体都能复用省去重复计算。这就是虚拟筛选的标准做法。反思与延伸幕那些让结果翻车的坑和值得继续探索的方向新手最容易踩的 3 个坑坑一搜索空间单位搞错。从 AutoDock4 转过来的用户容易把盒子尺寸写成网格点数AutoDock4 的格子间距 0.375 Å而 Vina 的尺寸单位是 Å。如果你看到search space volume 超过 27000 ų的警告多半就是这个原因。盒子的原则是越小越好但不能小过活性位点超过 30×30×30 Å 的空间请务必提高exhaustiveness。坑二输入结构没有正确质子化。联合原子模型不看氢原子的坐标却要看氢原子来判断氢键供体/受体所以加氢处理直接决定你能否找到正确的结合模式。FAQ 里列出为什么得不到正确构象的十余条可能原因质子化错误排在前列。坑三期望一次跑出稳定答案。对接算法是非确定性的同一输入每次运行结果都可能有细微差异。想复现在参数完全一致的前提下手动指定相同的随机种子--seed即可。而想提高命中率最有效的两招是提高exhaustiveness和缩小搜索盒子。想更进一步这些高级玩法都在仓库里本项目其实是个一站式宝库官方文档覆盖了多种进阶场景每个都配有可直接对照的示例目录柔性对接让受体个别侧链动起来适合诱导契合明显的靶点见docs/source/docking_flexible.rst与example/flexible_docking/水合对接显式考虑水分子对结合的介导作用见docs/source/docking_hydrated.rst与example/hydrated_docking/锌金属蛋白对接用扩展的 AutoDock4Zn 力场处理配体与锌离子的配位需要zinc_pseudo.py等脚本往受体里加四面体伪原子见docs/source/docking_zinc.rst大环化合物对接处理大环分子在对接过程中的柔性构象见example/docking_with_macrocycles/多配体同时对接一次对接多个配体适合研究多亚基位点见example/mulitple_ligands_docking/。顺带一提Vina 生态里还有 Smina可调得分项、Vinardo改进版得分函数、QuickVina2加速搜索等衍生版本官方 FAQ 也解答了如何微调得分函数权重这类问题比如--weight_hydrogen -1.2可以加强氢键贡献。你的下一步行动清单克隆项目到本地git clone https://gitcode.com/gh_mirrors/au/AutoDock-Vina然后进入example/basic_docking/data/把本文的四个关卡完整跑一遍对照solution/验证把案例换成你自己的靶点去 PDB 数据库下载受体结构准备好配体 SDF按同样的流程走通尝试 Python 绑定把example/python_scripting/first_example.py跑通再尝试写一个循环批量对接多个配体保持实验验证的习惯对接结果永远是候选清单真正的结合数据要靠实验说话。分子对接是一门手艺它的输入准备比参数调优更考验功力而 Vina 把计算本身变得足够快、足够省心让你可以把时间花在真正重要的判断上——选对靶点、备好结构、读懂结果。现在就从第一个案例开始让 AutoDock Vina 帮你把候选分子从看起来可能变成数据上有把握吧。【免费下载链接】AutoDock-VinaAutoDock Vina项目地址: https://gitcode.com/gh_mirrors/au/AutoDock-Vina创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考