【问题标题】:How to code U gate in a quantum circuit using Qiskit?如何使用 Qiskit 在量子电路中编码 U 门?
【发布时间】:2020-04-20 09:41:26
【问题描述】:

我正在阅读this 论文并尝试实现它在图 11 中提供的量子电路。我想使用 Qiskit 对该电路进行编码。我试图实现的电路已附上。

到目前为止,我已经对电路的某些部分进行了编码。这是我的代码。

from qiskit import QuantumRegister, ClassicalRegister, QuantumCircuit

n = 3
qr = QuantumRegister(n, 'q')
an = QuantumRegister(1, 'ancilla')

circuit = QuantumCircuit(an, qr)

circuit.h(qr[2])
circuit.cx(qr[2], qr[1])
circuit.cx(qr[1], qr[0])
circuit.x(qr[1])
circuit.swap(qr[0], qr[1])
circuit.cu1("Pi", an[0], qr[1])
circuit.cu1("Pi/3", an[0], qr[0]) 
circuit.swap(qr[0], qr[1])
circuit.x(qr[1])
circuit.cx(qr[1], qr[0])
circuit.cx(qr[2], qr[1])
circuit.h(qr[2])
circuit.draw(output='latex')

此代码生成以下输出。请帮我处理这段代码。

【问题讨论】:

  • 嗨!实施中是否有任何特定部分需要帮助?
  • 我想将这些 U(pi) 门放置在这些交换门之间,如第一张图所示。 @met927
  • 如果有必要让他们在两次交换之间进入,那么你可以在第一次交换之后添加一个circuit.barrier(),然后附加u1(pi)门,然后在第二次之前放置另一个屏障交换。不过,您从论文中发布的原始电路似乎在这里使用了受控门。所以我假设你可以用cu1门替换u1门。如果是这种情况,那么您也不需要障碍。
  • 非常感谢。我已经编辑了我的问题。这是大门现在的样子。请再帮我一个忙。你能帮我看看如何把最后一个量子比特“q2”变成“memory |b>”吗?
  • 如果您在实例化 QuantumRegister 时为其命名,那么当您打印电路时,寄存器中的量子位将显示为“ |0>”。当您调用 qr = QuantumRegister(n, 'q') 时执行此操作,其中 'q' 是您设置的名称。如果只需要 1 个量子位来执行此操作,则需要使用此名称制作一个大小为 1 的单独 QuantumRegister,然后将该寄存器添加到电路中。

标签: quantum-computing qiskit


【解决方案1】:

我试着像这样实现所需的电路,也许这就是你想要的。

import numpy as np # Importing standard Qiskit libraries
from qiskit import QuantumCircuit, transpile, Aer
from qiskit.tools.jupyter import *
from qiskit.visualization import *

from qiskit import QuantumRegister, ClassicalRegister, QuantumCircuit
from numpy import pi


an = QuantumRegister(1, 'ancilla')
qreg_q = QuantumRegister(2, 'register')
qreg_mem=QuantumRegister(1, 'memory')
circuit = QuantumCircuit(an, qreg_q,qreg_mem)

circuit.h(qreg_mem[0])
circuit.cx(qreg_mem[0], qreg_q[1])
circuit.cx(qreg_q[1], qreg_q[0])
circuit.x(qreg_q[1])
circuit.swap(qreg_q[0], qreg_q[1])
circuit.cu(pi, pi, pi, pi/2, qreg_q[1], an[0])
circuit.cu(pi/3, pi/3, pi/3, pi/2, qreg_q[0], an[0])
circuit.swap(qreg_q[0], qreg_q[1])
circuit.x(qreg_q[1])
circuit.cx(qreg_q[1], qreg_q[0])
circuit.cx(qreg_mem[0], qreg_q[1])
circuit.h(qreg_mem[0])
circuit.draw(output='latex')

Output Circuit

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-08-30
    • 1970-01-01
    • 2021-11-13
    • 2020-04-15
    • 1970-01-01
    • 2020-01-23
    • 2018-11-25
    • 2020-07-10
    相关资源
    最近更新 更多