1. 分子对接概述:基本原理、应用场景与常用软件
做计算化学这么多年,我始终觉得分子对接是药物设计里最「接地气」的一项技术。它不像量子化学那样动不动就几十个核跑几天,也不像分子动力学模拟动不动就上微秒级轨迹。对接的目标很明确——给你一个靶点蛋白和一个小分子配体,告诉你能不能结合,结合得有多牢。
说白了,分子对接就是模拟钥匙开锁的过程。只不过这把钥匙(配体)和锁(受体)都是柔性的,位置、角度、构象都会变。
1.1 基本原理:受体-配体复合物的形成背后
我刚入行时觉得对接挺玄乎的,觉得不就是把分子怼进去算个能量吗?其实没那么简单。一个完整的对接过程,核心就两件事:采样和打分。
采样,就是在蛋白质的活性口袋附近,穷举配体的所有可能的取向和构象。你想想看,一个可旋转键多于10个的分子,自由度已经大得吓人了。采样算法的目的,就是在这片巨大的构象空间里,找到那把能「对上暗号」的姿势。
打分呢,就是给每种姿势算一个结合自由能。结合得越强,打分越负。但注意,这个分数可不一定准。我在项目中遇到过好几次打分结果很漂亮,对接姿势看着也合理,结果一测活性,完全不符。这里的坑我后面会讲。
目前主流的采样算法大概分三类:
- 系统搜索法:把空间分割成网格,遍历所有可能。最早期的DOCK就是这路子。优点是全,缺点是慢得离谱。
- 随机搜索法:像模拟退火、遗传算法这类。AutoDock Vina用的是迭代局部搜索,我个人习惯说它像「先跳远再微调」。
- 确定性搜索法:基于分子动力学或能量最小化。对起始结构很敏感,容易掉进局部最优。
打分函数也有三大流派:
| 类型 | 代表 | 优点 | 缺点 |
|---|---|---|---|
| 基于力场 | AMBER、CHARMM | 物理意义清晰 | 溶剂化效应难处理 |
| 基于经验 | AutoDock Vina、Glide | 速度快、拟合实验数据 | 外推能力差 |
| 基于知识 | DrugScore、ITScore | 利用了PDB统计规律 | 依赖数据库质量 |
嗯,这里要注意:现在机器学习打分函数越来越火,但其实大多还是在上述框架下做修正。别把ML当成万能药。
1.2 应用场景:能从对接中得到什么?
很多同学觉得对接只能做虚拟筛选,其实能做的事情挺多的。我按项目经验排了个序:
- 虚拟筛选:从百万级化合物库中挑出候选分子。一个中等规模的对接库,跑到亿级也不是新鲜事。
- 结合模式预测:已知活性分子,想知道它到底是怎么嵌在口袋里的。比如做SAR(构效关系)分析时,对接姿势会直接影响你的优化方向。
- 反向对接:拿一个已知药物,去搜它可能作用的靶点。这叫drug repurposing(老药新用),疫情期间很多人做过这个。
- 点突变影响评估:比如某个氨基酸突变导致耐药性,对接能帮你解释为什么药效变差了。
- 参数优化前的预处理:这一点是我自己特别强调的。对接参数不好,后面所有特征构建都是白搭。我们这个课程会花大量篇幅讲这个。
为什么会这样?因为很多人在对接阶段图省事,用了默认参数就跑了。结果特征全是噪音,再去跑图神经网络、随机森林,效果怎么可能好?
1.3 常用软件:各有什么特色?
我用过的对接软件不下十种,下面这些是目前社区里最常用、生命力也最强的。我个人建议初学者至少掌握两种:一个免费的(比如AutoDock Vina),一个商业的(比如Glide或GOLD)。
| 软件 | 开源/免费 | 主要特点 | 我个人的使用感受 |
|---|---|---|---|
| AutoDock Vina | 开源免费 | 速度快,迭代局部搜索,并行化好 | 做大规模虚拟筛选的首选 |
| AutoDock4 | 开源免费 | 支持柔性侧链,打分函数老牌 | 适合做精细对接,但慢 |
| Glide (Schrödinger) | 商业 | SP/XP/HTVS三级精度,打分函数经典 | 精度最高的商业软件之一 |
| GOLD | 商业 | 遗传算法,支持柔性对接 | 做药物设计项目时经常用 |
| DOCK6 | 开源免费 | 基于网格的匹配算法 | 适合处理带金属离子的环境 |
| RosettaLigand | 开源免费 | 基于蒙特卡洛与能量最小化 | 精度很高,但计算资源需求大 |
| LeDock | 免费 | 速度极快,适合超大规模筛选 | 我曾在学术界用过,部署友好 |
我建议你如果做产业级项目,至少备一个商业软件。为什么?因为商业软件的默认参数往往经过了大量实验验证,你至少可以用它来「校准」你的开源流程。我曾经在一个项目中,用Vina跑出来的分数排名跟Glide完全反着来,后来发现是封装脚本里少写了一个加氢步骤——嗯,那次教训很深。
1.4 你需要关注的关键参数
做对接光会点运行按钮是不够的。我在之前的教程里反复强调一个理念:参数没调好,对接等于白做。下面这几个参数是我在任何项目中都会优先检查的:
- 盒子(Box)位置与大小:太大则引入噪声,太小则漏掉真实结合位点。我通常会把设好的盒子导出成PDB来目视验证。
- 配体柔性处理:可旋转键的设定直接影响搜索维度。在Vina里可以用
--flex时加上侧链柔性,但计算时间翻倍。 - 构象数目:并不是越多越好。一般10~20个构象足够覆盖低能态。我曾见过有人设100个,跑了一周,结果前20个构象基本一样。
- 打分阈值与排名策略:你是按第一构象排序,还是按Boltzmann加权平均?做法不同结果可能天差地别。
⚠️ 特别注意:加氢和质子化状态的设定。很多对接出问题,根本原因不是算法,而是配体或受体的原子类型和形式状态设错了。pH环境不对,结果肯定不对。我建议做对接前,先用pdb2pqr或reduce工具跑一遍受体质子化。
1.5 本课程的核心视角:为什么参数优化与特征构建要协同?
在我做机器学习驱动分子设计时发现一个瓶颈:要么是对接参数不够鲁棒导致特征噪声大,要么是特征工程过于粗糙导致打分函数学不到本质。所以这套课程的主线是:把对接参数的敏感度分析和特征构建的降噪能力结合在一起。
举个例子,比如你发现同一个配体,打随机数种子跑五次,结果排名能差20%。这时候你该做两件事:一是查对接参数的稳定性,二是看你的特征表征是否能容忍这种波动。后面我们会用实际数据来示范。
下面这张图是我们这套课程的顶层知识框架。你会发现,对接参数优化和特征构建不是两个孤立的过程,而是一个迭代的循环。
💡 跟我自己的经验来看,大多数人在第①和②步就省事了。后面所有结果都会跟着出问题。我会在接下来的几章里,手把手带你过一遍每个预处理步骤的检查清单。你会发现,花10分钟调盒子,能省掉后面三天排查错误的时间。
好了,这一章先到这里。下一块我们会具体讲:怎么获取和处理高质量的受体结构。这个坑更多,我们到时候慢慢聊。