【问题标题】:How to do a zipped SWAP in Qiskit?如何在 Qiskit 中进行压缩交换?
【发布时间】:2021-03-29 09:00:34
【问题描述】:

我有一个带有两个寄存器的电路,mq

from qiskit import execute, Aer, IBMQ, QuantumCircuit

m = QuantumRegister(3, "m")
q = QuantumRegister(3, "q")
cl = ClassicalRegister(2, "cl")
circ = QuantumCircuit( m, q,cl)

circ.x([q[0],q[1],q[2]]) 

如何在 Qiskit 中交换它们,使量子比特的顺序变为 m0,q0 ,m1,q1,m 2,q2.

【问题讨论】:

  • 交换是什么意思?比如,你想要电路图中的不同顺序吗?
  • 不完全!我想使用 Qiskit 的 SWAP 门物理交换量子位(对于我正在实现的算法)。我能够使用 numpy 的zip 重新排序量子位,但这并不是我想要的。我们有什么办法可以在 Qiskit 中做到这一点吗?看似微不足道,其实没那么容易。

标签: python-3.x qiskit


【解决方案1】:

如果问题是关于添加 SWAP 门然后恢复该交换,您可以创建一个交换电路在前面,然后放置重新映射的电路,然后完成第一个电路的逆。流程如下:

  1. 使用SWAP 门创建电路:

称为LayoutTransformation 的转译器通道允许创建一个由SWAP 门组成的电路,这些门将布局更改为另一个布局(在本例中为[0, 2, 4, 1, 3, 5])。使用起来有点晦涩难懂。如果您想了解更多信息,请告诉我:

from qiskit.transpiler.passes import LayoutTransformation
from qiskit.transpiler import Layout, CouplingMap

swap_front = QuantumCircuit(circ.num_qubits)

layout_transformation = LayoutTransformation(CouplingMap.from_full(circ.num_qubits),
                     Layout.generate_trivial_layout(*circ.qregs),
                     Layout.from_intlist([0, 2, 4, 1, 3, 5], *circ.qregs))
swap_front = layout_transformation(swap_front).inverse()
swap_front.barrier() # you can remove this line. Only here for didactic purpose
swap_front.draw('mpl')

  1. 将电路重新映射到新布局:
from qiskit import transpile

new_circ = transpile(circ, initial_layout=[0, 2, 4, 1, 3, 5])
new_circ.draw('mpl')

使用参数initial_layout,您可以为寄存器中的每个量子位选择一个物理量子位。在这种情况下m_0 -> 0m_1 -> 2,...

  1. 撤消交换:

如果电路是可逆的,您可以使用方法inverse 将其反转。第一个电路的逆可以撤消交换

swap_back = swap_front.inverse()
swap_back.draw('mpl')

  1. 综合起来:
final = swap_front + new_circ + swap_back
final.draw('mpl')

【讨论】:

  • 谢谢@Luciano,但这是可逆的吗?该算法的思想是压缩交换两个寄存器,做一些操作,然后在接下来的操作和测量之前反向交换。
  • 我想我现在更好地理解了你的问题。编辑。告诉我!
  • 感谢您的更新。在我的第一条评论中,我专门讨论了initial_layout 以及它是否可逆。我猜不是。我一般都熟悉inverse()initial_layout 的另一个问题是我在交换之前还有其他操作。所以它创建了一个我不想开始我的电路的布局。
  • transpile with initial_layout 会将您的电路转换为“物理映射电路”,这确实是不可逆的。我建议您手动编写最终电路...我还没有完全了解您的用例。
猜你喜欢
  • 2015-09-03
  • 2010-10-21
  • 2017-10-16
  • 2017-11-09
  • 1970-01-01
  • 2017-08-11
  • 1970-01-01
  • 1970-01-01
  • 2011-01-22
相关资源
最近更新 更多