量子线路


量子线路,也称量子逻辑电路是最常用的通用量子计算模型,表示在抽象概念下,对于量子比特进行操作的线路。组成包括了量子比特、线路(时间线),以及各种逻辑门。最后常需要量子测量将结果读取出来。

不同于传统电路是用金属线所连接以传递电压讯号或电流讯号,在量子线路中,线路是由时间所连接,亦即量子比特的状态随着时间自然演化,过程中是按照哈密顿运算符的指示,一直到遇上逻辑门而被操作。

由于组成量子线路的每一个量子逻辑门都是一个 酉算子 ,所以整个量子线路整体也是一个大的酉算子。

量子算法线路图


在目前的量子计算理论研究中,各种量子算法常用量子线路表示,比如下方列出的量子算法中的 HHL算法 量子线路图。

images/hhl.png

接口介绍


在QPanda2中,QCircuit类是一个仅装载量子逻辑门的容器类型,它也是QNode中的一种,初始化一个QCircuit对象有以下两种

cir = QCircuit()

你可以通过如下方式向QCircuit尾部填充节点,在这里pyqpanda重载了 << 运算符作为插入量子线路的方法

cir << node

node的类型可以为QGate或QCircuit。

我们还可以获得QCircuit的转置共轭之后的量子线路,使用方式为:

cir_dagger = cir.dagger()

如果想复制当前的量子线路,并给复制的量子线路添加控制比特,可以使用下面的方式:

qvec = [qubits[0], qubits[1]]
cir_control = cir.control(qvec)

注解

  • 向QCircuit中插入QPorg,QIf,Measure中不会报错,但是运行过程中可能会产生预料之外的错误
  • 一个构建好的QCircuit不能直接参与量子计算与模拟,需要进一步构建成QProg类型

实例


from pyqpanda import *

if __name__ == "__main__":

    qvm = CPUQVM()
    qvm.init_qvm()
    qubits = qvm.qAlloc_many(4)
    cbits = qvm.cAlloc_many(4)

    # 构建量子程序
    prog = QProg()
    circuit = QCircuit()

    circuit << H(qubits[0]) \
            << CNOT(qubits[0], qubits[1]) \
            << CNOT(qubits[1], qubits[2]) \
            << CNOT(qubits[2], qubits[3])

    prog << circuit << Measure(qubits[0], cbits[0])

    # 量子程序运行1000次,并返回测量结果
    result = qvm.run_with_configuration(prog, cbits, 1000)

    # 打印量子态在量子程序多次运行结果中出现的次数
    print(result)

运行结果:

{'0000': 486, '0001': 514}