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),可以理解为“随机抖动+局部调优”的循环:
- 随机生成一个配体构象和位置。
- 局部优化到最近的“谷底”。
- 对结果加一点随机扰动。
- 再局部优化,看有没有更好的。
- 重复几百上千次,最后输出 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 假定受体是刚性的——大蛋白的柔性区域(如 loop 区)完全被忽略。如果靶点有显著构象变化(如激酶 DFG-out),别指望 Vina 能正确预测。你需要提前准备多个受体构象(ensemble docking)或改用 Glide / 柔性对接。
最后说一句,Vina 虽然算法简单,但在药物设计的早期快速筛选阶段,它依然是最实用的工具之一。搭配 Python 批量任务调度和 RDKit 预处理,一套完整的虚拟筛选管线半天就能搭起来。这也是为什么本课程要用 Python 去调 Vina 的参数——自动化、可控、可复现,才是工业级做法。