You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
yezhifan 0593d0d8d0
another small revision
5 years ago
DJ finsihed DJtoIR & GrovertoIR 5 years ago
Grover final revision 2 5 years ago
HHL finished all tasks 5 years ago
QFT final revision 2 5 years ago
img finished all tasks 5 years ago
CMakeLists.txt finished all tasks 5 years ago
HHL_IR.txt finished all tasks 5 years ago
README.md another small revision 5 years ago
README.pdf another small revision 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)>,其中加法是一个模加运算。

  1. 举例来说在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门。

  2. 而在上述Grover算法的示例程序中定义了这样的一个f(x)

    对数组A的元素进行编号015可以用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算法是一个关于量子线性方程组求解的算法请写出方程本身是怎么编码到量子线路中的。

图1

上图是HHL算法量子线路图下面介绍如何将Ax = b中的A和b编码进电路中。

b的编码b -> |b>

将 b 向量归一化成:


|b> = \begin{pmatrix}\ \alpha_1 \\ \alpha_2 \\ . \\ . \\ . \\ \alpha_{2^n-1} \end{pmatrix}

然后借助以下电路进行编码:

图2

其中:

图3

A的编码

  1. 若A是厄米的则直接将其编码成
    
    e^{iAt}
    
  2. 若A是非厄米的则令
    
    C = \begin{pmatrix} 0 & A \\ A^+ & 0 \end{pmatrix}
    
    编码:
    
    e^{iCt}
    
  3. 由单比特门和受控非门的完备性,则实现e^{iAt}e^{iCt}门的量子线路可由这两种门组成