技术背景

本文分享内容来自于最新的一篇名为Multibody molecular docking on a quantum annealer的文章,这篇文章的核心思想,是使用QUBO(二次受限二元优化)模型来求解一个分子对接问题:

分子对接

如果我们考虑空间中有\(N\)个分子,这\(N\)个分子可以摆放在任意的位置,以任意的角度。那么这些不同的位置和角度,每一个都可以计算出来一个能量值,不论是使用分子力场的方法,还是使用第一性原理计算的方法。而这其中每一个能量较低的位置组合,都是一个潜在的分子对接形式。两个分子的对接就叫两体对接,两个以上分子的对接可以称为多体对接。目前大多数的分子对接软件支持的还是两体对接,随着分子数量的增长,多体对接的计算难易度有可能是随着分子数量指数增长的。具体的复杂度跟建模方式有关,例如,在这篇文章中用到的二元建模方法,采样空间就是指数增长的。

QUBO模型

QUBO(quadratic unconstrained binary optimization formulation)模型常常被应用于组合优化问题中,其哈密顿量(损失函数)的通用形式为:

\[H_{QUBO}=\sum_ih_i(b_i)b_i+\sum_{i>j}J(b_i,b_j)b_ib_j
\]

其中\(b_i\)是一个二元变量\(b_i\in\{0,1\}\)。使用QUBO模型解决问题的基本思路,首先要把问题映射到一个二元变量上。举一个最简单的例子,背包问题(Knapspack Problem)的二元建模,有\(M\)个物体和1个背包,如果我们决定把第\(j\)个物体放到背包中,那么对应的二元变量\(b_j=1\)。相反地,如果我们决定不把第\(j\)个物体放到背包中,那么就有\(b_j=0\)。最终完成QUBO模型的求解之后,我们会得到一串二元字符串\(000111000...10100111\),而这其中被标记为1的物体都会被放到背包里面。在我们这篇文章中要介绍的,就是如何使用QUBO模型来建模和求解多体分子对接的问题。

问题场景

这篇文章中求解的一个问题是三个\(\alpha\)螺旋的对接问题。因为主要是思想性的创新,所以用的体系简单一些,当然,这样也更加方便验证结果的正确性。而且做了一个降维的简化,实际上求解的是一个二维平面的对接问题:三个螺旋结构平行放置且没有错位:

QUBO建模

文章前面提到,我们要用QUBO模型来解决分子对接问题,首先要进行二元的建模,把问题转化为一个二元的模型。然后确定每一项所对应的系数,这样才能进入到模型的求解阶段。关于这个三螺旋的问题,QUBO模型研究的是这三个螺旋之间的两两相互作用(因为QUBO模型最高只能做到二次,对应的就是两体相互作用)。因为我们最终求解的目标是找到一些低能量的对接位点,因此我们可以启发性的使用相关的能量来作为系数。单点能好说,因为单个的分子不论放在什么位置,其能量只有内部结构决定。而两体相互作用能量(主要成分是范德华作用力)的参数需要结合QUBO建模来考虑。

这篇文章使用的方法是,对二维的空间进行打格点操作,把空间离散化。然后针对于每一个格点进行one-hot编码,例如说,2号螺旋在格点1而3号格点在格点2,那么对应的二元表述就是:

\[b_{(1-1)*2+0}=b_0=1;b_{(1-1)*2+1}=b_1=0\\
b_{(2-1)*2+0}=b_2=0;b_{(2-1)*2+1}=b_3=1
\]

之所以这里面one-hot只用到了2维,这是因为我们在处理三体问题时,其实可以把其中的一个螺旋作为中心点不动,因此实际上one-hot的维度是2维。这样一来,实际上我们的解要在\(2^{2G}\)的解空间中去寻找,这里\(G\)表示打的格点的数量,一般跟分子本身无关。可以类似的推导,如果是有\(N\)体的相互作用,那么最终解空间的大小就会是\(2^{(N-1)G}\),也就是我们作为的指数级别增长。

