量子软件开发包QPanda2学习之路(三)利用量子云平台进行量子计算

当我们构建好量子程序后,可以利用QPanda2内置的量子虚拟机程序运行并获取结果,也可以将计算任务提交给性能更为强劲的量子云平台计算服务器。

该部分的使用类似QPanda2的量子虚拟机功能,不同的任务类型,调用不同的接口,下面是示例程序。

MEASURE

我们需要在量子程序中添加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

PMEASURE

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接口,用于满足不同情况下的功能需求。

你可能感兴趣的:(C,C++)