振幅放大¶
振幅放大(Amplitude Amplification)线路的主要作用为对于给定纯态的振幅进行放大,从而调整其测量结果概率分布。
算法背景¶
对于某个已知大小的可二元分类且标准 \(f\) 确定的有限集合 \(\Omega\),基于 \(f\) 可以将集合中的任一元素\(\left|\psi\right\rangle\) 表示为两个正交基态 \(\left|\varphi_0\right\rangle,\left|\varphi_1\right\rangle\) 的线性组合。
振幅放大量子线路可以将叠加态 \(\left|\psi\right\rangle\) 的表达式中 \(\left|\varphi_1\right\rangle\) 的振幅放大,从而得到一个结果量子态,能够以大概率测量得到目标量子态 \(\left|\varphi_1\right\rangle\)。
假设我们可以构造出某种量子门操作的组合,记该组合为振幅放大算子 \(Q\) ,将 \(Q\) 作用 \(k\) 次于量子态\(\left|\psi\right\rangle\) 上得到形如下式的量子态
那么就完成了所需的振幅放大量子线路构建。
相应的量子线路图如下:

假设基于集合 \(\Omega\) 和分类标准 \(f\) 的量子态 \(\left|\psi\right\rangle\)已经完成制备,关键在于构造振幅放大算子 \(Q\) 。
定义振幅放大算子如下
备注
如何通过集合 \(\Omega\) 和分类标准 \(f\) 来制备量子态? \(P_1,P\) 又是怎样通过量子线路实现的?
简单验证可知在 \(\{\left|\varphi_1\right\rangle,\left|\varphi_0\right\rangle\}\)张成的空间中算子 \(Q\) 可以表示为
实质上可以视为一个角度为 \(2\theta\) 的旋转量子门操作。因此有
选取合适的旋转次数 \(n\) 使得 \(\sin^2{\left(2n+1\right)\theta}\) 最接近 \(1\) 即可完成振幅放大量子线路。
相比经典的遍历分类方法,振幅放大量子线路可以充分体现量子计算的优势。
代码实例¶
取 \(\Omega=\{0,1\}, \left|\psi\right\rangle = \sin{\frac{\pi}{6}}\left|1\right\rangle+ \cos{\frac{\pi}{6}}\left|0\right\rangle,\ P_1=I-2\left|1\right\rangle \left\langle 1\right|=Z, P=I-2\left|\psi\right\rangle \left\langle\psi\right|\),
振幅放大量子线路的相应代码实例如下
#!/usr/bin/env python
import pyqpanda as pq
from numpy import pi
if __name__ == "__main__":
machine = pq.init_quantum_machine(pq.QMachineType.CPU)
qvec = machine.qAlloc_many(1)
prog = pq.create_empty_qprog()
# 构建量子程序
prog.insert(pq.RY(qvec[0], pi/3))
prog.insert(pq.Z(qvec[0]))
prog.insert(pq.RY(qvec[0], pi*4/3))
# 对量子程序进行概率测量
result = pq.prob_run_dict(prog, qvec, -1)
pq.destroy_quantum_machine(machine)
# 打印测量结果
for key in result:
print(key+":"+str(result[key]))
输出结果应如下所示,分别以 \(1\) 和 \(0\) 的概率得到 \(\left|1\right\rangle\)和 \(\left|0\right\rangle\) :
0:0
1:1