确定了建模方法之后,我们可以通过计算分子的单点能和格点中的两两相互作用能量,来获得QUBO模型的系数:

约束条件

聪明的小伙伴已经意识到了一个问题,在上一个章节中的建模方法,会导致一个问题是,解空间中包含了两个分子处在相邻格点甚至是同一个格点内这样的解。还有可能出现一种更加不合理的情况:得到的解里面可能只剩下一个分子,会出现分子丢失的问题,这是Non-Physical的解。为了避免此类问题,需要在建模中加上一个惩罚值Penalty。因为这里加惩罚项的主要目的是为了避免分子被抹去的问题,因此约束条件可以这样定义:

\[\sum_ib_i^x=1
\]

这里\(x\)表示第\(x\)个分子,翻译成大白话就是:遍历所有的网格,你必然能找到且只能找到一个分子\(x\)。如果对所有的\(x\)加上这一项,那么就能尽可能的确保结果中不出现Non-Physical的解。不仅如此,一般情况下约束条件要双向约束,也就是过犹不及,因此一般都会采用二次形式的约束条件:

\[f(b^x)=(\sum_ib_i^x-1)^2=\sum_{i>j}2b_i^xb_j^x-\sum_ib_i^x+1=0
\]

要说明的是,这里约束条件只是作为一个目标,我们希望把\(f(b^x)\)这个约束条件优化到0,但实际上我们只能确保\(f(b^x)\)被加到QUBO模型完整的损失函数内的时候,得到完整的损失函数的最小值。

建模的最后,我们要得到带有惩罚值\(\gamma\)的最终哈密顿量(损失函数):

