Gen-COMPAS 蛋白质稀有构象转变路径采样工具

参考:https://github.com/Tangcyu/Gen-COMPAS

核心:扩散模型 + 迭代增强采样(committor 引导)找 A↔B 过渡态 / 反应路径
背景:体系两个稳定态 A、B(两个复合物结构)。

A、B 是势能面上两个极小点,中间过渡态 TS 是鞍点,属于稀有事件;

普通 MD 甚至常规增强采样很难直接采到,因为势垒高,自发穿越概率极低。
这套方法核心思路:扩散模型用来生成候选中间构象(猜测路径),再用 MD+committor 函数筛选、修正、更新模型,迭代收敛到真实反应通道和自由能面 FEL

Gen-COMPAS 简要解析

定位 :面向蛋白质稀有事件(构象转变、折叠等)的生成式提交概率(committor)引导路径采样模块化管线 ,把扩散模型 + VCN变分提交网络 + MD模拟 + RiteWeight重加权整合在一起,用于采样跃迁路径、计算自由能面FEL。

用途:蛋白质稀有构象转变路径采样工具,用来解决分子动力学(MD)很难采样到的蛋白构象跃迁(A 态↔B 态),用扩散模型生成蛋白中间构象 + VCN 变分承诺网络学习反应坐标,迭代生成过渡路径、做分子模拟、计算自由能面。

核心思想

稀有事件模拟难点:直接MD很难采样两个稳态A↔B之间的过渡态区域。

  1. 扩散模型:生成大量蛋白质中间构象候选;
  2. VCN(Variational Committor Network) :学习反应坐标,预测每个构象的提交概率committor q(从该结构最终流向状态B的概率,q≈0.5就是过渡区);
  3. 迭代闭环 :用VCN筛选靠近q=0.5过渡区的生成构象,作为TMD(靶向分子动力学)的目标;跑TMD+无偏MD得到新轨迹;用RiteWeight对轨迹做统计重加权,得到可靠自由能景观;新数据回流,下一轮训练扩散和VCN,迭代提升采样。

两轮迭代流程(关键区别)

  • Iteration 0(bootstrap启动轮,无VCN)
    训练扩散 → 采样构象 → kmeans聚类选代表结构 → PDB加氢/设置占有率 → NAMD跑TMD+无偏MD → RiteWeight权重计算 → FEL自由能估计

只用初始A/B盆地的无偏MD轨迹训练扩散,做第一轮采样。

  • Iteration ≥1(committor引导轮,核心)
    训练扩散 → 训练VCN → 采样构象 → committor_slice:只保留q在0.5±VCN.q_variance附近的过渡区构象作为候选 → PDB处理 → NAMD模拟 → RiteWeight → FEL

用上一轮RiteWeight输出的数据训练VCN;只筛选过渡态附近结构,聚焦稀有跃迁路径。

主要模块(YAML统一配置管理)

  1. Generative:扩散模型,SchNet+注意力,生成蛋白构象;可逐轮调整噪声scale、训练epoch,前期高噪声提升构象多样性,后期降低噪声。
  2. VCN:学习committor概率;q_variance控制过渡区筛选窗口;tau滞后时间在较宽范围结果稳健。
  3. Clustering:仅第0轮使用,对生成构象聚类提取代表结构。
  4. Occupancy:给PDB补氢、设置原子占有率,适配后续TMD可视化/模拟。
  5. NAMD:调用NAMD+Colvars,执行靶向MD(TMD)后接无偏MD;TMD力常数是重点调参项,不能过大造成结构畸变。
  6. RiteWeight:核心重加权算法(PNAS配套方法),计算轨迹统计权重,输出VCN训练数据;区分transition_weight(VCN训练)与fel_weight(自由能面,时间对称)。
  7. FEL_estimate:由RiteWeight权重投影得到一维/二维加权自由能景观。

运行控制特点

  • 主命令:gen-compas,基于yaml配置;支持--dry-run预校验、--resume断点续跑、--stepwise分步暂停人工检查、单独执行/重跑单个步骤。
  • 迭代由用户指定轮次,代码没有自动收敛判据,需要人工检查committor切片、TMD轨迹、FEL判断是否停止。
  • 输出目录按迭代组织;workflow_manifest.json记录各步骤状态,作为断点恢复依据;附带GUI工具gen-compas-config辅助编写/校验yaml配置。

