如果问题是关于添加SWAP
门然后恢复交换,您可以在前面创建一个交换电路,然后放置重新映射的电路,然后完成第一个电路的逆。这是过程:
- 用门创建一个电路
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')
- 将您的电路重新映射到新布局:
from qiskit import transpile
new_circ = transpile(circ, initial_layout=[0, 2, 4, 1, 3, 5])
new_circ.draw('mpl')
使用该参数initial_layout
,您可以为寄存器中的每个量子位选择一个物理量子位。在这种情况下m_0 -> 0
,m_1 -> 2
...
- 撤消交换:
如果电路是可逆的,您可以使用 方法将其反转inverse
。第一个电路的逆可以撤消交换
swap_back = swap_front.inverse()
swap_back.draw('mpl')
- 放在一起:
final = swap_front + new_circ + swap_back
final.draw('mpl')