量子算法-HHL
HHL 是一种量子算法,用来求解线性方程组,
编码及总体思路
首先需要保证 A 是 Hermitian 矩阵(即
如果 A 不是 Hermitian 的,可以构造
问题转化为求这个方程的解
给定向量 b,将其归一化后编码到振幅上得到
在 A 的特征基下面,
算法步骤
算法需要 3 种寄存器
a-register
:1 bitc-register
:bit 数量等于取决于编码特征值的精度,记为 n,记b-register
:要求 的编码数量可以编码向量 b 的维数 ,也就是说 ,因为我们最后要将结果编码到b-register
的振幅中
计算
初始状态为
量子线路分为以下 4 个部分:
相位估计
在
c-register
中得到对应特征向量的特征值受控旋转
受控旋转是为了在振幅中产生
这是一个多 bit 受控门,控制 bit 是 c-register,受控 bit 是 a
这个门的作用是向
的 a-register 作用RY 门:其中
式中 C 为
的归一化系数,有 ,从而任意 , 一般可以取 1这样就得到了
测量(如果
a-register
测量得到的值为 1 ,继续如果得到 0,剩下的量子状态不是我们想要的,应该重新进行前面的计算直到在这一步测量出 1
测量既可以在 control-RY gate 之后进行,也可以在最后一步的 IQPE 之后进行,如果在最后进行测量,我们只保留
a-register
测出 1 的结果逆相位估计
逆相位估计是为了将
c-register
中的 清零
经过上面的步骤,我们得到的状态是
此时 b-register
里面就是我们方程的解
总结
主要步骤以及过程中的寄存器状态变化如下:
总的来说就是一个 c-register
上,然后用 c-register
控制旋转门改变该特征向量对应的振幅,最后清除c-register
上的特征值。
其中 t 是哈密顿量演化的时间
在 QPE 中用的算子是
根据 QPE 算法,QPE 之后,寄存器 c 中的值为
计算例子
这个例子来源于参考资料【2】
计算
A 已经是一个 Hermitiam 矩阵,可以直接计算。
注:在以下的讨论中,左边是高位,右边是低位,对应到量子电路图(image 2)上,左边对应下面的qbit,右边对应上面的qbit。
确定 bit 数量以及参数
- c-register:1 位
- 辅助变量:2 位,因为 A 的特征值为
,两位足以精确表示这两个特征值, - b-register:1 位,因为 1 bit 有两种量子态,足以表示向量 b
这个例子的量子电路图:
QPE
经过初始化之后
而在推导过程中,
所以,
IQFT 是逆的傅里叶变换,得到
control RY
旋转
IQPE
再经过一个逆 QPE,把 clock bit 置零,得到
现在进行测量,b-register
得到 1 的概率是 0 的 3 倍
实际上
代码实现(qpanda)
求解
经过计算得到
A 的特征值为
电路图
QFT
QPE
HHL 总体电路
代码
1 | from typing import Tuple, Any |
参考资料:
【1】HHL算法 — pyQPanda 文档 (pyqpanda-toturial.readthedocs.io)
【2】这篇文章写的很清楚:Step-by-Step HHL Algorithm Walkthrough to Enhance the Understanding of Critical Quantum Computing Concepts