量子程序序列化

简介

定义一种协议将量子程序序列化为二进制数据,方便量子程序的存储与传输。

接口介绍

QProgStored 类是QPanda2提供的一个将量子程序序列化的工具类,我们先用QPanda2构建一个量子程序:

auto qubits = qvm->qAllocMany(4);
auto cbits = qvm->cAllocMany(4);

QProg prog;
prog << H(qubits[0]) << CNOT(qubits[0], qubits[1])
        << CNOT(qubits[1], qubits[2])
        << CNOT(qubits[2], qubits[3])
        ;

然后调用 QProgStored 类实现序列化

QProgStored t(qvm);
t.transform(prog);
auto instructions = t.getInsturctions();

QPanda2还提供了封装好的接口来实现量子程序序列化,上述的转化代码也可以修改为:

auto instructions = convert_qprog_to_binary(prog, qvm);

此外,QPanda2还提供了将序列化后的量子程序存储到文件中的方法, 现在讲上述量子程序以二进制的方式存储到 QProg.dat 文件中, 可以调用 QProgStored 类中的方法

QProgStored storeProg(qm);
storeProg.transform(prog);
storeProg.store("QProg.dat");

我们还可以使用QPanda2封装的一个接口:

convert_qprog_to_binary(prog, qvm, "QProg.dat");

实例

#include "QPanda.h"
USING_QPANDA

int main(void)
{
    auto qvm = initQuantumMachine();
    auto qubits = qvm->qAllocMany(4);
    auto cbits = qvm->cAllocMany(4);
    cbits[0].set_val(0);

    // 构建量子程序
    QProg prog;
    prog << H(qubits[0]) << CNOT(qubits[0], qubits[1])
            << CNOT(qubits[1], qubits[2])
            << CNOT(qubits[2], qubits[3]);

    // 量子程序序列化
    auto data = convert_qprog_to_binary(prog, qvm);

    // 将得到的二进制数据以base64的方式编码
    auto base64_data = Base64::encode(data.data(), data.size());
    std::string data_str(base64_data.begin(), base64_data.end());
    std::cout << data_str << std::endl;

    destroyQuantumMachine(qvm);
    return 0;
}

运行结果:

AAAAAAQAAAAEAAAABAAAAA4AAQAAAAAAJAACAAAAAQAkAAMAAQACACQABAACAAMA

注解

二进制数据不能直接输出,以base64的编码格式编码,得到相应的字符串

警告

新增接口 convert_qprog_to_binary() ,与老版本接口 transformQProgToBinary() 功能相同。