作者,Evil Genius
接下来要为我们的2026生化小课–CADD计算机辅助药物设计、分子对接/分子动力学的课程做好准备,这个世界上很多事情我们都无法决定,我们唯一确定能决定的事情,就是自己想做一件事,尽自己最大的努力把事情做好。
今天我们更新一下蛋白-蛋白分子对接,之前分享过一篇,在分子对接–蛋白蛋白对接,以PD-1/PDL-1为例,今天我们丰富一下这个内容。
其实别以为这样的内容离我们很远,其实很近,我们日常使用的注射制剂,很多都是蛋白制剂,都是通过算法 + 临床得来的,其实蛋白蛋白分子对接常用的就是抗原抗体,由此还形成了一个很大的学科,那就是蛋白设计,根据靶向蛋白分子,独立设计蛋白抗体,并且加上一些特殊的结构,达到治疗的目的。
先来看看蛋白蛋白相互作用。
生物体的生理功能主要由细胞中的蛋白质控制和调节。其中,多数蛋白质是作为蛋白质复合物中的一部分参与细胞的代谢过程。因此,研究蛋白质间的相互作用是理解生命活动的基础。


通常来讲,蛋白蛋白分子对接的方法ZDOCK的运用最多,这列给大家一个蛋白结构,大家可以跟着做一下:
从PDB数据库下载得到2019-nCoV的spike蛋白6VXX和ACE2蛋白晶体结构1R42,模拟它们的相互作用
在Pymol软件中准备蛋白1R42和6VXX,spike蛋白6VXX为多聚体,只保留B链,优化后分别输出文件1r42_minimize.pdb和6vxx_minimize.pdb

例如文献中的运用

一、先理解:ZDOCK到底在做什么?
假设我们有:
- 蛋白 A:PD-1
- 蛋白 B:PD-L1
我们希望得到:
PD-1 + PD-L1 → 最可能的结合复合物结构
ZDOCK的基本思想是:
PD-1结构
+
PD-L1结构
↓
ZDOCK刚性蛋白-蛋白对接
↓
产生大量候选复合物
↓
打分
↓
得到Top 10 / Top 20 / Top 100
↓
聚类
↓
人工分析结合界面
↓
得到候选PD-1/PD-L1复合物
和你之前做的 AutoDock Vina小分子对接相比,最大的区别是:
| 对接对象 | 蛋白-小分子 | 蛋白-蛋白 |
| 配体 | 小分子 | 另一个蛋白 |
| 搜索空间 | 蛋白口袋 | 整个蛋白表面 |
| 柔性 | 有限 | 经典ZDOCK主要是刚性对接 |
| 输出 | ligand poses | protein-protein complexes |
| 核心问题 | 小分子如何进入口袋 | 两个蛋白如何贴合 |
二、实际案例:PD-1–PD-L1
我们假设:
Receptor:PD-1
Ligand:PD-L1
目标:
预测PD-1与PD-L1形成复合物时,两者的空间结合方式。
结构可以从 Protein Data Bank 获取。
例如可以搜索:
PD-1 PD-L1 complex PDB
经典PD-1/PD-L1复合物结构可以作为最终验证的参考结构。
这里有一个非常重要的实验设计思想:
不要直接拿完整PD-1/PD-L1复合物做ZDOCK
如果目标是测试ZDOCK预测能力,应该:
已知PD-1/PD-L1复合物
↓
拆开
↓
PD-1单体
+
PD-L1单体
↓
ZDOCK
↓
预测复合物
↓
与原始实验复合物比较
这叫做 docking re-docking / blind docking validation。
三、第一步:下载两个蛋白结构
例如得到:
PD1.pdb
PDL1.pdb
此时不要急着ZDOCK。
先检查PDB。
可以使用:
- PyMOL
- ChimeraX
- Chimera
- PDBFixer
例如PyMOL:
pymol PD1.pdb
观察:
PD-1
├── Chain A
├── ligand?
├── water?
├── antibody?
└── other chains?
四、为什么PDB不能直接扔进ZDOCK?
这是蛋白对接最容易出问题的地方之一。
实验结构PDB往往不是:
一个干净的蛋白
而可能是:
Protein
+
Water
+
Ion
+
Ligand
+
Antibody
+
多个Chain
+
晶体添加剂
例如:
ATOM
ATOM
ATOM
HETATM ← ligand
HETATM ← water
ATOM
ATOM
ZDOCK真正需要的是:
纯蛋白结构
所以需要预处理。
五、第二步:清理PDB
例如PD-1:
PD1_original.pdb
处理以后:
PD1_clean.pdb
PD-L1:
PDL1_original.pdb
↓
PDL1_clean.pdb
通常需要处理:
1. 删除水
例如:
HOH
删除。
2. 删除无关配体
如果PDB里面存在:
HETATM
要判断是不是需要保留。
对于普通蛋白-蛋白对接,一般删除无关小分子。
3. 保留正确的蛋白链
例如:
PD-1:
Chain A
PD-L1:
Chain B
最后最好得到:
PD1_clean.pdb
PDL1_clean.pdb
六、第三步:检查缺失残基
这是非常重要的一步。
比如PDB可能是:
1 2 3 4 5 6 7
A B C D E F G
但实际上:
1 2 3 5 6 7
A B C E F G
Residue 4缺失。
对于蛋白表面正好参与结合的位置,这可能严重影响对接。
可以使用:
- PDBFixer
- Modeller
- ChimeraX
- AlphaFold预测结构
补全。
七、第四步:准备ZDOCK输入
ZDOCK本质上需要两个蛋白:
Receptor
Ligand
例如:
Receptor = PD1_clean.pdb
Ligand = PDL1_clean.pdb
这里的“ligand”不是小分子意义上的ligand。
而是:
参与蛋白-蛋白对接的第二个蛋白。
八、ZDOCK的核心算法
ZDOCK不是简单地:
“把PD-L1放到PD-1表面随机旋转。”
它会进行大量空间搜索。
可以粗略理解成:
PD-L1
↓
旋转
↙ ↓ ↘
多个方向
↓
平移
↓
与PD-1碰撞检测
↓
计算score
数学上可以简单理解为:

