这篇文章简要介绍分子生成程序 Surge 的工作原理。Surge 是当下最好的开源的分子生成程序,枚举百万量级分子仅需要0.1秒左右。文献

前言

分子生成一直以来是化学信息学的研究热点。一个完备的分子数据库是开展分子虚拟筛选和探索分子构型空间的基础设施。该领域最早可以追溯到1960年代,NASA为探索火星生命开启了Mariner项目,其中一个子任务是基于海量的质谱数据分析火星上可能存在的有机小分子,就此诞生了第一款分子生成程序DENDRAL。这款程序通过将经典的小分子结构排列组合,拼接形成大分子结构,此外能够剔除部分不合理的分子构型。与之类似的另一款程序ASSEMBLE也是采用类似的策略。事实上,这一阶段已经涉及到图论、排列组合等数学原理了。后来的MASS, SMOG, COCON, LSD, MOLGEN, GENG大都应用了数学原理,其中MOLGEN一直以来都是该领域的佼佼者,发展至今,MOLGEN 5.0是最快、完备性和可靠性最高的程序。然而,MOLGEN 5.0是闭源的商业软件,一定程度上阻碍了部分想要从业的有志之士。

因此,构建开源的分子生成程序的呼声越来越高,Surge 就在这样的环境下应运而生。22年4月发表,一作是开发了图同构领域中Nauty程序的Brendan D. McKay。这位老爷子1980年博士毕业,算起来今年已经70岁左右了,还在亲手写程序,着实让人钦佩。废话不多说,Surge 程序表现怎么样呢?

下图是SurgeMOLGEN的对比:

  1. MOLGEN程序在大多数情况下并不能完备穷举,总数会停在 2 31 − 1 2^{31}-1 231−1个构型位置上。
  2. Surge 程序能够进行完备穷举,且总运行时间比 MOLGEN 小1~2个数量级。

此外,Surge 还有内存小等诸多优势,具体请看文献。

下面介绍一下Surge的工作流程。

工作流程

Surge 包含3个主要的工作步骤,分别对应 nauty 程序包中的 geng.c, vcolg.c, multig.c

其中 geng.c 是主流程,和原版本几乎一致。vcolg.c, multig.c 体量较小,作者在 surge.c 中重写了一下,并通过 surgeproc 函数注入到了 geng.c 内部。函数调用关系如下图所示:

注:geng_main 设为黄色,表示其由外部独立文件组成。

三个主要程序的功能如下图所示:

  1. geng 负责穷举所有的图。这种图不具备点和边的性质。
  2. vcolg 负责对第一步产生的图点染色。所谓点染色,指把不同原子类型分配给各个顶点。
  3. multig 负责对第二步产生的图进行边染色,即分配不同的边类型。

三个程序的主要思路相差不大,和 “ nauty求解图自同构群 ” 的思路一致,均为 DFS 算法。相关链接可以参考我之前一篇文章:判断图同构大杀器—nauty算法

下面我以点染色算法为例简要介绍工作原理。

点染色算法

自同构群去冗余

点染色算法的前提是图和图的自同构群均已知。使用自同构群去冗余可以简化为如下场景:

一串二进制数,比如说 0100111 。图的自同构群指,通过交换某两个字的位置,在图论的视角下,二者是等价的,只有一个是正则化、合法的。

也就是说 10001110100111 这两串数字所代表的特定图可能是一致的,如果一致,则在一定规则下,二者中仅有一个是正则的名称,而另一种是冗余的名称。我们只需要保存前者。

化学套用场景

我们都知道,分子的真实结构是三维的。化学信息学处理类似数据会将其看成二维的分子图。而群论的描述对象更加抽象,将二维分子图转化为了一串数字,也就是每个原子对应的 Label 。此外,不同原子还有不同的颜色,也有对应的抽象表达。这里下篇文章会细讲,此处仅需要知道,群论的对象是一串一维的数字,经过了两次压缩,如下图所示:

另一个比较重要的概念是,交换( Permutation, 直译是排序)。一种交换的场景如上图所示,序号为 0,1 的两个原子进行交换。从化学视角来看,这种交换不会改变分子结构,因此我们称交换前后的分子是同构的。
结合上一小节,我们知道,自同构群的作用就是不停对数组交换,相当于一个 if 模块,能够筛选出群论视角下不同构的数组。利用这样的性质我们可以解决如下问题:

  1. 一个分子图有 7 个原子,我们设 C 对应 0, N 对应 1,0100111 则对应一种 C 3 N 4 \rm C_3N_4 C3​N4​ 的异构体。
  2. 我们“穷举”出所有可能的数组,则每一个数组对应一个异构体。
  3. 在分子骨架确定的条件下,使用自同构群( if 模块)过滤出所有不同构的数组,对应所有异构体。

