【发布时间】: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,然后将该寄存器添加到电路中。