量子计算(8)pyqpanda编程3:测量操作

        作为一名高产博主,小编我一天不写文章就浑身难受,这不,一闲下来就来给大家科普量子计算编程操作了。

        今天我们要来探讨“测量操作”,众所周知,薛定谔的猫是一种既死又活的状态,很多人认为,猫是死还是活,取决于最后那一次测量,这里的测量指的是打开那个含有氰化物、少量的镭以及那只可怜的猫所在房间的门,我们一看便知道。那么在微观世界中,我们如何测量这些量子的状态,是值得我们深思的一个问题。

一、量子测量

        量子测量是指通过外界对量子系统进行干扰来获取需要的信息,测量门使用的是蒙特卡洛方法的测量。也就是说,测量之后就会对原系统造成破坏,这也是量子系统一个让人头疼的地方。这就好比,小明同学成绩很优秀,需要通过考试测量出他有多么优秀,期末的时候进行期末考试,先考语文,再考数学。但是在语文考试结束之后,由于刚考完内心压力太大了,心态上发生了些许变化,这个时候再去考数学,不一定会考出他原有的水平。

1、测量

        在量子程序中我们需要对某个量子比特做测量操作,并不好直接测量,我们需要找一个靠谱并且熟悉的对象,对这个对象测量,这不,就被我们找到了,我们可以把测量结果存储到经典寄存器上,可以通过下面的方式获得一个测量对象:

measure = Measure(qubit, cbit);

        可以看到Measure接两个参数, 第一个是测量比特,第二个是经典寄存器。这也是为什么量子比特数一定要等于经典寄存器个数的原因,方便我们测量。

        如果想测量所有的量子比特并将其存储到对应的经典寄存器上, 可以如下操作:

measureprog = measure_all(qubits, cbits);

2、执行程序

directly_run的功能是运行量子程序并返回运行的结果, 我们举一个小例子:

prog = QProg()
prog << H(qubits[0])\
     << CNOT(qubits[0], qubits[1])\
     << CNOT(qubits[1], qubits[2])\
     << CNOT(qubits[2], qubits[3])\
     << Measure(qubits[0], cbits[0])

result = directly_run(prog)

run_with_configuration()的功能是统计量子程序多次运行的测量结果, 同样举一个小例子:

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

result = run_with_configuration(prog, cbits, 1000)

二、概率测量

        概率测量是指获得目标量子比特的振幅,目标量子比特可以是一个量子比特也可以是多个量子比特的集合。 在pyqpanda中概率测量又称为PMeasure 。 概率测量和量子测量是完全不同的过程,Measure是执行了一次测量, 并返回一个确定的0/1结果,并且改变了量子态。

        

pyqpanda有三种概率测量方式,如下:

1、prob_run_list:获得目标量子比特的概率测量结果列表。

2、prob_run_tuple_list:获得目标量子比特的概率测量结果,为列表类型,其对应的下标为十进制。

3、prob_run_dict:获得目标量子比特的概率测量结果,为字典类型,其对应的下标为二进制。

这三个函数的使用方式是一样的,下面用一个例子让大家感受一下三者的区别:

from pyqpanda import *

if __name__ == "__main__":
    qvm = CPUQVM()
    qvm.init_qvm()
    qubits = qvm.qAlloc_many(2)
    cbits = qvm.cAlloc_many(2)

    prog = QProg()
    prog << H(qubits[0])\
        << CNOT(qubits[0], qubits[1])

    print("prob_run_dict: ")
    result1 = qvm.prob_run_dict(prog, qubits, -1)
    print(result1)

    print("prob_run_tuple_list: ")
    result2 = qvm.prob_run_tuple_list(prog, qubits, -1)
    print(result2)

    print("prob_run_list: ")
    result3 = qvm.prob_run_list(prog, qubits, -1)
    print(result3)

结果为:

        好的,本期的量子计算课程就到此为止了,感兴趣的小伙伴们可以在读完本篇文章后,自行测量,玩一玩量子计算。

  • 4
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

计算机鬼才~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值