debug 模式下,我认为,vcolg 是这样运作的:

首先是叶节点的遍历,在遍历过程中,如果一个状态通过了自同构检测,则从该状态开始进行亚叶节点的遍历。未通过自同构检测的组合,不会进行回溯,由此实现剪枝。所以说,这是一种 DFS 算法。

后续如果有更深的理解,会再写文分享。

Surge:分子生成最前沿相关推荐

  1. 用于分子生成的数据高效性图语法学习

    近年来分子生成问题收到了很多关注.但是现有的方法都是基于深度神经网络,需要在很大的数据集上训练.在实践中,由于劳动密集型实验和数据收集,特定类别化学数据集的规模通常是有限的(例如,几十个样本).这对深 ...

  2. RDKit | 基于多片段的分子生成(骨架A+骨架B+骨架C)

    通过BRICS算法产生片段库 通过结合三个片段(A,B,C)生成ABC型分子. 环境 Win10 RDKit2020.09.1 Python=3.7.9 基于多片段的分子生成 导入库 import n ...

  3. RDKit | 基于片段的分子生成(骨架A+骨架B)

    通过BRICS算法产生片段库 通过结合两个片段(A,B)生成了一个新分子(AB). 环境 Win10 RDKit2020.09.1 Python=3.7.9 基于双片段的分子生成 导入库 import ...

  4. JCIM| 基于双向RNN的分子生成模型

    今天给大家介绍的是被誉为"欧陆第一名校"苏黎世联邦理工学院(ETH Zurich)化学与应用生物科学系博士生Francesca Grisoni和制药行业顾问Gisbert Schn ...

  5. J. Cheminform. | 基于SMILES的利用骨架的分子生成模型

    今天给大家介绍的是瑞典制药公司阿斯利康,伯尔尼大学和广州再生医学与健康中心广东省实验室于2020年2月4日联合发表在Journal of Cheminformatics的一篇论文,这篇文章提出了一种新 ...

  6. MOSES | 分子生成模型的基准平台

    MOSES简介 深度生成模型因发现新的分子和材料而迅速流行. 这样的模型可以从大量的分子结构中学习并产生新的化合物. 这项工作中介绍了分子集(MOSES),一个基准平台,可支持针对药物发现的机器学习研 ...

  7. 将图卷积神经网络用于解码分子生成

    ©PaperWeekly 原创 · 作者|张玮玮 学校|东北大学硕士 研究方向|脑电情绪识别 论文标题: A Two-Step Graph Convolutional Decoder for Mole ...

  8. Frontiers in Pharmacology2020 | MOSES+:分子生成模型的benchmark平台

    MOSES+:Molecular Sets,A Benchmarking Platform for Molecular Generation Models GitHub - molecularsets ...

  9. 【GNN报告】腾讯AI lab 徐挺洋:图生成模型及其在分子生成中的应用

    目录 1.简介 2.An overview of Graph Generative Models and Their Applications on Molecular Generation 背景 图 ...

最新文章

  1. node.js(node.js+mongoose小案例)_实现简单的注册登录退出
  2. 简单几何(线段相交+最短路) POJ 1556 The Doors
  3. linux基础分支,Linux基础--/etc/shadow中字段的分支和操作
  4. hibernate在分层架构中修改数据(update)时遇到的问题!!
  5. SendMessage、PostMessage原理和源代码详解
  6. 中国进口消费市场研究报告2020
  7. SAP License:SAP 成本管理专题
  8. python 等值面 插值_利用numpy/scipy从三维阵列计算等值面
  9. python - Flask 基础(1)
  10. Python请求外部POST请求,常见四种请求体
  11. STM32_HAL新建工程
  12. Unity -- 正交/透视相机切换(2D/3D相机切换)
  13. 不要迷恋哥,哥只是个传说!
  14. keil中设置的flash(irom)的起始地址为0x08000000,这个0x08000000的意义------stm32地址映射图解析
  15. Unity_AR制作_80
  16. JDBC驱动与MySQL版本不兼容的问题
  17. Docker安装好后默认路径
  18. pdf转换成excel转换器
  19. 大众点评热门餐厅抓取与数据分析
  20. KSO-vue创建项目以及安装npm与node

热门文章

  1. win7计算机-网络-intenet不通629,win7系统宽带连接错误629的解决方法
  2. prettier 配置
  3. MySQL 项目中常用的优化索引方案
  4. ldd not a dynamic executable 问题
  5. 炫云支持3ds max2022、maya2022和C4D R21
  6. Bounded-Buffer
  7. openGauss 助力邮储银行分布式新核心迈向智能运维时代
  8. Proxmox VE /Debian /Ubuntu 设置合上笔记本盖子不休眠的方法
  9. 山东省论文期刊代发代写机构
  10. MATLAB permute命令的操作逻辑