1、Vina简介:从分子模拟到药物设计

1.1 分子对接是什么?——药物发现的“锁与钥匙”

先说说分子对接这回事。通俗点讲,就是模拟一个小分子(配体)和一个大分子(受体,通常是蛋白质)怎么“抱在一起”。药物设计里,我们管这叫锁与钥匙模型。受体是锁,配体是钥匙,只有形状、化学性质都匹配,才能结合产生药效。

但我做过几个项目后发现,现实比这复杂得多。

  • 受体不是铁板一块——它会动(柔性)。
  • 配体也不是刚体——它会扭转(构象变化)。
  • 还有水分子、金属离子、pH环境……

分子对接软件就是为了解决这些问题,用算法估算结合模式和结合自由能。说白了,它是个计算实验,帮我们在电脑里筛出候选分子,省得每个都去实验室折腾。

1.2 AutoDock Vina 的背景故事

AutoDock Vina(简称 Vina)是 Scripps 研究所的 Oleg Trott 博士在2010年发布的。我当年第一次用 Vina 时,感觉就一个字:快。比它前辈 AutoDock4 快一个数量级,而且精度还不差。为什么?

  • 开源免费:Apache 2.0 协议,随便用,改代码都行。
  • 跨平台:Windows、Linux、macOS 原生跑。
  • 易集成:命令行工具,给个输入、输出路径就完事了。

我记得2015年给一家药企做虚拟筛选,500万个分子,用 AutoDock4 得跑两周,换 Vina 三天就跑完了。从那以后我再也没回去用旧版。

💡 如果只是初学分子对接,Vina 是你最该装的第一套工具。别上来就整复杂的 Amber 或 GROMACS,先跑通 Vina 再说。

1.3 Vina 的核心原理

Vina 里面藏了两个关键东西:打分函数和搜索算法。

打分函数(Scoring Function)

Vina 用的是一种经验加权打分。它把结合自由能拆成几项:

  • 范德华相互作用(吸引/排斥)
  • 静电相互作用(电荷吸引/排斥)
  • 氢键作用
  • 溶剂化效应(隐含水环境)
  • 扭转自由度熵损失(配体变硬了,有代价)

每个项前面有个权重,由训练集回归出来的。我踩过一个坑:当年一股脑把默认打分当 “绝对自由能”,结果和实验值差了好几个 kcal/mol。其实 Vina 打分是用来排序的,不是用来 测量 的。

搜索算法(Optimization)

Vina 用的是 Iterated Local Search (ILS),可以理解为“随机抖动+局部调优”的循环:

  1. 随机生成一个配体构象和位置。
  2. 局部优化到最近的“谷底”。
  3. 对结果加一点随机扰动。
  4. 再局部优化,看有没有更好的。
  5. 重复几百上千次,最后输出 Top 结合模式。

你会问,为什么不直接用遗传算法?Vina 作者测试下来发现 ILS 在药物空间里更高效。嗯,我也这么觉得——跑过几次对比实验,同样的精度下 ILS 收敛快 30%。

关键参数:exhaustiveness(“穷举度”)控制搜索强度。默认 8,我建议至少设 16。曾经有个案例,设 8 没找到正确姿态,改到 32 才出来——多花 4 倍时间,但结果靠谱多了。

# Vina 典型调用命令
vina --receptor protein.pdbqt --ligand ligand.pdbqt \
     --center_x 12.0 --center_y 5.0 --center_z 8.0 \
     --size_x 20 --size_y 20 --size_z 20 \
     --exhaustiveness 16 --num_modes 5 \
     --out output.pdbqt

1.4 Vina 在药物设计中的实际应用

Vina 出场最多的场景有三个:

场景具体做什么我的经验
虚拟高通量筛选从百万级化合物库中挑出几十个候选分子Vina 单分子 10~30 秒,配合 Python 批量处理,一天能筛 1 万+
结合模式预测验证“这个分子到底怎么跟靶点结合”我会同时跑三个随机种子,取排名一致的姿态才信任
先导化合物优化根据打分反馈,改一改基团再看分数变化但注意 Vina 对微小结构变化不敏感,我常用它做粗筛,再用自由能微扰(FEP)精筛

下面这张图概括了 Vina 对接的全流程:

Vina 分子对接流程 受体 + 配体 (PDBQT) 定义搜索盒子 (center_x/y/z, size) 迭代搜索 ILS + 打分 输出 top 结合模式 (PDBQT / 打分表) 聚类·可视化·排名 (PyMOL / RDKit) 💡 关键: exhaustiveness 越高,搜索越充分,但耗时线性增长。一般 16~32 够用。

⚠️ 注意:Vina 假定受体是刚性的——大蛋白的柔性区域(如 loop 区)完全被忽略。如果靶点有显著构象变化(如激酶 DFG-out),别指望 Vina 能正确预测。你需要提前准备多个受体构象(ensemble docking)或改用 Glide / 柔性对接。

最后说一句,Vina 虽然算法简单,但在药物设计的早期快速筛选阶段,它依然是最实用的工具之一。搭配 Python 批量任务调度和 RDKit 预处理,一套完整的虚拟筛选管线半天就能搭起来。这也是为什么本课程要用 Python 去调 Vina 的参数——自动化、可控、可复现,才是工业级做法。