不同版本/模式的具体打分组成有所不同。
其中最重要的几个概念:
Shape complementarity
两个蛋白表面是否互补。
类似:
蛋白A:
/\\__
___/ \\___
蛋白B:
___ ___
\\____/
如果:
凸 → 凹
凹 → 凸
匹配得比较好。
Electrostatics
例如:
PD-1表面:++++
PD-L1表面:—-
静电吸引有利。
反之:
++++
++++
通常不利。
九、第五步:开始ZDOCK
ZDOCK命令根据你安装的具体版本略有不同。
典型流程类似:
zdock -R PD1_clean.pdb -L PDL1_clean.pdb
或者使用ZDOCK提供的图形界面进行:
Receptor → PD1_clean.pdb
Ligand → PDL1_clean.pdb
然后:
Run ZDOCK
十、ZDOCK到底产生多少结果?
假设:
ZDOCK
↓
2000 poses
也就是说:
Pose 1
Pose 2
Pose 3
…
Pose 2000
这些全部都是:
PD-1 + PD-L1的不同空间排列。
例如:
Pose 1
PD-L1
███████
███████████
│
│
███████
PD-1
Pose 2
███████
████████
███████
███████
███
Pose 3
█████
█████████
████████
██████
当然真实结构是三维的。
十一、这里千万不要犯一个错误
很多初学者会认为:
ZDOCK排名第一 = 正确答案。
不一定。
这是蛋白-蛋白对接非常重要的一点。
例如:
ZDOCK Rank 1
score = 1785
Rank 2
score = 1779
Rank 3
score = 1768
Rank 4
score = 1759
并不能简单认为:
Rank 1 = 正确
原因是:
蛋白-蛋白对接存在大量局部最优解。
所以后面必须:
聚类 + 界面分析 + 生物学信息 + 结构评价
十二、第六步:对ZDOCK结果进行聚类
假设ZDOCK产生:
2000 poses
很多pose实际上非常相似。
例如:
Pose 1
Pose 8
Pose 13
Pose 27
Pose 43
Pose 87
它们可能都属于同一个结合模式:
Cluster 1
另外:
Pose 2
Pose 9
Pose 18
Pose 25
属于:
Cluster 2
所以:
2000 poses
↓
聚类
↓
Cluster 1
Cluster 2
Cluster 3
…
这一步非常重要。
因为:
一个稳定出现的大cluster,往往比单独一个高分pose更值得关注。
十三、为什么要看Cluster?
举一个极端例子。
模式A
Pose数量:
Cluster A = 320
Cluster B = 15
Cluster C = 8
模式B
最高score:
Cluster B中的某一个pose
虽然:
Cluster B
有一个最高分,但:
Cluster A
有大量相似结构。
这说明:
A可能是一个更稳定的结合模式。
所以ZDOCK结果不能只看:
score
而应该综合:
score
+
cluster size
+
interface
+
biological information
十四、第七步:用PyMOL查看ZDOCK结果
假设得到:
complex1.pdb
complex2.pdb
complex3.pdb
打开:
pymol complex1.pdb
然后:
PD-1
PD-L1
分别设置不同representation。
例如:
PD-1 → cartoon
PD-L1 → cartoon
然后查看interface。
你会看到:
PD-L1
█████████
███████████
||
|| interface
||
█████████
PD-1
十五、第八步:重点分析Interface
这一步实际上比“看ZDOCK分数”更重要。
我们需要问:
PD-1和PD-L1到底哪些氨基酸发生了相互作用?
例如:
PD-1
Residue 50
Residue 53
Residue 56
Residue 58
↓
PD-L1
Residue 115
Residue 118
Residue 120
Residue 123
可以分析:
1. Hydrogen bonds
PD1 residue
|
| H-bond
|
PDL1 residue
2. Salt bridges
例如:
Lys(+)
|
|
Asp(-)
3. Hydrophobic interaction
例如:
Leu
Ile
Val
Phe
Trp
形成疏水核心。
十六、可以进一步计算interface ΔG
例如使用:
Rosetta
或者:
- PRODIGY
- PISA
- FoldX
- Rosetta
来分析。
例如:
PD-1 + PD-L1
ΔGbinding = -12.4 kcal/mol
通常:
ΔG越负,预测结合越有利。
但注意:
不能简单把不同软件的ΔG直接横向比较。
十七、实际研究中我更推荐的流程
如果你不是为了学习,而是准备真正用于科研,我建议:
PDB
↓
蛋白结构预处理
↓
┌───────┴────────┐
↓ ↓
Protein A Protein B
↓ ↓
去水/配体 去水/配体
↓ ↓
补缺失残基 补缺失残基
└───────┬────────┘
↓
ZDOCK
↓
2000 docking poses
↓
Clustering
↓
Top 10–20 clusters
↓
界面分析
↓
┌──────┴──────┐
↓ ↓
生物学信息 结构评分
↓ ↓
└──────┬──────┘
↓
Top 1–5 complexes
↓
Rosetta优化
↓
Molecular Dynamics
↓
RMSD/RMSF/Rg
H-bond/SASA
MM/PBSA或MM/GBSA
↓
最终候选复合物
十八、如果进一步结合你之前学习的PyRosetta
这个就非常有意思了。
你之前问过:
Vina对接以后为什么要用PyRosetta优化?
蛋白-蛋白对接也存在类似的问题。
ZDOCK本质上属于:
刚性对接
也就是:
PD-1结构不变
PD-L1结构不变
但是现实中的蛋白:
PD-1
↓
侧链可以转动
backbone也可能发生轻微变化
PD-L1
↓
侧链可以转动
backbone也可能发生轻微变化
所以ZDOCK得到的:
Rigid docking
可以继续:
ZDOCK
↓
PyRosetta local refinement
↓
Side-chain repacking
↓
Minimization
↓
Interface optimization
十九、ZDOCK + PyRosetta的完整思路
例如:
ZDOCK预测:
PD-1
████████
↓
████████ PD-L1
发现interface:
PD1-A52
PD1-Y56
PD1-M64
PDL1-L115
PDL1-F118
PDL1-Y123
然后PyRosetta进行:
① Side-chain repacking
重新寻找:
Rotamer
例如:
Tyr
↓
rotamer 1
rotamer 2
rotamer 3
rotamer 4
寻找更合适的侧链构象。
② Energy minimization
优化:
bond
angle
torsion
van der Waals
electrostatics
使interface更加合理。
③ Interface scoring
例如:
Before:
interface energy
= -25 REU
After:
interface energy
= -39 REU
说明局部优化后interface更加有利。
二十、再进一步做MD
如果你想做得更加完整:
ZDOCK
↓
Top 10 complexes
↓
PyRosetta refinement
↓
Top 3
↓
GROMACS
↓
100 ns MD
然后分析:
RMSD
RMSF
Radius of gyration
SASA
Hydrogen bonds
Salt bridges
Protein-protein contacts
MM/PBSA
例如:
ZDOCK
↓
2000 poses
↓
Cluster分析
↓
Top 10 poses
↓
PyRosetta refinement
↓
Top 3
↓
100 ns MD
┌────────┼────────┐
↓ ↓ ↓
RMSD H-bond MM/PBSA
↓ ↓ ↓
最终候选模型
二十一、特别重要:如果已知结合位点,千万不要盲目Blind Docking
假如你已经知道:
PD-1的binding residues:
A50
Y56
M64
那么可以把这些信息加入对接约束。
因为:
Blind docking
整个蛋白表面
↓
寻找结合位置
计算空间非常大。
而:
Site-directed docking
PD-1
↓
指定binding region
PD-L1
↓
指定binding region
搜索空间明显缩小。
二十二、如果是抗体–抗原,更应该这样做
比如:
抗体
+
HER2
如果已知:
CDR
那么应该重点关注:
CDR-H1
CDR-H2
CDR-H3
CDR-L1
CDR-L2
CDR-L3
而不是让抗体整个表面都参与随机对接。
流程:
Antibody
+
Antigen
↓
ZDOCK
↓
Interface constraint
↓
Cluster
↓
CDR interface
↓
PyRosetta refinement
二十三、你需要特别理解ZDOCK和Vina的区别
你前面已经在学习Vina,这两个可以放在一起理解:
分子对接
│
┌────────┴────────┐
│ │
小分子-蛋白 蛋白-蛋白
│ │
Vina ZDOCK
│ │
ligand docking protein docking
│ │
↓ ↓
binding pocket protein interface
│ │
↓ ↓
PyRosetta PyRosetta
│ │
↓ ↓
MD MD
所以:
Vina解决的是“小分子怎么结合蛋白”,ZDOCK解决的是“两个蛋白怎么结合”。
二十四、如果你准备真正跑一次ZDOCK
建议不要一开始就拿自己的课题蛋白。
可以先做这个练习:
练习项目
PD-1 + PD-L1
完整跑:
1. 下载PDB
↓
2. 拆分两个蛋白
↓
3. 清理PDB
↓
4. ZDOCK
↓
5. 得到2000 poses
↓
6. Clustering
↓
7. 选Top 10
↓
8. PyMOL观察
↓
9. Interface分析
↓
10. 与实验PDB比较
↓
11. 计算RMSD
↓
12. 判断ZDOCK是否成功预测
其中最后一步特别关键:
假设实验结构是:
Experimental complex
ZDOCK预测:
Docking model
计算:

例如:
RMSD = 2.1 Å
那么说明预测结构和实验结构非常接近。
如果:
RMSD = 15 Å
则说明这个pose很可能不是正确的结合模式。
最后给一个科研上最实用的判断框架
以后你拿到ZDOCK结果,不要只问:
“哪个score最高?”
而应该依次问:
① ZDOCK score怎么样?
↓
② 是否属于大cluster?
↓
③ interface面积是否合理?
↓
④ 有没有明显clash?
↓
⑤ 是否形成合理H-bond / salt bridge?
↓
⑥ 是否符合已知binding site?
↓
⑦ PyRosetta优化后是否稳定?
↓
⑧ MD过程中interface是否稳定?
↓
⑨ MM/PBSA或MM/GBSA是否支持?
↓
⑩ 是否与实验结构/突变数据一致?
这才是一个完整的蛋白–蛋白分子对接分析,而不是简单地“跑一次ZDOCK”。



