小贴士:百度量子 (量脉项目) 招聘实习生和工程师啦,点击了解详情 >>
Quantum Approximate Optimization Algorithm (QAOA) 即量子近似优化算法,是一种经典和量子的混合算法,用于解决组合优化问题,最为典型的案例即为最大切割 (MaxCut) 问题。在这篇学习汇报中,将主要介绍使用QAOA解决MaxCut 问题的基本策略。
参考文献
[1] Farhi, E., Goldstone, J., & Gutmann, S. (2014). A quantum approximate optimization algorithm. arXiv preprint arXiv:1411.4028.
[2] https://learn-quantum.com/EDU/originQuantumBook.html
[3] Edward Farhi, Jeffrey Goldstone, Sam Gutmann, Michael Sipser. Quantum computation by adiabatic evolution, 2000. arXiv:quant-ph/0001106.
[4] 段乾恒.绝热量子计算理论研究[D].湖南:国防科学技术大学,2014. DOI:10.7666/d.D01107876.
MaxCut 问题
首先了解一下 MaxCut 问题,它非常便于描述。考虑如下的一个又节点和连线组成的系统,我们需要把所有点分成两部分,检查这两部分之间连线的个数,而目标是找到连线个数最多的分组方案。
这是一种典型的组合问题,最简单的方法则是枚举法,这也是唯一一种能找到全局最优解(无近似)的方法,但这种方法的复杂度较高,特别对于顶点个数较大的情况,由于MaxCut仅将顶点分为两组,因此总共有 种分法,显然这是一个 NP-Hard 问题。
MaxCut 问题的量子描述
对于这样的高复杂度的问题,经典的算法显得有点力不从心,因而我们使用量子算法即QAOA进行优化。我们首先需要考虑的问题,就是如何将这样的问题使用量子计算的语言进行描述。恰好,使用二能级系统构造的量子体系(qubit)就可以很好地表达这个问题。
一个量子比特,其两种基态分别为 ,正好可以用来表示两种分组情况: 表示分到组0, 表示分到组1。因而多个量子比特就可以表示复杂系统的分组情况了。两个量子比特的情况如上图所示,四种切割方式中,只有 和 有连接线被切割,因为A和B被分到了不同的组,并且之间有连接线。
我们来看一种更复杂的情况,即有四个点并以如下图的方式连接:
对于这样的链接,则有 种切割方式,如下图所示,
现在,我们找到了使用量子比特来表示各节点的分组的方法,但是,似乎我们一楼了一个问题:我们应该使用何种方法表示各节点的链接方式?答案是使用哈密顿量。以前面提到过最简单的情况为例:
我们现在需要的效果是:如果A和B分到同一组则返回0,如果在不同组则返回1。如果能构造出满足上述效果的哈密顿量,那实际上就指定了连线的方式。现在我们来一步步推导这个过程。首先,我们可以构造一个经典函数:
这里解释一下,其中和分别为A和B的泡利算符的特征值,可分别取。我们看出当A和B被分到同一组后,其乘积总为正,因此, 而被分到不同组后,其乘积总为负, 因此。则总的最大切割问题可以表达为求最大的:
但是我们现在构造的只是一个经典函数,还不是哈密顿量,我们需要使用更进一步的推导来得到哈密顿量的方法。对于上面两节点的例子,共有四种切割方式:
其后面的表示能量本征值,在这里即表示切割边数。因此其对应的哈密顿量可以用密度矩阵表示为,即:
我们可以看出,对于这样一个两节点的系统的MaxCut问题,其实本质上就是一个问题异或操作:在同一组等于0,不在同一组等于1。
我们现在考虑使用泡利算符来表示异或操作。
首先我们来看看泡利算符与布尔变量的关系。对于一个泡利Z算符,它表示了一个二能级系统,这个系统可以处在两种能级态上,其本征态和本征值的表达式如下所示:
如果我们定义为布尔值的真,而为布尔值的假,我们可以得到如下量子态与布尔变量的对应关系:
注意,。介绍了这么多关于布尔变量与泡利算符的关系,我们来举个例子看看应该如何应用,我们这里就以逻辑与为例,使用量子态的语言就是如果节点A和B都为,则此时哈密顿量的能量本征值为1,否则都为0,则哈密顿量为
我们需要两个节点都为,用哈密顿量表示即为,则两个粒子都为的情况即为,即等于上面的四阶矩阵。回到我们最初的问题,那就是异或,我们现在来考虑如何使用哈密顿量来表示异或操作。我们可以使用逻辑表达式来表示异或即,这写成哈密顿量的形式也非常简单:
即得到异或的矩阵:
我们之前已经分析了,对于一个简单的两粒子系统,其切割的操作等价于上面得到的这个哈密顿量,那么对于一个较为复杂的系统情况又是如何呢?其实是非常简单的,即很多个二粒子的哈密顿量相加即可:
这里在一般的文献中更喜欢使用符号 来表示一条边。这里还需要注意的是上述哈密顿量的含义,每一个两粒子哈密顿量表示这两个粒子在异或操作下的能量本征态和本征值,而 表示的所有两个粒子分组问题(即异或操作)的总和(整个系统)的能量本征值和本征态。因此我们可以看出,这个哈密顿量 实际上存储了一个连接图的结构。
量子绝热算法(QAA)基本概念
我们先来看看传统的量子绝热定理表达了怎样的内容:
对于一个哈密顿量随时间变化的量子系统,如果这个量子体系在时刻处于的第个本征态上。而在系统演化过程中,演化速度足够缓慢,并且能级不发生交叉,则在演化结束时刻,系统将相应地处于的第个本征态上,外加一个相位因子。
如何来理解这个定理呢?首先我们用一个演化算子来表示系统演化:
其中,并且表示当前时间, 因而是一个表示时间的归一化因子。
对于一个系统演化,若其开始时刻和结束时刻的哈密顿量固定,则演化时间越长,其演化的速度就越慢,因而就约满足量子绝热定理,而当趋于无穷大时,系统一定满足量子绝热定理,此时有:
其中表示的是第个本征态,而对应的特征值是一个相位,其中为相位因子。这个公式说明了什么问题?也就是说在时刻,演化算符对初始哈密顿量的第个本征态的操作的效果,是增加了一个相位,并依然对应了现在的哈密顿量第个本征态。
那么这有什么意义呢?在量子计算上有什么作用?
对于一些不容易直接制备的基态的目标哈密顿量,我们可以先制备一个较为容易制备的初始哈密顿量,再通过控制参数,绝热地将初始哈密顿量调为目标哈密顿量。
举个例子,前面说的MaxCut问题,我们将这个问题的解编码在了哈密顿量上。这个哈密顿量或许非常难以制备,因此我们需要通过制备一个简单的初始哈密顿量,然后通过绝热演化让这个初始哈密顿量不断地逼近。这实际上也是一种分解的思路嘛,只是这是从时间上进行分解。考虑与时间相关的哈密顿量,其中是方便制备的初始哈密顿量,而是目标哈密顿量。这就是一个绝热演化过程,类似于线性插值。
在后面的章节中我们来看看如何利用QAOA绝热量子算法来解决MaxCut问题。
量子近似优化算法(QAOA)
这里的内容,实质上是MaxCut的推广。
前面我们介绍了MaxCut问题,我们可以对其进行一些简单的抽象。简单来说一个量子基态例如 对应了一种分组的方法,即前三个粒子在组0,第四个粒子在组1。我们可以吧这个基态看成一个比特传0001,并且其对应了一个能量本征值,这里我们用表示,这样,问题就抽象成了字符串到能量的映射函数:
我们的目标就是要找到使得能量最大的那一组。而这个问题本身是NP-hard问题,因为我们考虑使用量子算法来近似求解,“近似”意味着不一定能找到精确解,但是能找到一个近似的解,即满足:
其中,表示真实的最优解。
前面我已经介绍过了如何使用哈密顿量来表示 MaxCut 问题,在这个抽象的模型中我们也需要使用哈密顿量吧这个映射用哈密顿量来表示,而MaxCut问题的哈密顿量我们已经在前面给出了,即,这里给出其一般形式:
QAOA的过程到底是如何?
我们先不问为什么,总之过程很简单:
首先我们需要制备一个初态,即一个均匀分布的量子叠加态:
然后我们要在这个态上执行和 $H_C$ 操作并得到量子:
这里一共执行了$p$ 次变换,区别在于这里的每次的参数不一样,分别为:
随后,我们对量子态进行测量,得到在上的平均值:
这里我们仔细来看看这个平均值表达了什么含义。从基本的量子力学的只是可以看出,算符在量子态的平均值的定义是:
即算符的特征值的概率加权平均值,因此当本征值越大的本征态出现的概率越高时,则平均值越大。对应到我们的QAOA算法中的表述就是,能量本征值越高的那个本征态出现的概率越高时,则平均值越大;而如果当我们制备出的正好等于 能量本征值越高的那个本征态时,则平均值达到最大。
那QAOA算法整个过程的本质应当如何理解呢?
这个算法通过次操作,将初始态制备为了一个能让尽可能最大化的量子态使得参数我们可以制备出这样的量子态,而关键在于找到参数使得参数我们可以制备出这样的量子态:
其过程如下图所示:
现在我们对其思路也有了一定的了解,剩下的问题就是如何优化参数了。但是在学习参数优化之前,我们还有一个问题需要解决,那就是我们前面介绍了那么久的量子绝热算法QAA和QAOA到底有什么关系?
QAA和QAOA的关系
事实上,我们可以使用QAA来实现QAOA,还记得我们前面说的初始态吗?之前我们说这个初始态是一个均匀分布的叠加态,而若使用绝热量子算法,我们将设定为初始哈密顿量能量本征值最高的本征态,而根据前面所说的绝热原理,经过足够长时间的演化,将演变为的能量最高的本征态。而我们这里所说的足够长的时间,即指的足够大。