查看原文
其他

QPanda 2教程资源 | 量子比特的测量方法:量子测量和概率测量

OriginQ 本源量子 2021-02-13

hi~又临近周末啦

继上篇的推文后

模拟量子虚拟机的解决方案(下)

小编为大家带来了

量子比特的测量方法

请跟随我们一起来感受下吧



在前两篇文章中,小编已为大家介绍了模拟量子虚拟机的解决方案。在真正的量子计算机没成型前,需使用量子虚拟机承担量子算法、量子应用的验证问题。QPanda 2现在支持全振幅量子虚拟机、部分振幅量子虚拟机、单振幅量子虚拟机以及含噪声量子虚拟机。

而今天小编要为大家讲述的是,关于量子比特的测量方法:量子测量和概率测量


量子测量


量子测量操作对量子比特进行测量,将值保存至经典寄存器中。在量子线路中,用如下图标表示:


接口介绍

量子测量主要介绍获得量子测量对象、根据配置运行含有量子测量的量子程序、快速测量。

在量子程序中,我们需要对某个量子比特做测量操作,并把测量结果存储到经典寄存器上,可以通过下面的方式获得一个测量对象:

auto measure = Measure(qubit, cbit);

可以看到Measure接两个参数, 第一个是测量比特,第二个是经典寄存器。

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

auto measure_all = MeasureAll(qubits, cbits);

其中qubits的类型是QVec,cbits的类型是vector<ClassicalCondition>。

注解

MeasureAll 的返回值类型是 QProg。

在得到含有量子测量的程序后,我们可以调用directlyRun或runWithConfiguration来得到量子程序的测量结果。

directlyRun的功能是运行量子程序并返回运行的结果。使用方法如下:

QProg prog;

prog << H(qubits[0])

       << CNOT(qubits[0], qubits[1]) 

        << CNOT(qubits[1], qubits[2])

        << CNOT(qubits[2], qubits[3])

        << Measure(qubits[0], cbits[0]);


auto result = directlyRun(prog);

runWithConfiguration的功能是末态在目标量子比特序列在量子程序多次运行结果中出现的次数。使用方法如下:

QProg prog;

prog   << H(qubits[0])

            << H(qubits[1]) 

            << H(qubits[2]) 

            << H(qubits[3]) 

            << MeasureAll(qubits, cbits); // 测量所有的量子比特

auto result = runWithConfiguration(prog, cbits, 1000);

其中第一个参数是量子程序,第二个参数是经典寄存器,第三个参数是运行的次数。


实例

1、初始化虚拟机环境:使用initQuantumMachine接口初始化一个量子虚拟机,向量子虚拟机申请4个量子比特和4个经典寄存器;

2、构建量子线路:构建一个量子程序prog,通过 << 操作符把量子逻辑门插入到prog中;

3、运行量子程序:调用runWithConfiguration测量运行接口,让量子程序运行1000遍,量子程序运行完后,就可以得到计算结果了。

运行结果:

0000, 47

0001, 59

0010, 74

0011, 66

0100, 48

0101, 62

0110, 71

0111, 61

1000, 70

1001, 57

1010, 68

1011, 63

1100, 65

1101, 73

1110, 55

1111, 61 


概率测量


概率测量是指获得目标量子比特的振幅,目标量子比特可以是一个量子比特也可以是多个量子比特的集合。在QPanda 2中概率测量又称为PMeasure。概率测量和量子测量是完全不同的过程,Measure是执行了一次测量, 并返回一个确定的0/1结果,并且改变了量子态, PMeasure是获得我们所关注的量子比特的振幅,并不会改变量子态,PMeasure的输入参数是QVec,它指定了我们关注的量子比特。例如,一共有10个Qubit的系统,我们指定了前三个Qubit作为PMeasure的目标,就会输出一个长度为8的vector。


接口介绍

QPanda 2提供了三种获得PMeasure结果的方式,其中有

probRunListprobRunTupleListprobRunDict

probRunList:获得目标量子比特的概率测量结果, 并没有其对应的下标。

probRunTupleList:获得目标量子比特的概率测量结果, 其对应的下标为十进制。

probRunDict:获得目标量子比特的概率测量结果, 其对应的下标为二进制。

这三个函数的使用方式是一样的,下面就以probRunDict为例介绍,使用方式如下:

auto qubits = qvm->allocateQubits(4);


QProg prog; 

prog      << H(qubits[0])

                << CNOT(qubits[0], qubits[1])

                << CNOT(qubits[1], qubits[2])

                << CNOT(qubits[2], qubits[3]); 

auto result = probRunDict(prog, qubits, 3);

第一个参数是量子程序, 第二个参数是QVec它指定了我们关注的量子比特。第三个参的值为-1时,是指我们以第二个参数中所有的量子比特作为目标,当其值不为-1时,则表示我们关注QVec中的前几个。如上述例子,一共有4个Qubit的系统, 第三个参数设置为3,得到结果将会是8个元素。

除了上述的方式外,我们还可以先使用

directlyRun,再调用getProbListgetProbTupleListgetProbDict得到和上述三种方法一样的结果。

实例

1、初始化虚拟机环境:使用initQuantumMachine接口初始化一个量子虚拟机,向量子虚拟机申请2个量子比特;

2、构建量子线路:构建一个量子程序prog,通过 << 操作符把量子逻辑门插入到prog中。

3、运行量子程序:调用probRunDict、probRunTupleList、probRunList概率测量运行接口,就可以得到计算结果了。

运行结果:

probRunDict:

00, 0.5

01, 0

10, 0

11, 0.5

probRunTupleList:

0, 0.5

3, 0.5

1, 0

2, 0

probRunList:

0.5

0

0

0.5

★以上即为QPanda 2单振幅和含噪声量子虚拟机部分的详细内容介绍。

★感兴趣的欢迎加入"QPanda 2开发交流群"。(关注“本源量子”公众号,回复“加群”,联系小编即可)

★PC端学习量子计算请登录learn-quantum.com  

★掌上学习请下载"本源溯知APP"

★如有疑问可上量子互动论坛,与我们的大神进行交流讨论。


往期精彩回顾

模拟量子虚拟机的解决方案(下):单振幅和含噪声量子虚拟机

模拟量子虚拟机的解决方案(上):全振幅和部分振幅量子虚拟机

QPanda 2教程资源 | 构建量子程序、QWhile与QIf的方法

QPanda 2最常用的量子计算模型——量子线路

嗨玩本源QPanda 2,从量子逻辑门实例开始学起!

QPanda更新带来4种量子虚拟机+2种开发工具

【新品】国内首款量子软件开发包QPanda 2.0 升级发布!

Origin Q发布国内首款量子软件开发包Q-Panda

    您可能也对以下帖子感兴趣

    文章有问题?点此查看未经处理的缓存