\[H_{MBD}=H_{QUBO}+\gamma f(b^x)=\sum_{x\in X'}\sum_{i=1}^{T}(h(b_i^x)-\gamma)b_i^x+\sum_{x\geq y}\sum_{i>j}(J(b_i^x,b_j^y)+\delta)b_i^xb_j^y
\]

其中\(\delta\)有:

\[\delta=\left\{
\begin{matrix}
2\gamma, x=y\\
0, otherwise
\end{matrix}
\right.
\]

因为我们建模的时候固定了一个中心的\(\alpha\)螺旋,所以建模中的约束条件实际上是针对于可移动的单体目标的,这个集合被设定为\(X'\)。

求解QUBO模型

当QUBO建模完成后,QUBO模型的求解过程是固定的,目前而言有三种主流的方法:使用退火机求解、使用模拟退火算法求解、使用QAOA算法求解,其中QAOA算法相当于退火算法的一个离散化版本,但是因为可以在量子计算机上面进行求解,所以退火机求解和QAOA求解算法可以重点关注下。而这篇文章里面用到的是退火机和模拟退火,退火机使用的是加拿大公司Dwave的硬件,亚洲地区用光学做的退火机可能更多一些。

退火的大致原理,就是构造一个简单的哈密顿量\(H_0\)和对应的本征态\(|{\psi_0}\rangle\),以及目标哈密顿量\(H_{MBD}\)和目标量子态\(|{\psi_{MBD}}\rangle\),通过准静态过程实现\(H_{t}=\lambda H_0+(1-\lambda)H_{MBD}\)。根据绝热近似(adiabatic approximation)理论,我们最终可以制备出来目标哈密顿量的量子态,从而实现对目标哈密顿量的求解。在前面的文章中我们实现过使用绝热演化/量子退火算法求解矩阵本征态以及量子绝热算法求解最大切割问题,感兴趣的读者可以跳转去看一下退火算法的相关实现,这里不做赘述。

总而言之我们最终会得到一个本征量子态。而所谓的量子态在这个问题求解中的含义,其实对应的是一个求解空间的子空间。在这个子空间中进行采样,有更高的概率可以获得最终的最优解,并不是说这个量子态就是最终解了。而如果是通过退火机和量子计算机的体系来实现的话,可以做到高效的采样,从而做到更加快速的得到最优解。在我们引用的这篇文献中,重点介绍了一下惩罚值对于采样结果的影响,从而指导采样结果的选取。其实对于更多的工程问题而言,惩罚值的选取更多的依赖于经验,是一个经验参数。

文献里面的基本结论是这样的:如果惩罚值选取的过小,那么没办法区分开Physical的解和Non-Physical的解;如果惩罚值过高,则很难采样采到能量较低(较优)的Physical解;因此,适中的惩罚值会是一个更好的选择:

文献中还有一些更进一步的测试结果,还包含了退火机和模拟退火算法的效果比对,感兴趣的读者可以自行下载文献进行阅读。

总结概要

本文主要分享了文献Multibody molecular docking on a quantum annealer中的主要建模思路和初步的测试结果,可以实现QUBO模型求解多体分子对接的问题。在目前常见的分子对接软件中,更多的是实现的两体对接,多体对接的采样空间有可能会随着分子数量的增长而指数增长。而借助于量子退火机或者是量子计算机来求解这样的一个问题,不失为一个较好的思路。

版权声明

本文首发链接为:https://www.cnblogs.com/dechinphy/p/qubo_docking.html

作者ID:DechinPhy

更多原著文章:https://www.cnblogs.com/dechinphy/

请博主喝咖啡:https://www.cnblogs.com/dechinphy/gallery/image/379634.html

参考文献

  1. "Multibody molecular docking on a quantum annealer". Mohit Pandey, Tristan Zaborniak, Hans Melo, Alexey Galda, and Vikram Khipple Mulligan

基于QUBO模型的多体分子对接的更多相关文章

  1. 生信云实证Vol.12:王者带飞LeDock!开箱即用&一键定位分子库+全流程自动化,3.5小时完成20万分子对接

    LeDock是苏黎世大学Zhao HongTao在博士期间开发的一款分子对接软件,专为快速准确地将小分子灵活对接到蛋白质而设计.LeDock优于大部分商业软件,在Astex多样性集合上实现了大于90% ...

  2. 大前端学习笔记整理【一】CSS盒模型与基于盒模型的6种元素居中方案

    概览 CSS盒模型,规定了元素框来处理元素的 内容.内边距.边框和外边距的方式 元素部分是指内容部分,也是最实际的内容,包围内容的称之为内边距,内边距外围是边框,边框外围就是外边距:且外边距是透明的, ...

  3. 中国快递包裹总量的预测-基于SARIMA模型

    code{white-space: pre;} pre:not([class]) { background-color: white; }if (window.hljs && docu ...

  4. 基于RBAC模型的通用企业权限管理系统

    1. 为什么我们需要基于RBAC模型的通用企业权限管理系统 管理信息系统是一个复杂的人机交互系统,其中每个具体环节都可能受到安全威胁.构建强健的权限管理系统,保证管理信息系统的安全性是十分重要的.权限 ...

  5. 京东评论情感分类器(基于bag-of-words模型)

    京东评论情感分类器(基于bag-of-words模型) 近期在本来在研究paraVector模型,想拿bag-of-words来做对照. 数据集是京东的评论,经过人工挑选,选出一批正面和负面的评论. ...

  6. 微软BI 之SSAS 系列 - 基于雪花模型的维度设计

    基于雪花模型的维度以下面的 Product 产品与产品子类别,产品类别为例. DimProduct 表和 DimProductSubcategory 表有外键关系,而 DimProductSubcat ...

  7. AIOps探索:基于VAE模型的周期性KPI异常检测方法——VAE异常检测

    AIOps探索:基于VAE模型的周期性KPI异常检测方法 from:jinjinlin.com   作者:林锦进 前言 在智能运维领域中,由于缺少异常样本,有监督方法的使用场景受限.因此,如何利用无监 ...

  8. 基于WSAAsyncSelect模型的两台计算机之间的通信

    任务目标 编写Win32程序模拟实现基于WSAAsyncSelect模型的两台计算机之间的通信,要求编程实现服务器端与客户端之间双向数据传递.客户端向服务器端发送"请输出从1到1000内所有 ...

  9. 基于Select模型通信程序的编写,编译和执行

    任务目标 编写Win32程序模拟实现基于Select模型的两台计算机之间的通信,要求编程实现服务器端与客户端之间双向数据传递.客户端向服务器端发送"计算从1到100的奇数和",服务 ...

  10. 基于EPOLL模型的局域网聊天室和Echo服务器

    一.EPOLL的优点 在Linux中,select/poll/epoll是I/O多路复用的三种方式,epoll是Linux系统上独有的高效率I/O多路复用方式,区别于select/poll.先说sel ...

随机推荐

  1. 2023 年值得一读的技术文章 | NebulaGraph 技术社区

    在之前的产品篇,我们了解到了 NebulaGraph 内核及周边工具在 2023 年经历了什么样的变化.伴随着这些特性的变更和上线,在[文章]博客分类中,一篇篇的博文记录下了这些功能背后的设计思考和研 ...

  2. 【苹果】SpringBoot监听Iphone15邮件提醒,Selenium+Python自动化抢购脚本

    前言 缘由 Iphone15来了,两年之约你还记得吗? 遂整合之前iphone13及iphone14的相关抢购代码,完成一个SpringBoot监听Iphone15有货邮件提醒+python自动化脚本 ...

  3. 【夏令时】用@JsonFormat(pattern = “yyyy-MM-dd“)注解,出生日期竟然年轻了一天

    前言 缘由 用@JsonFormat(pattern = "yyyy-MM-dd")注解,出生日期竟然年轻了一天 艺术源于生活,bug源于开发. 起因是艰苦奋战一个月,测试及验收都 ...

  4. Android Handler实现子线程与子线程、主线程之间通信

    一.子线程向主线程传值: 首选在主线程里创建一个Handler 1 Handler mHandler = new Handler(){ 2 @Override 3 public void handle ...

  5. C++ //类模板与友元 //全局函数类内实现 -直接在类内声名由于即可 //全局函数类外实现 -需要提前让编译器知道全局函数的存在

    1 //类模板与友元 2 //全局函数类内实现 -直接在类内声名由于即可 3 //全局函数类外实现 -需要提前让编译器知道全局函数的存在 4 5 #include <iostream> 6 ...

  6. CefSharp 开发触屏终端遇到的问题记录

    一.背景 最开始准备使用的 Chromely 做一个终端机项目,本来以为挺顺利的一个事情折腾了两天半.由于无法直接控制窗体的属性,最后还是切换到 .NET Framework 4.8 + CefSha ...

  7. 谈谈Java的特点和优点以及选择Java的原因

    ​ 如果面试官问你:请你说说Java的特点和优点,为什么要选择Java?你该怎么回答? 得分点 Java的特点 Java与C++的区别 Java的优点 标准回答 Java是一门非常纯粹的面向对象的编程 ...

  8. 解决Windows下json.hpp中文乱码问题

    文中使用的是 json 库,整个库的代码由一个单独的头文件json.hpp组成,用普通的C++11编写的.它没有库,没有子项目,没有依赖关系,没有复杂的构建系统,使用起来很方便. 先引用头文件和命名空 ...

  9. Java加密技术(三)——PBE算法

    Javapbe对称加密     除了DES,我们还知道有DESede(TripleDES,就是3DES).AES.Blowfish.RC2.RC4(ARCFOUR)等多种对称加密方式,其实现方式大同小 ...

  10. 【LeetCode刷题】239.滑动窗口最大值

    239.滑动窗口最大值(点击跳转LeetCode) 给你一个整数数组nums,有一个大小为k的滑动窗口从数组的最左侧移动到数组的最右侧.你只可以看到在滑动窗口内的k个数字.滑动窗口每次只向右移动一位. ...