依赖与环境

  • Python/PyTorch做AI模型;MDTraj/MDAnalysis处理轨迹;
  • 外部依赖NAMD(≥3.0.2,内置Colvars),NAMD不通过pip安装,需要单独部署。
  • 提供Trp-cage蛋白demo,可复现论文算例。

核心调参要点

  1. TMD力常数:平衡RMSD收敛和结构稳定性;
  2. 扩散采样噪声:迭代早期大噪声扩构象多样性,后期小噪声精细化采样;
  3. VCN的τ滞后时间:不要极端过小/过大,中间区间结果不敏感;

评估指标不能只看生成模型loss,必须看下游MD诊断:TMD收敛性、committor双向一致性、多次独立运行可复现性。

迭代闭环在哪?

一句话总结:Gen-COMPAS构建迭代自增强闭环,用扩散模型生成候选构象,VCN锁定过渡态区域,结合NAMD分子动力学+RiteWeight统计重加权,高效采样蛋白构象跃迁稀有事件并估计自由能面。

复制代码
A,B稳态初始MD轨迹
    ↓
【Iter0 Bootstrap】
train_diffusion → sample_diffusion → clustering → occupancy → NAMD(TMD+MD) → RiteWeight → FEL
                                      ↓(RiteWeight输出新轨迹,进入闭环)
【Iter≥1 Committor闭环】
train_diffusion → train_committor(VCN) → sample_diffusion → committor_slice(筛选q≈0.5) → occupancy → NAMD → RiteWeight → FEL
        ↑───────────────────────────────────────────────────────────────┘
                (RiteWeight输出回流,开启新一轮迭代)

#mermaid-svg-aYemOL19fXcNPTAH{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-aYemOL19fXcNPTAH .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-aYemOL19fXcNPTAH .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-aYemOL19fXcNPTAH .error-icon{fill:#552222;}#mermaid-svg-aYemOL19fXcNPTAH .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-aYemOL19fXcNPTAH .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-aYemOL19fXcNPTAH .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-aYemOL19fXcNPTAH .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-aYemOL19fXcNPTAH .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-aYemOL19fXcNPTAH .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-aYemOL19fXcNPTAH .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-aYemOL19fXcNPTAH .marker{fill:#333333;stroke:#333333;}#mermaid-svg-aYemOL19fXcNPTAH .marker.cross{stroke:#333333;}#mermaid-svg-aYemOL19fXcNPTAH svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-aYemOL19fXcNPTAH p{margin:0;}#mermaid-svg-aYemOL19fXcNPTAH .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-aYemOL19fXcNPTAH .cluster-label text{fill:#333;}#mermaid-svg-aYemOL19fXcNPTAH .cluster-label span{color:#333;}#mermaid-svg-aYemOL19fXcNPTAH .cluster-label span p{background-color:transparent;}#mermaid-svg-aYemOL19fXcNPTAH .label text,#mermaid-svg-aYemOL19fXcNPTAH span{fill:#333;color:#333;}#mermaid-svg-aYemOL19fXcNPTAH .node rect,#mermaid-svg-aYemOL19fXcNPTAH .node circle,#mermaid-svg-aYemOL19fXcNPTAH .node ellipse,#mermaid-svg-aYemOL19fXcNPTAH .node polygon,#mermaid-svg-aYemOL19fXcNPTAH .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-aYemOL19fXcNPTAH .rough-node .label text,#mermaid-svg-aYemOL19fXcNPTAH .node .label text,#mermaid-svg-aYemOL19fXcNPTAH .image-shape .label,#mermaid-svg-aYemOL19fXcNPTAH .icon-shape .label{text-anchor:middle;}#mermaid-svg-aYemOL19fXcNPTAH .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-aYemOL19fXcNPTAH .rough-node .label,#mermaid-svg-aYemOL19fXcNPTAH .node .label,#mermaid-svg-aYemOL19fXcNPTAH .image-shape .label,#mermaid-svg-aYemOL19fXcNPTAH .icon-shape .label{text-align:center;}#mermaid-svg-aYemOL19fXcNPTAH .node.clickable{cursor:pointer;}#mermaid-svg-aYemOL19fXcNPTAH .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-aYemOL19fXcNPTAH .arrowheadPath{fill:#333333;}#mermaid-svg-aYemOL19fXcNPTAH .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-aYemOL19fXcNPTAH .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-aYemOL19fXcNPTAH .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-aYemOL19fXcNPTAH .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-aYemOL19fXcNPTAH .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-aYemOL19fXcNPTAH .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-aYemOL19fXcNPTAH .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-aYemOL19fXcNPTAH .cluster text{fill:#333;}#mermaid-svg-aYemOL19fXcNPTAH .cluster span{color:#333;}#mermaid-svg-aYemOL19fXcNPTAH div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-aYemOL19fXcNPTAH .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-aYemOL19fXcNPTAH rect.text{fill:none;stroke-width:0;}#mermaid-svg-aYemOL19fXcNPTAH .icon-shape,#mermaid-svg-aYemOL19fXcNPTAH .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-aYemOL19fXcNPTAH .icon-shape p,#mermaid-svg-aYemOL19fXcNPTAH .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-aYemOL19fXcNPTAH .icon-shape .label rect,#mermaid-svg-aYemOL19fXcNPTAH .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-aYemOL19fXcNPTAH .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-aYemOL19fXcNPTAH .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-aYemOL19fXcNPTAH :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} Iteration 0(Bootstrap)
输出新轨迹数据,进入Iteration ≥1 闭环
新数据回流,下一轮迭代
初始数据:A/B态无偏MD轨迹
train_diffusion

