2. 分子对接核心原理
分子对接并不是“把配体放进受体口袋里”这么简单。它本质上是一个搜索 + 评价的联合优化问题:在配体可旋转键构成的高维构象空间中寻找若干候选姿态,再用打分函数判断哪个姿态最可能接近真实结合模式。理解这两件事,才能理解为什么对接任务在高通量场景下会迅速吃掉 CPU 核时、内存和 I/O。
一、打分函数:把“结合得好不好”变成一个可计算的数
打分函数(scoring function)负责给每一个候选姿态输出一个数值,通常以结合自由能 ΔG 或经验分数表示,分数越低(负值越大)通常被认为结合越有利。常见类型有三类:
- 基于力场:把范德华项、静电项、氢键项相加,物理意义清晰,但对溶剂化、熵效应处理粗糙。
- 经验型:用回归拟合原子对接触、疏水埋藏、氢键等计数项,如 AutoDock Vina 的评分即属此类,速度快、适合大规模筛选。
- 知识型:从 PDB 统计原子接触频率反推势能,擅长识别天然接触,但对非天然配体泛化有限。
以 Vina 为例,其打分可简化为若干加权项之和:
score = w_gauss · 高斯排斥/吸引项
+ w_rep · 近距离排斥项
+ w_hb · 氢键项
+ w_hydro · 疏水项
+ w_rot · 可旋转键惩罚项
其中 w_rot 项非常关键:每增加一个可旋转键,构象空间维度就上升一维,搜索代价指数增长,同时打分函数也会对“柔性过大”的配体施加惩罚。这直接决定高通量任务的资源画像——配体平均可旋转键数越高,单分子对接耗时越长。
二、构象搜索:在高维空间里找“最像”的姿态
构象搜索要同时优化配体的平移(3 个自由度)、旋转(3 个自由度)以及可旋转键的二面角(n 个自由度),总维度为 6+n。常用策略包括:
- 遗传算法(AutoDock):种群进化、交叉、变异,适合多模态搜索。
- 蒙特卡洛 / 模拟退火:以概率接受劣解跳出局部极小。
- 迭代局部搜索(Vina):多次随机起点 + 局部优化,速度快、并行友好。
- 片段生长:逐步构建配体,适合大柔性分子。
搜索的停止条件通常由 exhaustiveness(穷尽度)控制。Vina 中 exhaustiveness=8 表示运行 8 次独立搜索;提高到 32 或 64 会显著增加耗时,但可能找到更优姿态。这就是高通量调度中“精度—时间”权衡的核心旋钮。
三、结合模式预测:从多个姿态中挑出可信的那个
一次对接通常输出 9 个(或更多)姿态,按打分排序。判断哪个姿态可信,不能只看分数,还要看:
- 构象聚类:多个独立搜索是否收敛到同一姿态,聚类越大越可信。
- 关键相互作用:是否与已知催化残基、铰链区形成氢键或疏水接触。
- RMSD 一致性:若有共晶配体,可用重对接 RMSD < 2 Å 作为方法验证标准。
- 打分差距:最优与次优分数差距过小,说明区分度不足,需提高穷尽度或换打分函数。
下面这张图把“打分函数—构象搜索—结合模式预测”三者的关系,以及它们对计算资源的传导路径放在一起:
四、三者如何共同决定高通量资源画像
把上面三块串起来看,一个对接任务的耗时大致可以写成:
单分子耗时 ≈ 单次搜索耗时 × exhaustiveness × 姿态数
总耗时 ≈ 单分子耗时 × 配体数量 / 可用核数
这意味着调度策略必须围绕三个变量做文章:
- 配体数量:百万级库需要分片、断点续跑,不能一次性提交。
- exhaustiveness:初筛可用 8,命中复核用 32~64,形成“粗筛—精算”两级流水线。
- 可旋转键数:对 n > 10 的柔性配体单独标记,必要时限制可旋转键或改用片段生长。
五、一个可复用的对接参数记录表
为了让高通量结果可追溯、可复现,建议每个批次记录以下字段。这不是管理表格,而是对接实验本身的参数快照:
| 字段 | 示例值 | 作用 |
|---|---|---|
| 受体文件 | receptor.pdbqt | 固定坐标与质子化状态 |
| 盒子中心 / 尺寸 | (12.5, 8.0, 20.3) / 22×22×22 Å | 限定搜索空间,过大浪费算力 |
| exhaustiveness | 8(初筛)/ 32(复核) | 控制搜索次数与耗时 |
| num_modes | 9 | 输出姿态数量 |
| 配体可旋转键 | n = 6 | 评估搜索维度与柔性惩罚 |
| 最优分数 | -9.2 kcal/mol | 排序依据,非绝对结合能 |
| 聚类一致性 | Top1 聚类含 7/9 姿态 | 判断结合模式可信度 |
当一批任务完成后,先看分数分布是否合理(多数在 -6~-11 kcal/mol 区间),再看 Top 姿态是否落在预期口袋内、是否与关键残基形成相互作用。若大量分子最优姿态落在口袋外或分数异常偏高,往往说明盒子设置、质子化状态或配体准备环节出了问题,而不是打分函数本身失效。把这些判断做在前面,后续的调度与扩容才有意义。