|
|
5 years ago | |
|---|---|---|
| DJ | 5 years ago | |
| Grover | 5 years ago | |
| HHL | 5 years ago | |
| QFT | 5 years ago | |
| img | 5 years ago | |
| CMakeLists.txt | 5 years ago | |
| HHL_IR.txt | 5 years ago | |
| README.md | 5 years ago | |
| README.pdf | 5 years ago | |
README.md
第六组 第一次小组作业
组员:叶之帆,孙晨寅,吴浩洋
分工:
叶之帆:题一,题二的Grover和理解Oracle部分,报告撰写
孙晨寅:HHL算法
吴浩洋:题二的DJ算法
[toc]
题一
参照Quantum Fourier Transform的线路,通过QPanda实现,以OriginIR形式打印并检查。 要求:需要实现1~N位的所有情况
程序见:QFTtoIR.cpp
此处,假定对3位量子比特进行QFT变换,输出OriginIR如下:
QINIT 3
CREG 3
//以下为QFT线路
H q[0]
CR q[1],q[0],(1.5707963)
CR q[2],q[0],(0.78539815)
H q[1]
CR q[2],q[1],(1.5707963)
H q[2]
//对输出的3个量子比特交换次序
CNOT q[0],q[2]
CNOT q[2],q[0]
CNOT q[0],q[2]
//测量输出
MEASURE q[0],c[0]
MEASURE q[1],c[1]
MEASURE q[2],c[2]
题二
对于Application文件夹中的DJ_Algorithm, Grover_Algorithm, HHL_Algorithm中所执行的量子程序,打印为OriginIR形式(可以打印不同情况下的量子程序并对比)。 写出DJ_Oracle、Grover_Oracle在线路中处于什么位置
DJ_Algorithm
程序见:DJtoIR.cpp
对于函数 f(x) ,以下分别打印了 f(x) 在四种情况下的 DJ 算法的量子线路:
f(0)=0
f(1)=0
OriginIR:QINIT 2
CREG 1
X q[1]
H q[0]
H q[1]
//映射 Oracle 为空
H q[0]
MEASURE q[0],c[0]
f(0)=0
f(1)=1
OriginIR:QINIT 2
CREG 1
X q[1]
H q[0]
H q[1]
CNOT q[0],q[1] //映射 Oracle 为 CNOT 门
H q[0]
MEASURE q[0],c[0]
f(0)=1
f(1)=0
OriginIR:QINIT 2
CREG 1
X q[1]
H q[0]
H q[1]
CNOT q[0],q[1] //映射 Oracle 为 CNOT 门后接 X 门
X q[1]
H q[0]
MEASURE q[0],c[0]
f(0)=1
f(1)=1
OriginIR:QINIT 2
CREG 1
X q[1]
H q[0]
H q[1]
X q[1] //映射 Oracle 为 X 门
H q[0]
MEASURE q[0],c[0]
Grover_Algorithm
输出 OriginIR 的程序见GrovertoIR.cpp
OriginIR 的输出见GroverIR.txt
分析 GrovertoIR 构建量子线路部分的源码,分析知其中 Oracle 的部分如下,共被重复使用4次:
OrginIR版:GroverOracleOriginIR.txt
量子线路打印版:GroverOracleImg.txt
HHL_Algorithm
输出HHL算法的OringinIR的程序见:HHLtoIR
输出见:HHL_IR
如何理解Oracle
关于Oracle的理解参考了关于DJ、Grover算法和Oracle的介绍
Oracle是一段量子线路,它实现了:
对输入|x>|y>,输出为|x>|y+f(x)>,其中加法是一个模加运算。
-
举例来说,在DJ算法中,若f(x)恒为0,则映射Oracle为空;若f(x)恒为1,则映射Oracle为X门,作用于y上;若f(1)=0而f(0)=1,则先以x为控制比特在y上加CNOT门;再将y通过一个x门;若f(1)=1且f(0)=0,则以x为控制比特在y上加CNOT门。
-
而在上述Grover算法的示例程序中,定义了这样的一个f(x):
对数组A的元素进行编号0~15,可以用4个量子比特表示这16个位置,f(x1,x2,x3,x4)是一个四元函数,当且仅当
A[x_1*8+x_2*4+x_3*2+x_4]=6时,f(x1,x2,x3,x4)=1。
而Grover算法中复杂的Oracle线路恰实现了
|x_1>|x_2>|x_3>|x_4>|y> ==> |x_1>|x_2>|x_3>|x_4>|y+f(x_1,x_2,x_3,x_4)>
这一功能。
选做题
HHL算法是一个关于量子线性方程组求解的算法,请写出方程本身是怎么编码到量子线路中的。
上图是HHL算法量子线路图,下面介绍如何将Ax = b中的A和b编码进电路中。
b的编码(b -> |b>)
将 b 向量归一化成:
|b> = \begin{pmatrix}\ \alpha_1 \\ \alpha_2 \\ . \\ . \\ . \\ \alpha_{2^n-1} \end{pmatrix}
然后借助以下电路进行编码:
其中:
A的编码
- 若A是厄米的,则直接将其编码成:
e^{iAt} - 若A是非厄米的,则令:
编码:C = \begin{pmatrix} 0 & A \\ A^+ & 0 \end{pmatrix}e^{iCt} - 由单比特门和受控非门的完备性,则实现
e^{iAt}或e^{iCt}门的量子线路可由这两种门组成