ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

AI增强构象采样教程(14):扩散模型生成 ensemble 与 MD 衔接——从采样集合到可跑的多起点

AI增强构象采样教程(14):扩散模型生成 ensemble 与 MD 衔接——从采样集合到可跑的多起点 AI增强构象采样教程14扩散模型生成 ensemble 与 MD 衔接——从采样集合到可跑的多起点版本声明块工具/软件DiffDockarxiv.org/pdf/2210.01776、ConfGFproceedings.mlr.press/v139/shi21b、AlphaFlowarxiv.org/pdf/2402.04845、OpenMM 8.x openmmforcefields、PDBFixer、RDKit 2026.x。语言/环境Python 3.9依赖 openmm、openmmforcefields、mdanalysis、rdkit、pdbfixer。说明各扩散工具的关键参数与命令行以各自官方 README 为准数值一律标注来源查不到标以官方文档为准。一句话结论扩散模型把生成构象集合从偶然变成家常便饭——DiffDock 一跑给一批对接 pose按--num_poses等参数控制ConfGF 可由 SMILES 直接出多个低能分子构象AlphaFlow 用流匹配产出蛋白构象集合但生成式 ensemble ≠ 可直接跑 MD必须经 RMSD 去冗余、打分/置信度筛选承接第 13 篇再用 PDB→OpenMM 的转换脚本统一成 MD 输入才能作为真正有效的多起点而这一过程正对应 AlphaFold-SFA 用 AI 结构 慢特征加速口袋开放的思路。〇、本篇要解决的认知问题DiffDock / ConfGF / AlphaFlow 三个扩散工具各生成什么类型的 ensemble各自的关键参数是什么为什么生成式 ensemble 不能直接用它和 MD 输入之间的鸿沟在哪个环节怎么把一堆生成结构变成少而有效的 MD 多起点RMSD 去冗余 打分筛选AlphaFold-SFA 的AF 慢特征 metaD 加速口袋开放/结合思路为什么能迁移到这里给 ensemble→OpenMM MD 输入的转换脚本该把握哪几个最小关键点一、机制解析1.1 三个扩散工具三种集合定位扩散模型diffusion model学习从噪声一步步去噪到数据的映射天然能在同一种子附近采出多样样本是构象集合的天然生产者。三者分工如下工具生成对象定位关键参数以官方 README 为准DiffDock对接 pose 集合给小分子在蛋白口袋里的摆放打多份均匀采样采样步数、seed、输出 pose 数量如--num_poses等见https://github.com/gcorso/DiffDock/ConfGF分子构象生成由分子自身的(2D)图/序列直接出多个 3D 低能构象无蛋白场扩散迭代步数、噪声/时间调度、输出构象数见https://github.com/DeepGraphLearning/ConfGF与论文AlphaFlow蛋白构象集合用流匹配flow matching基于 AlphaFold/ESM 条件生成蛋白构象集合流匹配步数、温度采样、条件数、集合规模见https://github.com/bjing2016/alphaflow关键差异DiffDock 关注配体在哪儿三维摆放ConfGF 关注配体本身长啥样内部构象AlphaFlow 关注蛋白怎么动backbone 集合。三者层层递进先有配体内旋集ConfGF再放到口袋DiffDock蛋白骨架还能进一步晃AlphaFlow。1.2 为什么生成式 ensemble 不能直接用AI 生成的 ensemble 有三个离 MD 很远的属性冗余严重diffusion 采样常高度重叠同一盆地里的副本直接全采样算力浪费本系列铁律 7。没有力场/拓扑CIF/PDB/SDF 只是坐标缺键序参数化、缺氢分配、缺水盒——这正是第 05 篇结构准备与第 12 篇装盒要补的。可能有非物理几何生成结构偶有坏距离/原子重叠直接进 MD 会在最小化/第一步就爆能。所以生成 ensemble → MD 多起点中间必须是一道筛选去冗余转换的加工而不是把 AI 输出原样塞给引擎。这三步RMSD 去冗余、打分/置信筛选、准备 MD 输入恰好串起第 13 篇的筛选方法与本系列的装盒能力。1.3 参考 AlphaFold-SFAAI 结构只当起点慢特征驱动探索AlphaFold-SFAPLoS ONEhttps://journals.plos.org/plosone/article?id10.1371/journal.pone.0307226的做法值得借镜把 AlphaFold 给出的多个结构作为初始化/引导再用慢特征分析slow feature analysis提取的时间流形作为 CV结合元动力学去加速口袋开放、结合与变构等慢过程。迁移到本系列的三点AI 集合只做出发不做结论ensemble 提供有物理基础的泊点最终的放松、平衡、FES 全交给 MD增强采样。慢特征流形代替手工 CV当你的口袋打开/关闭这类自由度不好手工定义 CV 时SFA 自动从模拟找出变化最慢的方向当 CV和元动力学结合。这比 gREST 式残基组更结构感知。反复迭代MD 找新状态 → 更新集合/流形 → 再采形成AI 起点 → 慢特征 metaD → 新构象 → 回流的闭环与第 15 篇 HTMD 自适应采样的多起点闭环同构。1.4 ensemble 质量的打分筛选第 13 篇已按置信度/亲和力筛 Boltz-2。对扩散生成 ensemble筛选可以来自对接打分DiffDock/Vina 分数、伪能量/自洽性指标ConfGF 给的构象能排序、以及结构自洽核验PDBFixer 能不能补全、addMissingAtoms有没有报错。筛选后再去重是少而有效多起点的标准配方。二、完整代码与逐行剖析2.1 三个工具的最小调用示意以官方 README 为准# ---- DiffDock给蛋白配体出多 pose参数名以官方 README 为准 ----# protein.pdb lig.sdf输出多 pose如指定数量python-mdifflock--proteinprotein.pdb--ligandlig.sdf--out_dirposes_out# 关键参数采样迭代步数、随机 seed、输出 pose 数量--num_poses 类以 README 为准# ---- ConfGF由 SMILES 生成多个分子构象 ----# 输入按工具要求的分子图/序列格式出多份 3D SDF细节以 README 为准python guide.py--inputmol.sdf--outsdf_gen--n_conformations20# 真实 CLI/参数以 https://github.com/DeepGraphLearning/ConfGF 为准# ---- AlphaFlow生成蛋白构象集合 ----# 条件AF 蒸馏/ESM 表示→ 流匹配采样多份结构细节以 README 为准python sample.py--checkpointckpt.pth--n_trajectories10--outprot_ensemble.pkl# 真实 CLI/参数以 https://github.com/bjing2016/alphaflow 为准视频三项的 CLI 与参数名以各工具官方 README 为唯一权威上面的命令是示意在线落地前必查官方仓库。2.2 生成 ensemble → MD 多起点RMSD 去冗余 打分筛选 去重# -*- coding: utf-8 -*-把一批生成结构PDB/SDF压成不重复、可跑 MD 的多起点。 输入glob 到的所有结构文件输出selected/ 下的去冗余起点 清单 json。importglob,json,os,numpyasnp,MDAnalysisasmdafromMDAnalysis.analysis.rmsimportrmsd SRCposes_out/*.pdb# 或 conf_out/*.sdfRMSD_DUP1.0# 重原子 RMSD 1 Å 视为重复os.makedirs(selected,exist_okTrue)filessorted(glob.glob(SRC))print(f候选结构{len(files)}个)defheavy_rmsd(pA,pB):apA.select_atoms(not name H*).positions bpB.select_atoms(not name H*).positionsifa.shape!b.shape:returnNonereturnrmsd(a,b,centerTrue,superpositionTrue)picked,plan[],[]forfinfiles:umda.Universe(f)dupany(heavy_rmsd(u,mda.Universe(pk))isnotNoneandheavy_rmsd(u,mda.Universe(pk))RMSD_DUPforpkinpicked)ifdup:continuepicked.append(f)new_namefselected/start_{len(plan):02d}.pdbwithmda.Writer(new_name)asw:# 统一写成 PDBSDF 走 RDKit 转换亦可w.write(u.atoms)plan.append({src:f,dst:new_name})json.dump(plan,open(selected/plan.json,w),indent2)print(f去重后多起点{len(plan)}个 → selected/plan.json)剖析heavy_rmsd用重原子not name H*配对center/superposition做刚性拟合逐个与已选代表比对落在RMSD_DUP内即判重复跳过输出统一 PDB 与决策清单是可重开的一段承接第 13 篇思想。打分/置信度筛选要叠加的话在上面的picked前先按打分排序并加阈值参考第 13 篇 2.1。2.3 PDB/SDF ensemble → OpenMM MD 输入最简转换# -*- coding: utf-8 -*-把一个多起点 PDB/SDF 变成可跑 OpenMM 的体系加氢→力场→水盒→输出单位。 简化演示PDB 蛋白路线 (可选)配体经 PDBFixer 一起补。完整配体参数化见第 05/12 篇。 依赖openmm、openmmforcefields、pdbfixer。 importopenmm.unitasuimportopenmm.appasappfrompdbfixerimportPDBFixerfromopenmmforcefields.generatorsimportSystemGenerator START_PDBselected/start_00.pdb# ensemble 去冗余后首个起点OUT_PREFIXmd0# 1) PDBFixer补残基 加氢 加负离子中和fixerPDBFixer(filenameSTART_PDB)fixer.findMissingResidues()fixer.findMissingAtoms()fixer.addMissingAtoms(seed2026)fixer.addMissingHydrogens(7.4)app.PDBFile.writeFile(fixer.topology,fixer.positions,open(f{OUT_PREFIX}_allH.pdb,w))# 2) SystemGenerator蛋白 ff14SB tip3p含配体时加 small_molecule_forcefieldgenSystemGenerator(forcefields[ff14SB.xml,tip3p.xml])pdbapp.PDBFile(f{OUT_PREFIX}_allH.pdb)systemgen.create_system(pdb.topology)# 3) 水盒 离子modellerapp.Modeller(pdb.topology,pdb.positions)modeller.addSolvent(gen.forcefield,padding1.0*u.nanometer,ionicStrength0.15*u.molar)# 4) 写出可供后续 MD 的最小输入结构 系统app.PDBFile.writeFile(modeller.topology,modeller.positions,open(f{OUT_PREFIX}_box.pdb,w))importpicklewithopen(f{OUT_PREFIX}_system.pkl,wb)asfh:pickle.dump(system,fh)# 5) 客观判据盒子原子非零、体积合理n_boxmodeller.topology.getNumAtoms()print(f盒子原子数{n_box}盒子体积(约) f{modeller.positions[-1][2]._value-modeller.positions[0][2]._value}Å 边)assertn_box0andn_boxpdb.topology.getNumAtoms(),solvate 失败print([ok] MD 输入已就绪,OUT_PREFIX,第 12 篇可在此体系加口袋约束 CV)要点这是结构 → MD 输入的最小但完整链路加氢 → 统一力场 → solvate → 落盘真正的配体 GAFF2/OpenFF 参数化与口袋增强采样复用第 05/12 篇代码这里保持单起点可跑、可断言。转换目标是把 AI 集合落成引擎能直接吃的最小物理体系让多起点每个都能进 OpenMM成为默认能力。三、常见报错与排查现象根因排查与修复rmsd原子数不一致报错生成 ensemble 里有的含配体有的没有或加氢状态不一统一用not name H*且仅比蛋白/配体共同子集原子数不同的 pair 标为不可比addSolvent/create_system爆parameter not found结构含未参数化配体/修饰残基先确认用 SystemGenerator 的molecules传含配体拓扑或走第 05/12 篇的配体参数化PHE 等醚基修饰需 cleanse生成结构里有坏键/坏距离minimize 发散AI 输出偶有非物理几何先minimizeEnergy观察不收敛则加轻微位置约束 pre-minimize或回炉重新采样该起点去重后起点太少❤️RMSD_DUP太大或 ensemble 本就高度重叠把RMSD_DUP调小如 0.5 Å回去调大扩散采样多样性步数/seed/温度AlphaFlow/ConfGF 命令参数与 README 不符版本/接口更新一律以各自官方 GitHub README 为准别照抄本篇示意四、动手练习练习 1区分三工具在你的一个蛋白-配体体系上用 DiffDock 出多 pose。判据poses_out下有 ≥3 个 pose 文件且 pose 间存在重原子 RMSD 2 Å 的不重复样本。练习 2去冗余对练习 1 的 pose 跑 2.2 段。判据selected/plan.json生成starts间重原子 RMSD ≥ RMSD_DUP且起点数 ≥ 2重复跑两次结果一致可重开。练习 3转换对start_00跑 2.3 段。判据md0_box.pdb与md0_system.pkl生成盒子原子数 输入原子数说明 solvate 成功能打印 [ok]。五、小结与下一篇预告扩散模型让构象集合俯首即拾DiffDock 出对接 pose、ConfGF 出配体内旋、AlphaFlow 出蛋白骨架流三者的关键参数以各自官方 README 为准。但它们不能直接跑 MD——必须过RMSD 去冗余 打分/置信筛选承接第 13 篇 转换 MD 输入加氢/力场/水盒三道关。AlphaFold-SFAAI 结构当起点 慢特征元动力学加速口袋开放/结合给出AI 集合只做出发、MD 做结论、再回流迭代的范式。下一站把这套多起点生成 → 短模拟 → 聚类 → 再选点的闭环交给 HTMD 的自适应采样来自动跑。第 15 篇预告《自适应采样与工作流编排HTMD》HTMD 的 adaptive sampling 多 epoch 驱动、用 on-the-fly 的 Markov 状态模型MSM挑下一轮新起点、LocalGPUQueue 队列批量调度以及对接 pose 转 MDdocking-poses 教程思路把今天的多起点思考真正变成自动编排的产线。本篇认知问题回显FAQQ1DiffDock/ConfGF/AlphaFlow 各生成什么、关键参数是什么A1DiffDock 给对接 pose 集合配体在口袋的摆放ConfGF 由 SMILES/图直接出配体多个 3D 低能构象AlphaFlow 用流匹配生成蛋白构象集合三者的采样步数/输出数量/温度等关键参数以各自官方 README 为准。Q2为什么生成式 ensemble 不能直接用A2AI 集合高度冗余、缺力场/拓扑/氢/水盒还可能有非物理几何直接塞给 MD 会算力浪费、缺参数、最小化即爆能必须经筛选/去冗余/转换。Q3怎么把一堆生成结构变成少而有效的 MD 多起点A3先按打分/置信度设门槛承接第 13 篇再逐个与新代表比对重原子 RMSD刚性拟合去冗余最后用 PDB/SDF→OpenMM 的转换脚本统一成带力场/水盒的 MD 输入。Q4AlphaFold-SFA 思路为何可迁移A4它把 AlphaFold 结构只当初始化起点用慢特征分析提取变化最慢的方向当 CV 结合元动力学去加速口袋开放/结合/变构迁移点是AI 集合只做出发不表结论、慢特征流形替代手工 CV、反复迭代回流与自适应采样闭环同构。Q5ensemble→OpenMM 转换的关键最小点是什么A5PDBFixer 补残基加氢 → 统一力场蛋白 ff14SBtip3p含配体则 GAFF2/OpenFF→ solvate 水盒与离子 → 落盘结构/系统每步加断言盒子原子数增大保证转换有效性。
返回列表