第2节:分子对接基本原理与评分函数
分子对接,说白了就是预测小分子配体与蛋白质受体之间的结合模式。你在药物设计项目里,最关心的问题无非就是:这个化合物能不能结合上去?结合得有多紧?
这节内容,我想带你从底层逻辑上搞懂两个核心问题:对接到底在算什么,以及打分函数是怎么判断好坏的。只有把这两个地基打牢,后面调参和特征构建才不会跑偏。
2.1 分子对接的本质
我习惯把对接想象成一个锁和钥匙的匹配游戏。蛋白质是锁,小分子是钥匙。但真实的蛋白质锁并不是死的——它是柔性的,会动。小分子钥匙也不是完全刚性的,它有可旋转的键,可以扭动。
对接的三要素:
- 构象空间搜索:找钥匙用哪种姿势插进锁孔
- 位姿评估:判断每个姿势好不好
- 排序与挑选:输出最好的几个候选姿势
我在一个激酶项目中遇到过这样的情况——分子模拟跑出来的结合模式看着很漂亮,但实际活性测试完全不匹配。后来复盘发现,罪魁祸首就是我把受体处理得太刚性了,结合口袋的侧链构象根本不允许配体钻进去。
2.2 刚性受体与柔性侧链的权衡
你想想看,如果完全考虑蛋白质的柔性,计算量会爆炸。AutoDock Vina默认使用刚性受体+柔性配体的模型,这就相当于认死了锁的形状,只让钥匙变形去适应锁。
但现实情况是,很多蛋白质的结合口袋在结合配体后会发生诱导契合。举个例子,一个柔性的侧链(比如酪氨酸的苯环)可能会翻转,给配体让路。如果你的受体模型里没有这个自由度,那打分就一定会失准。
我做过的其中一个改进方案是这样的:先用常规对接跑一轮,然后挑几个高分位姿,手动检查侧链是否与配体有空间冲突。如果有,就把对应侧链设成柔性残基重新对接。
2.3 打分函数的核心逻辑
打分函数,说白了就是一个数学函数。给它一个配体位姿,它返回一个分数,数值越低代表结合越强。Vina用的是什么体系?它用的是半经验打分函数,既有物理模型的骨架,又用实验数据拟合了经验参数。
Vina打分函数的组成:
- 范德华相互作用项:疏水作用的直接体现
- 静电相互作用项:带电基团之间的库仑力
- 氢键与疏水项:用经验参数模拟受体-配体间的特异作用
- 熵惩罚项:配体结合后自由度受限的能量代价
- 内部应变项:配体在结合过程中自身扭曲产生的能量
2.4 打分函数的三大流派
我见过不少初学者上来就问“哪种打分函数最好”,这个问题其实没标准答案。不同流派适合不同的场景。
| 类型 | 原理 | 优点 | 缺点 |
|---|---|---|---|
| 力场类 | 直接用分子力场算结合能 | 物理图像清晰 | 速度慢,忽略熵效应 |
| 经验类 | 用已知实验数据拟合参数 | 拟合精度高,速度快 | 外推性差,对训练集依赖大 |
| 知识类 | 基于已知结构的原子对偏好统计 | 避免实验数据偏差 | 连结合能都出不来,只有相对偏好 |
AutoDock Vina属于经验类打分函数的进化版。它用了一套叫“迭代评分”的框架,通过大量已知晶体结构不断优化参数。我自己的经验是,这套打分在疏水结合口袋上表现最好,但在全是带电残基的口袋里,往往会高估静电贡献。
2.5 Vina的评分模型详解
Vina的评分函数核心公式并不复杂。它把不同作用项按权重加起来,每个项的系数是通过机器学习方法从PDBbind数据库中学习到的。
Score = gauss1 * w1 + gauss2 * w2 + repulsion * w3
+ hydrophobic * w4 + hydrogen_bond * w5
+ 内部应变权重 * 配体自身扭转势能
你看,这里面没有独立的静电项。为什么?我刚开始用Vina时也很疑惑。后来看了论文才明白:Vina把静电和疏水的效果部分合并到了gauss函数里一起考虑。这种做法对中性配体还行,但如果你做的是高度带电的化合物,就要小心了。
这也是为什么后来我开发特征工程时,强烈建议用户补充静电互补性和溶剂化能这两个特征。它们能把评分函数漏掉的物理量补回来。
2.6 结合自由能的物理含义
我得提醒你一件事:打分函数输出的分数是“相对结合强度”,不是真实的结合自由能。它不能和实验测的kcal/mol直接对标。
举个例子,Vina打出-10.0分和-9.0分两个结果,你只能判断前一个结合更强,但不能说前一个的结合自由能比后一个低了1.0 kcal/mol。这个差值没有绝对物理意义。
我曾经犯过一个低级错误——拿Vina分数直接做MM/GBSA的初筛。把Vina的top1对接结果丢进高精度计算里,结果发现分数越低的位姿能量反而更高。排查后发现,Vina的最优解和力场最优解有时根本不在同一个构象空间里。
2.7 常见误区与避坑
我见过不少团队在这个问题上栽过跟头——他们用Vina跑完所有化合物,然后把分数大于-9.0的当作活性物,小于-9.0的当作非活性。这种做法在统计上极度危险,因为打分函数的方差很大,同一配体跑两次都可能偏差0.5分以上。
更好的做法是什么?把Vina分数当作排序特征来用,而不是绝对阈值。你可以把Top 10%的化合物标记为“高倾向性”,然后结合其他特征(比如分子对接的几率、氢键数量、疏水接触面积)做多维度打分。
2.8 参数设定对评分的影响
最后一个要点:Exhaustiveness(搜索深度)这个参数直接影响打分结果的可靠性。默认值是8,但我建议初学者至少开到20再做正式实验。
为什么?我调参时做过统计:Exhaustiveness = 8时,同一个配体跑10次,5次的最终位姿都不一样,分数波动在1.5分左右。提升到20之后,重复率提高到80%,分数波动降到0.3分以内。
# 我常用的基础对接命令
vina --receptor receptor.pdbqt --ligand ligand.pdbqt \
--out output.pdbqt \
--center_x 0 --center_y 0 --center_z 0 \
--size_x 20 --size_y 20 --size_z 20 \
--exhaustiveness 20 \
--num_modes 9
注意看,我设的是20的Exhaustiveness和9个模态。9个输出足够做位姿多样性分析了。再多也浪费计算资源,而且第5名之后的位姿通常物理可信度已经很低了。
好了,这一节我把分子对接的基本原理和评分函数拆开揉碎了讲了一遍。从对接三要素到打分函数的物理含义,再到Vina评分模型的具体分解,你应该已经对整个流程有了清晰的框架。记住:对接不是魔法,打分更不是真理。它只是一个帮你缩小实验范围的计算工具,用得好能省一半时间,用得不好可能会带你在错误的方向上浪费几个月。