QPanda2教程-part1-第一章

PyQPanda2教程

第一部分:基础篇

第一章 第一个量子程序

1.1 环境配置

首先,我们需要安装anaconda,python,并把python所在的文件夹添加到系统的环境变量里,方便我们后续使用

https://www.anaconda.com/download

可以通过上面的链接从官网进行下载

在成功安装完anaconda后,我们打开PowerShell,然后在其中输入pip install pyqpanda,然后等待安装完成。安装完成后,我们在命令提示符中输入python,然后输入import pyqpanda,如果程序没有报错,则说明我们安装成功

1.2 编写第一个量子程序

在QPanda2中,QProg是量子编程的一个容器类,是一个量子程序的最高单位

下面是实现一个简单的量子程序的代码

from pyqpanda import *
qvm=CPUQVM()
qvm.init_qvm()
qubits=qvm.qAlloc_many(2)
cbits=qvm.cAlloc_many(2)
prog=QProg()


prog<<H(qubits[0]) \
    <<H(qubits[1]) \
    <<measure_all(qubits,cbits)

result=qvm.run_with_configuration(prog,cbits,1000)
print(result)

下面对上面这段代码进行解释

首先我们从pyqpanda中导入所有的内容

第一行qvm=CPUQVM()是申请一个量子虚拟机,我们后面会解释

qvm.init_qvm()是初始化虚拟机

qubits=qvm.qAlloc_many(2)是申请两个量子比特,储存在qubits

cbits=qvm.cAlloc_many(2)是申请两个经典比特

prog=QProg()是创建一个量子程序

prog<是将阿达玛门作用在第一个量子比特上,然后插入量子程序中,在这里,pyqpanda重载了运算符<<,作用是将量子线路插入量子程序

measure_all(qubits,cbits)是对量子比特进行测量,结果存储在cbits

result=qvm.run_with_configuration(prog,cbits,1000)是将量子程序运行1000次,结果存储在result

运行这段代码,我们将得到如下结果

{'00': 252, '01': 240, '10': 275, '11': 233}
1.3 深入了解

我们在获取量子比特时,他的状态是什么?0态?1态?还是叠加态

为了了解这个,我们可以修改代码,然后对量子比特进行多次测试,代码如下

from pyqpanda import *
qvm=CPUQVM()
qvm.init_qvm()
qubits=qvm.qAlloc_many(1)
cbits=qvm.cAlloc_many(1)
prog=QProg()

prog<<measure_all(qubits,cbits)
result=qvm.run_with_configuration(prog,cbits,1000)

print(result)

运行后我们得到结果{'0': 1000}

从结果我们可以看到,申请的量子比特为0态,也就是基态

那么,如果我们对其进行一次阿达玛变换,然后对其进行测量,他的量子态会变化吗,下面我们写代码对其进行测试

from pyqpanda import *
qvm=CPUQVM()
qvm.init_qvm()
qubits=qvm.qAlloc_many(1)
cbits=qvm.cAlloc_many(10)
prog=QProg()

prog<<H(qubits[0]) \
    <<Measure(qubits[0],cbits[0]) \
    <<Measure(qubits[0],cbits[1]) \
    <<Measure(qubits[0],cbits[2]) \
    <<Measure(qubits[0],cbits[3]) \
    <<Measure(qubits[0],cbits[4]) \
    <<Measure(qubits[0],cbits[5]) \
    <<Measure(qubits[0],cbits[6]) \
    <<Measure(qubits[0],cbits[7]) \
    <<Measure(qubits[0],cbits[8]) \
    <<Measure(qubits[0],cbits[9]) 
result=qvm.run_with_configuration(prog,cbits,1)

print(result)

我们申请10个经典比特,对其进行10次测量,观察最后结果,运行多次发现,结果只会为

{'0000000000': 1}
{'1111111111': 1}

这样,我们可以确定,当对量子比特进行测量后,他的状态就会变成测量后的状态

这里的Measure(qubit,cbit)是对单个量子比特进行测量,结果存储在经典比特容器中

当然,我们也可以通过计算哈密顿期望来得知量子比特的现态,这里仅作参考,之后我们再研究,代码如下

from pyqpanda import *
qvm=CPUQVM()
qvm.init_qvm()
p=PauliOperator({"Z0":2})
Hmt=p.to_hamiltonian(False)
qubits=qvm.qAlloc_many(1)
cbits=qvm.cAlloc_many(10)
prog=QProg()

prog<<H(qubits[0])
result=qvm.get_expectation(prog,Hmt,QVec(qubits))

print(result)

运行结果

0.0

写完了第一个量子程序,下一章我们将会介绍量子程序里的控制语句,即QifQWhile

你可能感兴趣的:(量子计算)