QPanda 2教程资源 | 最常用的量子计算模型——量子线路
hai~小伙伴们好
继上篇推出的量子逻辑门后
大家是不是期盼已久了呢
今天小编为你们带来
量子线路
现在请跟随我们
一起来操作体验吧
在上一篇文章中,小编已经为大家详细介绍了量子逻辑门部分,接下来我们将为你继续介绍新的内容——量子线路。
量子线路
量子线路,即对量子比特进行操作的线路,它由量子逻辑门组成。
不同于传统电路是用金属线所连接以传递电压讯号或电流讯号。在量子线路中,线路是由时间所连接,亦即量子比特的状态随着时间自然演化,过程中按照哈密顿运算符指示,一直到遇上逻辑门而被操作。
由于组成量子线路的每一个量子逻辑门都是一个酉矩阵,所以整个量子线路也是一个大的酉矩阵。
在目前的量子计算理论研究中,各种量子算法常用量子线路表示,比如下方列出的量子算法中的HHL算法量子线路图。
在QPanda 2中,QCircuit类是一个仅装载量子逻辑门的容器类型,它也是QNode中的一种,初始化一个QCircuit对象有以下两种:
C++风格
QCircuit cir = QCircuit();
C语言风格
QCircuit cir = CreateEmptyCircuit();
你可以通过如下方式向QCircuit尾部填充节点。
QCircuit << QNode;
或者
QCircuit.pushBackNode(QNode);
QNode的类型有QGate、QPorg、QIf、Measure等等,但对于QCircuit而言,仅能插入QGate类型和QCircuit。所以QCircuit类是一个QGate对象和另一些QCircuit对象的集合。
同时,你也可对目标线路施加转置共轭和受控操作。QCircuit类型有两个成员函数可以做转置共轭操作:dagger、setDagger。
setDagger的作用是根据输入参数更新当前量子线路的dagger标记,在计算时后端会根据dagger判断当前量子逻辑门是否需要执行转置共轭操作。举个例子:
QCircuit cir;cir.setDagger(true);
该函数需要一个布尔类型参数,用来设置当前逻辑门是否需要转置共轭操作。
dagger的作用是复制一份当前的量子线路,并更新复制量子线路的dagger标记。举个例子:
QCircuit cir;QCircuit cir_dagger = cir.dagger();
除了转置共轭操作,你也可以为量子线路添加控制比特。QCircuit类型有两个成员函数用于添加控制比特:control、setControl。
setControl的作用是给当前的量子线路添加控制比特。例如:
QCircuit cir;cir.setControl(qvec);
control的作用是复制当前的量子线路,并给复制的量子线路添加控制比特。例如:
QCircuit cir;QCircuit cir_control = cir.control(qvec);
上述都需要接收一个参数,参数类型为QVec,QVec是qubit的vector容器类型。
注解
向QCircuit中插入QPorg,QIf,Measure不会报错,但运行过程中可能会产生预料之外的错误。
一个构建好的QCircuit不能直接参与量子计算与模拟,需要进一步构建成QProg类型。
以下实例,主要展现了QCircuit类型接口的使用方式。
1、初始化虚拟机环境:使用init接口初始化一个量子虚拟机,向量子虚拟机申请4个量子比特和4个经典寄存器;
2、构建量子线路:调用CreateEmptyCircuit构建一个量子线路circuit,通过 << 操作符把量子逻辑门插入到circuit中,设置circuit的转置共轭操作为true。
3、构建量子程序:调用CreateEmptyQProg接口构建一个量子程序prog,通过 << 操作符把circuit和量子逻辑门插入到prog;
4、运行量子程序:调用runWithConfiguration测量运行接口,让量子程序运行1000遍,量子程序运行完后,就可以得到计算结果了。
运行结果:
0000, 5101000, 490
★以上即为QPanda 2量子线路的详细内容介绍。
★感兴趣的欢迎加入"QPanda 2开发交流群"。(关注“本源量子”公众号,回复“加群”,联系小编即可)
★PC端学习量子计算请登录learn-quantum.com
★掌上学习请下载"本源溯知APP"
★如有疑问可上量子互动论坛,与我们的大神进行交流讨论。
往期精彩回顾
【新品】国内首款量子软件开发包QPanda 2.0 升级发布!