分布式量子网络模拟器

netQuil的Python项目详细描述


netquil:分布式量子计算模拟的量子乐园

netquil是一个开源的python框架,专门用于模拟量子网络和分布式量子协议。netquil建立在已经广泛使用的量子计算框架pyQuil的基础上,由Rigetti Computing开发,非常适合扩展您当前的量子计算实验,测试量子网络拓扑和分布式量子协议的思想。netquil提供了一个可扩展的设备模拟器、量子和经典噪声模块以及一个高性能的多线程模拟管理器。它还允许您在网络上运行多个测试,基于本地和主时钟同步代理,并使用网络监视器实时查看流量。netquil还针对分布式量子协议进行了优化,实现了Yimsiriwattana Lomonaco引入的原始猫纠缠器和猫解纠缠器。这种原始协议可以用于实现非本地cnot、非本地控制门和远程传输,并且应该是您创建的任何分布式量子协议的主干。

netquil是a t&t foundry的一个项目。netquil是一项正在进行中的工作,我们鼓励您做出贡献。

文档

探索netquil的documentation center了解有关框架及其用例的更多信息。如果你有兴趣了解分布式量子计算(dqc)的现状以及netquil作为该领域框架的作用,请阅读whitepaper,“netquil:分布式量子计算模拟的量子游乐场”。

安装

您可以使用pip

直接安装netquil
pip install netquil

Netquil设计

Overview of netQuil framework structure

演示

demos文件夹和documentation center

量子隐形传态

作为netquil的一个简单演示,让我们想象一下这样一个场景:alice想向bob发送她拥有的任意qubit的量子态。 由于alice不知道量子位的状态,并且她不能测量它,因为测量它会导致状态崩溃,所以alice决定使用quantum teleportation

Quantum Teleportation Circuit

  • 查理创建了一个钟形状态对,并将一个量子位发送给爱丽丝,另一个发送给鲍勃。
  • 爱丽丝收到查理的古比特。爱丽丝使用cnot和hadamard门将她任意的量子态投射到量子位a上。
  • 爱丽丝测量她的量子位,然后古典地将结果发送给鲍勃。作为测量的结果,鲍勃的状态崩溃为四个贝尔状态之一。
  • bob根据alice的测量值重新创建alice的任意状态,即如果alice的bell状态对为1,则应用pauli-x(x)门;如果任意状态的测量值为1,则应用pauli-z(z)门。

我们可以通过以下方式使用netquil实现量子隐形传态:

from pyquil import Program
from pyquil.api import WavefunctionSimulator, QVMConnection
from pyquil.gates import *

def printWF(p):
    '''
    Prints the wavefunction from simulating a program p
    '''
    wf_sim = WavefunctionSimulator()
    waveFunction = wf_sim.wavefunction(p)
    print(waveFunction)


class Charlie(Agent):
    '''
    Charlie sends Bell pairs to Alice and Bob
    '''
    def run(self):

        # Create Bell State Pair
        p = self.program
        p += H(0)
        p += CNOT(0,1)

        self.qsend(alice.name, [0])
        self.qsend(bob.name, [1])

class Alice(Agent): 
    '''
    Alice projects her state on her Bell State Pair from Charlie
    '''
    def run(self): 
        p = self.program

        # Define Alice's Qubits
        phi = self.qubits[0]
        qubitsCharlie = self.qrecv(charlie.name)
        a = qubitsCharlie[0]

        # Entangle Ancilla and Phi
        p += CNOT(phi, a)
        p += H(phi)

        # Measure Ancilla and Phi
        p += MEASURE(a, ro[0])
        p += MEASURE(phi, ro[1])


class Bob(Agent): 
    '''
    Bob recreates Alice's state based on her measurements
    '''
    def run(self):
        p = self.program

        # Define Bob's qubits
        qubitsCharlie = self.qrecv(charlie.name)
        b = qubitsCharlie[0]

        # Prepare State Based on Measurements
        p.if_then(ro[0], X(b))
        p.if_then(ro[1], Z(b))


p = Program()

# Prepare psi
p += H(2)
p += Z(2)
p += RZ(1.2, 2)
print("Initial Alice State: ")
printWF(p)

# Create Classical Memory
ro = p.declare('ro', 'BIT', 3)

# Create Alice, Bob, and Charlie. Give Alice qubit 2 (phi). Give Charlie qubits [0,1] (Bell State Pairs). 
alice = Alice(p, qubits=[2], name='alice')
bob = Bob(p, name='bob')
charlie = Charlie(p, qubits=[0,1], name='charlie')

# Connect agents to distribute qubits and report results
QConnect(alice, charlie, bob)
CConnect(alice, bob)

# Run simulation
Simulation(alice, bob, charlie).run(trials=1, agent_classes=[Alice, Bob, Charlie])
qvm = QVMConnection()
qvm.run(p)
print("Final Bob's State: ")
printWF(p)

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java模拟存储库对象从controller testcase返回空结果?   Java扫描程序跳行异常   c#混淆If语句?   java为什么日志中的stacktrace前面没有这一行?   java如何使SSHJ在非标准端口上启动出站SFTP?   java我如何确定为什么每周收入没有在我的程序中显示前三次?   java如何判断堆叠条形图的轴的行为?   java rest json API的Web服务器体系结构   java ClassCastException:javax。摆动按扭   Java在Linux上不读取excel文件(使用Apache POI)   反馈错误后,java Wicket 1.4.9无法从modal使用AjaxRequestTarget!   java方法头中“静态”的含义是什么?   java无法在我的tomcat应用程序中添加外部库   java使用Itext Pdf将图像添加到Pdf文件   java为什么当我调用universe时java3d会闪烁。getCanvas()。getView()。重新油漆();   java Gson嵌套类在使用proguard时为空   java如何确定JSON路径对文档是否有效   java在使用Jsoup解析时保持HTML布尔属性的原始形式   使用Java SDK,如何在Azure存储文件服务中为文件设置元数据?