查看原文
其他

QPanda 2教程资源 | VQNET中的可变量子逻辑门和可变量子线路

OriginQ 本源量子 2021-02-13

嗨~好久不见

上篇为大家推送了

变量和运算符

今天小编要介绍的是

可变量子逻辑门、可变量子线路

跟我们一起来学习吧!



上期回顾

                  QPanda 2教程资源 | VQNET中的变量和运算符


在上一篇文章中,小编为大家介绍了VQNet中的变量和运算符。

变量类是实现符号计算的用户类,用于存储特定混合量子经典网络的变量。通常任务是优化变量以最小化成本函数。变量可以是标量、矢量或矩阵。

VQNet包含许多类型的运算符, 这些运算符可以操作变量或占位符。其中,一些运算符是经典运算符,例如加、减、乘、除、指数、对数和点乘等。VQNet还包含来自经典机器学习中所有常见操作符。

接下来,小编给大家介绍的是可变量子逻辑门和可变量子线路

可变量子逻辑门

要在VQNet中使用量子操作qop或qop_pmeasure,就必须要包含可变量子线路(VQC),而可变量子逻辑门(VQG)则是构成可变量子线路(VQC)的基本单位

可变量子逻辑门(VariationalQuantumGate别名:VQG)。内部维护着一组变量参数以及一组常量参数。在构造VQG的时候只能对其中一组参数进行赋值。若含有一组常量参数,则可以通过VQG生成含确定参数的普通量子逻辑门, 若含有变量参数,则可以动态修改参数值,并生成对应的参数的普通量子逻辑门。

目前在QPanda::Variational中定义了如下可变量子逻辑门,它们都继承自VQG

VQG别名
VariationalQuantumGate_HVQG_H
VariationalQuantumGate_RXVQG_RX
VariationalQuantumGate_RYVQG_RY
VariationalQuantumGate_RZVQG_RZ
VariationalQuantumGate_CNOTVQG_CNOT
VariationalQuantumGate_CZVQG_CZ
接口介绍

我们可以通过可变量子逻辑门的别名,来使用可变量子逻辑门。我们可以向需要传入参数的可变量子逻辑门中传入变量参数, 例如我们对可变量子逻辑门RX和RY传入变量参数x和y。也可以对可变量子逻辑门传入常量参数,例如RZ我们传入了一个常量参数0.12。 我们可以通过修改变量的参数,从而来改变可变量子逻辑门中的参数。

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));

vqc.insert(VQG_RZ(q[0], 0.12));

vqc.insert(VQG_CZ(q[0], q[1]));

vqc.insert(VQG_CNOT(q[0], q[1]));


QCircuit circuit1 = vqc.feed();


m1(0, 0) = 3;

m2(0, 0) = 4;


x.setValue(m1);

y.setValue(m2);


QCircuit circuit2 = vqc.feed();

实例

可变量子线路

在VQNet中量子操作qop和qop_pmeasure都需要使用可变量子线路作为参数。可变量子线路(VariationalQuantumCircuit,别名VQC)是用来存储含有可变参数的量子线路信息,VQC主要由可变量子逻辑门(VQG)组成。

使用时可以向VQC插入普通量子逻辑门,或者普通量子线路、以及VQG或另外一个VQC, 在插入普通量子逻辑门或普通量子线路时,其在内部将普通量子逻辑门转换成一组含有固定参数的VQG。变量可以和VQC中的不同VQG相关,VQC对象会保存变量和VQG之间的映射。

接口介绍

量子程序QProg无法直接加载可变量子线路,但是我们可以通过调用可变量子线路的feed接口来生成一个普通量子线路。

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;

我们可以调用get_var_in_which_gate接口来获取到指定变量在可变量子线路中对应的可变量子逻辑门。我们可以通过向feed接口传入变量对应的可变量子逻辑门,变量在可变量子逻辑门中的索引位置,以及偏移值,来改变指定可变量子逻辑门中变量参数的偏移值。

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);

实例



★以上即为QPanda 2变量、运算符部分的详细内容介绍。

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

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

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

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


获取更多QPanda 2教程资源,请点击“阅读原文”。


往期精彩回顾

量子程序序列化以及解析量子程序的二进制文件

逻辑门以及量子程序时钟周期统计

量子门的有效性及判断方法

量子比特的测量方法:量子测量和概率测量

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

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


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

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