本源量子研发团队发布量子线路矩阵分解方案,以提升量子算法模拟效率!
背景介绍
目前,量子计算的算法通常用量子线路表示,量子线路包括量子逻辑门操作。连续的一段量子线路会包含几十上百个甚至成千上万个量子逻辑门操作。
当在经典计算机上模拟量子算法时,量子逻辑门数量或操作的量子比特数越多,计算过程越为复杂,导致量子线路的模拟效率较低,且对硬件资源的占用较多,模拟需要的时间就会更长。
对于上述问题,有必要对量子线路进行一种等价转换,减少量子线路中逻辑门的数量,同时在此基础上,需要确保转换前后整个量子线路对应的酉矩阵完全相同。
本源量子研发团队开发的分解量子线路酉矩阵的方案可实现这一目标。将一个N阶酉矩阵,分解成不超过$r=\frac{N(N-1)}{2}$个带有少量控制的单量子逻辑门序列,其中$N=2^{n}$,分解的产物满足如下等式关系
\[U_{r}U_{r-1}…U_{1}U=I_{N}\]
从而可以得到酉矩阵$U$的分解结果为
\[U=U_{1}^{T}U_{2}^{T}U_{3}^{T}…U_{r-1}^{T}U_{r}^{T}\]
对于一个量子比特数目确定的量子系统,即使分解前的量子线路含有成千上万个量子逻辑门,分解后的单量子逻辑门序列数量也会存在一个最大值,该值取决于量子比特数。从而有效减少量子线路的计算量,提高量子线路的模拟效率,同时减少硬件资源的占用。
不仅如此,该功能还可以把一定规模的酉矩阵分解为量子线路,省去了用户手动推导的麻烦。
如示例,一个两比特的复杂量子线路,其酉矩阵形式如下:
无论组成该酉矩阵原量子线路的逻辑门数量有多少,分解的结果最多为N(N−1)/2,即6个控制单量子门。
示例程序:
下面的示例代码给出了上述酉矩阵分解流程,代码如下:
#include "QPanda.h" int main(int argc, char** argv) { CPUQVM qvm; qvm.init(); auto qvec = qvm.qAllocMany(2); auto cvec = qvm.cAllocMany(2); QStat matrix = { qcomplex_t(0.652943, 0.57122),qcomplex_t(-0.29939, 0.282333), qcomplex_t(-0.191003, 0.120122), qcomplex_t(0.16255, -0.026325), qcomplex_t(-0.29939, 0.282333), qcomplex_t(0.652943, 0.57122), qcomplex_t(-0.16255, 0.026325), qcomplex_t(0.191003, -0.120122), qcomplex_t(-0.191003, 0.120122), qcomplex_t(-0.16255, 0.026325), qcomplex_t(0.652943, 0.57122), qcomplex_t(0.29939, -0.282333), qcomplex_t(0.16255, -0.026325), qcomplex_t(0.191003, -0.120122), qcomplex_t(0.29939, -0.282333), qcomplex_t(0.652943, 0.57122) }; auto decompose_cir = matrix_decompose(qvec, matrix); auto result_matrix = getCircuitMatrix(decompose_cir); cout <<matrix << endl; cout << result_matrix << endl; cout << decompose_cir << endl; qvm.finalize(); return 0; }
输出结果:
分解前酉矩阵:
分解后量子线路的酉矩阵形式:
分解后量子线路:
新方法的亮点
本文介绍的由本源量子研发团队开发的分解量子线路酉矩阵的方案,已在HHL算法中实践。
经实验证明,该分解方案是切实可行的,可以将分解后的量子线路复杂度控制在合理范围之内,完全不受到分解前量子线路复杂度的影响,通过将分解的结果数量约束在一个限定范围内,有效减少了量子线路中的量子逻辑门数量,提升了量子算法的模拟效率。
该方案可为未来可能出现的复杂的量子算法模拟提供技术支持,帮助研究人员拓展更丰富的量子线路模拟项目。
未来,我们也将该方案的应用拓展到其他量子算法的模拟中。
本文由本源量子研究团队发布,版权归本源所有,更多请关注本源量子官方微信。
www.originqc.com.cn