Skip to content

Latest commit

 

History

History
139 lines (102 loc) · 4.08 KB

VariableQCircuit.rst

File metadata and controls

139 lines (102 loc) · 4.08 KB

可变量子线路(VQC)

VQNet 中量子操作 qopqop_pmeasure 都需要使用可变量子线路作为参数。 可变量子线路(VariationalQuantumCircuit,别名 VQC)是用来存储含有可变参数的量子线路信息, VQC 主要由可变量子逻辑门(VQG)组成。使用时可以向 VQC 插入普通量子逻辑门,或者普通量子线路、以及 VQG 或另外一个 VQC, 在插入普通量子逻辑门或普通量子线路时,其在内部将普通量子逻辑门转换成一组含有固定参数的 VQG。 变量可以和 VQC 中的不同 VQG 相关,VQC 对象会保存变量和 VQG 之间的映射。

接口介绍

实例

#include "QPanda.h"
#include "Variational/var.h"

int main()
{
    using namespace std;
    using namespace QPanda;
    using namespace QPanda::Variational;

    constexpr int qnum = 2;

    QuantumMachine *machine = initQuantumMachine(QuantumMachine_type::CPU_SINGLE_THREAD);
    std::vector<Qubit*> q;
    for (int i = 0; i < qnum; ++i)
    {
        q.push_back(machine->Allocate_Qubit());
    }

    MatrixXd m1(1, 1);
    MatrixXd m2(1, 1);
    m1(0, 0) = 1;
    m2(0, 0) = 2;

    var x(m1);
    var y(m2);

    VQC vqc;
    vqc.insert(VQG_H(q[0]));
    vqc.insert(VQG_RX(q[0], x));
    vqc.insert(VQG_RY(q[1], y));

    QCircuit circuit = vqc.feed();
    QProg prog;
    prog << circuit;

    std::cout << qProgToQRunes(prog) << std::endl << std::endl;

    auto gates = vqc.get_var_in_which_gate(x);

    int pos = shared_ptr<VariationalQuantumGate>(gates[0])->var_pos(x);

    vector<tuple<weak_ptr<VariationalQuantumGate>, size_t, double>> plus;
    plus.push_back(make_tuple(gates[0], pos, 3));

    QCircuit circuit2 = vqc.feed(plus);
    QProg prog2;
    prog2 << circuit2;

    std::cout << qProgToQRunes(prog2) << std::endl;

    return 0;
}

image