训练扩散模型
sample_diffusion

生成蛋白构象
clustering

聚类提取代表构象
occupancy

PDB补氢+原子占有率
namd

TMD靶向MD + 无偏MD模拟
riteweight

RiteWeight轨迹统计重加权
fel_estimate

加权自由能面FEL
train_diffusion

热启动训练扩散
train_committor

训练VCN变分提交网络
sample_diffusion

扩散采样构象
committor_slice

筛选 q≈0.5 过渡区构象
occupancy

PDB补氢+原子占有率
namd

TMD + 无偏MD模拟
riteweight

RiteWeight重加权
fel_estimate

加权自由能面FEL

这里有一个非常有意思的概念以及idea:committor函数,0.5概率值与鞍点区域 有某种对应

这个idea可以借鉴,比如说同样是蛋白质互作,可以用commitor去生成一个位于两个状态之间的过渡态构象(条件生成,至于两个状态如何设置看你自己定义,你自己定义状态A和B,数据如何获取)

相关推荐
纪伊路上盛名在2 天前
Omni-Mol:用多模态大语言模型构建通用多任务分子模型
人工智能·语言模型·自然语言处理·蛋白质·通用模型·生物大分子·混合专家moe
纪伊路上盛名在5 天前
Kabsch算法的Julia实现
开发语言·算法·julia·序列分析·蛋白质·rmsd
杀生丸学AI7 天前
【动态重建】Flow4DGS-SLAM:基于光流引导的4DGS-SLAM算法
人工智能·三维重建·扩散模型·4dgs·动态重建
这张生成的图像能检测吗8 天前
(论文速读)Scaling Rectified Flow Transformers:Rectified Flow + MM-DiT 的高分辨率文生图路线
大模型·文生图·多模态·扩散模型·图像生成
Blockbuater_drug10 天前
Amber分子动力学模拟10: 蛋白-核酸复合物模拟操作
md·分子动力学模拟·amber·核酸·蛋白-核酸复合物·ol15力场·nastruct
thesky12345621 天前
27届大模型面试准备(四十六):多模态生成式架构——扩散与自回归的统一
大模型·文生图·diffusion·扩散模型·dit·自回归生成·多模态生成
杀生丸学AI24 天前
【三维重建】QuerySplat:在 3DGS 预测中解耦几何与外观表征
人工智能·3d·三维重建·扩散模型·高斯泼溅·空间智能·室内重建
白拾24 天前
【arXiv 2026】GenCeption:视频生成模型是通用视觉学习者|从生成式视觉预训练范式视角
扩散模型·前馈模型·arxiv 2026·genception 论文分享·视频生成预训练·通用视觉感知
爱知菜1 个月前
Transformer vs Diffusion:为什么扩散模型更擅长捕捉细节?
人工智能·深度学习·transformer·扩散模型