当我们构建好量子程序后,可以利用QPanda2内置的量子虚拟机程序运行并获取结果,也可以将计算任务提交给性能更为强劲的量子云平台计算服务器。
该部分的使用类似QPanda2的量子虚拟机功能,不同的任务类型,调用不同的接口,下面是示例程序。
我们需要在量子程序中添加measure节点用于获取计算结果,否则服务器不会返回任何结果。MEASURE的结果具有随机性,它仅仅表示一次运行后测量的结果。
auto test = QuantumCloudHttp();
init();
test.init();
auto prog = CreateEmptyQProg();
auto qlist = qAllocMany(5);
auto clist = cAllocMany(3);
prog << H(qlist[0]) << H(qlist[1]) << H(qlist[2]) << H(qlist[2]) << Measure(qlist[0], clist[0]) << Measure(qlist[1], clist[1]);
test.load(prog);
test.run();
auto result = test.getResultMap();
for (auto val : result)
{
cout << val.first << " : " << val.second << endl;
}
finalize();
首先通过QuantumCloudHttp()新建一个用于网络请求的量子虚拟机类型,然后向量子程序节点中添加测量节点,
当仅仅想获取一次计算后的测量结果,调用run()方法提交计算任务,并用getResultMap()方法获取计算结果,获取的结果如下
00 : 1
01 : 0
10 : 0
11 : 0
本次结果表示经过计算测量过程,0号和1号量子比特处于00态。
如果想获取多次计算后的量子态分布,可以通过调用runWithConfiguration()方法,指定重复计算的次数,
示例代码如下
auto test = QuantumCloudHttp();
init();
test.init();
auto prog = CreateEmptyQProg();
auto qlist = qAllocMany(5);
auto clist = cAllocMany(3);
prog << H(qlist[0]) << H(qlist[1]) << H(qlist[2]) << H(qlist[2]) << Measure(qlist[0], clist[0]) << Measure(qlist[1], clist[1]);
auto result = test.runWithConfiguration(prog,clist,100);
for (auto val : result)
{
cout << val.first << " : " << val.second << endl;
}
finalize();
获取的计算测量结果如下,该结果表示100次计算过程后,构成的四个量子态的分布情况
00 : 57
01 : 16
10 : 10
11 : 17
Measure和 PMeasure是完全不同的过程,Measure是执行了一次测量, 并返回一个确定的0/1结果。PMeasure是输出当前时刻的量子虚拟机的概率结果,PMeasure并不会改变量子态。
由于QPanda2量子程序里面不支持Pmeasure节点,所以想获取Pmeasure结果时需要指定量子比特数组。示例代码如下:
auto test = QuantumCloudHttp();
init();
test.init();
auto prog = CreateEmptyQProg();
auto qlist = qAllocMany(5);
auto clist = cAllocMany(3);
prog << H(qlist[0]) << H(qlist[1]) << H(qlist[2]) << H(qlist[2]);
test.load(prog);
auto result = test.getProbDict(qlist, 1);
for (auto val : result)
{
cout << val.first << " : " << val.second << endl;
}
finalize();
计算后返回的结果如下,该结果用于表述关注的量子比特构成量子态的概率分布
00000 : 0.25
00001 : 0
00010 : 0
00011 : 0
00100 : 0
00101 : 0
00110 : 0
01000 : 0.25
10000 : 0.25
11000 : 0.25
除了getProbDict()之外,QPanda2提供不同返回值的Pmeasure接口,用于满足不同情况下的功能需求。