QPanda 2教程资源 | VQNET中的可变量子逻辑门和可变量子线路
嗨~好久不见
上篇为大家推送了
变量和运算符
今天小编要介绍的是
可变量子逻辑门、可变量子线路
跟我们一起来学习吧!
在上一篇文章中,小编为大家介绍了VQNet中的变量和运算符。
变量类是实现符号计算的用户类,用于存储特定混合量子经典网络的变量。通常任务是优化变量以最小化成本函数。变量可以是标量、矢量或矩阵。
VQNet包含许多类型的运算符, 这些运算符可以操作变量或占位符。其中,一些运算符是经典运算符,例如加、减、乘、除、指数、对数和点乘等。VQNet还包含来自经典机器学习中所有常见操作符。
接下来,小编给大家介绍的是可变量子逻辑门和可变量子线路。
可变量子逻辑门要在VQNet中使用量子操作qop或qop_pmeasure,就必须要包含可变量子线路(VQC),而可变量子逻辑门(VQG)则是构成可变量子线路(VQC)的基本单位。
可变量子逻辑门(VariationalQuantumGate,别名:VQG)。内部维护着一组变量参数以及一组常量参数。在构造VQG的时候只能对其中一组参数进行赋值。若含有一组常量参数,则可以通过VQG生成含确定参数的普通量子逻辑门, 若含有变量参数,则可以动态修改参数值,并生成对应的参数的普通量子逻辑门。目前在QPanda::Variational中定义了如下可变量子逻辑门,它们都继承自VQG。
VQG | 别名 |
---|---|
VariationalQuantumGate_H | VQG_H |
VariationalQuantumGate_RX | VQG_RX |
VariationalQuantumGate_RY | VQG_RY |
VariationalQuantumGate_RZ | VQG_RZ |
VariationalQuantumGate_CNOT | VQG_CNOT |
VariationalQuantumGate_CZ | VQG_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,从量子逻辑门实例开始学起!