如果问题是关于添加 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')