上周实验出差分演化在QAOA上效果较好,这周推翻了,差分演化虽然只迭代了30次,但是实际上要跑2000多个量子电路。这个数量还是太多了,我得找点别的方法。这周主要是看各种文献。
- 阅读Genetic algorithms as classical optimizer for the Quantum Approximate Optimization Algorithm:遗传算法在QAOA表现优秀。
- 阅读Energy landscapes for the quantum approximate optimization algorithm:QAOA的能量景观中的局部极小值集中分布在全局最小值附近,值越小越近。basinhopping在QAOA表现优秀。
- 阅读Noise-induced barren plateaus in variational quantum algorithms:噪声会导致贫瘠高原的产生
- 阅读Quantum Approximate Optimization Algorithm: Performance, Mechanism, and Implementation on Near-Term Devices:在某些特定图中,一种基于傅里叶变换的参数初始化方法可以将优化次数由2^O(p)减少至O(poly(p))
- 阅读Quantum Approximate Optimization via Learning-based Adaptive Optimization:一种基于信任域贝叶斯优化的算法在QAOA问题表现出色。这篇文章是腾讯的,他们用的tensorcircuit应该是对标qiskit的量子SDK,可以直接通过apikey调用腾讯的量子计算机,这个之后应该会用到。
- 阅读Surviving The Barren Plateau in Variational Quantum Circuits with Bayesian Learning Initialization:这篇也讲了QAOA的贫瘠高原问题,他们提出了先用贝叶斯优化确定大致位置,然后再用全局优化算法。
看完这些我大概是串起来了:QAOA难以优化的问题有两个,(1)整个能量景观里面充斥着大量O(p3)的贫瘠高原[3, 6]和一小撮聚集在一起极值点形成的盆地[2],要找到这个盆地就是第一个难点,要么通过递归由p=k-1的时候的最优参数定位[4],要么用贝叶斯优化[5, 6]。别的优化算法最后都能找到这个盆地,但是贝叶斯迭代次数最小 (2)第二个难点是这个盆地里面很崎岖,有大量极值点。如果在这一步还用贝叶斯优化,就会卡在某个局部极值点出不来。可以用信任域贝叶斯,忽略在盆地以外的数据点,这样贝叶斯优化就会主动探索极值点以外,做到类似于跳出的效果[3]。更直接点就是用basinhopping[2]。差分演化还有遗传算法效果都不错[1],其实都是因为“突变”起到了跳出的作用。
这样思路就清晰了:先用贝叶斯找一个初始点出来,然后剩下的用basinhopping。我下周先试一下这个,看看我推测的对不对。