QPanda 2教程资源 | VQNET中的变量和运算符
hi~
上篇为大家推送了
费米子算符类、优化算法
今天小编要介绍的是
变量、运算符
跟我们一起来学习吧!
在上一篇文章中,小编为大家介绍了算法组件:费米子算符类、优化算法。
FermionOperator类跟PauliOperator类似,提供费米子算符之间加、减和乘的基础运算操作,通过整理功能可以得到一份有序排列的结果。
优化算法包括Nelder-Mead算法跟Powell算法,它们都是一种直接搜索算法。我们在QPanda中实现了这两个算法,OriginNelderMead和OriginPowell,这两个类都继承自AbstractOptimizer。
接下来介绍的是QPanda 2的VQNET中的变量和运算符。
变量变量类是实现符号计算的用户类,用于存储特定混合量子经典网络的变量。通常任务是优化变量以最小化成本函数。变量可以是标量、矢量或矩阵。
变量具有树形结构,它可以包含子节点或父节点。如果变量没有子节点,那么我们称之为叶子节点。我们可以将变量设置为特定值,另一方面,如果变量的所有叶子节点都已设置了值,我们也可以获得该变量的值。
接口介绍在QPanda中,我们需要引入QPanda::Variational命名空间才能使用变量相关的类。我们可以通过传入一个浮点型的数据来构造一个标量变量, 也可以通过Eigen库中的MatrixXd类型数据的构造一个矢量或矩阵变量。
using namespace QPanda::Variational;
var const_var(1);
MatrixXd m1(2, 2);
m1 << 1, 2, 3, 4;
MatrixXd m2(2, 2);
m2 << 5, 6, 7, 8;
var var1(m1);
var var2(m2);
注解
在定义变量的时候,可以定义变量的类型是否可以微分,默认情况下我们定义的变量的类型都是不可微分的,不可微分的变量相当于placeholder。定义可微分的变量时,需要指定构造函数的第二个参数为true, 例如:var v1(1, true)。
我们可以先定义计算对应的表达式,表达式由变量之间进行加减乘除操作或其它操作组成,表达式也是一个变量。
var v1(10);
var v2(5);
var add = v1 + v2;
var minus = v1 - v2; //var minus(op_type::minus, {v1, v2});
var multiply = v1 * v2;
var divide = v1 / v2;
我们可以在不改变表达式结构的情况下,通过改变某个变量的值,即可得到不同的计算结果。我们可以调用变量的_eval接口,来计算该变量当前的值。
var v1(1);
var v2(2);
var add = v1 + v2;
std::cout << add._eval() << std::endl;// 输出为3
MatrixXd m(1, 1);
m << 3;
v1.setValue(m);
std::cout << add._eval() << std::endl;// 输出为5
实例
下面我们将以更多的示例来展示变量类相关接口的使用。
运算符VQNet包含许多类型的运算符, 这些运算符可以操作变量或占位符。其中,一些运算符是经典运算符,例如加,减,乘,除,指数,对数和点乘等。VQNet还包含来自经典机器学习中所有常见操作符。VQNet还包含有量子运算符,它们是vqp和qop pmeasure。另外,qop和qop pmeasure与量子计算机芯片有关,使用它们需要量子环境。为此,我们需要在使用这两个运算符时需要添加额外的参数。一般来说,我们需要添加量子机器的引用和申请的量子比特来提供量子环境。VQNet定义了如下表所示运算符,所有运算符返回的都是类型为var的变量。
★以上即为QPanda 2变量、运算符部分的详细内容介绍。
★感兴趣的欢迎加入"QPanda 2开发交流群"。(关注“本源量子”公众号,回复“加群”,联系小编即可)
★PC端学习量子计算请登录learn-quantum.com
★掌上学习请下载"本源溯知APP"
★如有疑问可上量子互动论坛,与我们的大神进行交流讨论。
获取更多QPanda 2教程资源,请点击“阅读原文”。
往期精彩回顾
量子程序序列化以及解析量子程序的二进制文件
逻辑门以及量子程序时钟周期统计
量子门的有效性及判断方法
量子比特的测量方法:量子测量和概率测量
QPanda 2最常用的量子计算模型——量子线路
嗨玩本源QPanda 2,从量子逻辑门实例开始学起!