基于 MindQuantum 记录线路作用下基底态的变化过程
在设计量子算法时,我们经常需要对线路进行分析,比如开发一些线路恒等式。本文开发一个函数,用于展示量子线路对基底态的变化过程,以辅助用户设计线路。
方案原理很简单,就是在不同基底态下执行量子线路。不过由于 MindQuantum 采用 Little-endian 策略,直接实现有违直觉,我们需要将其转变为习惯的 Big-endian 表示。
from mindquantum import *
from rich.console import Console
from rich.table import Table
from copy import deepcopydef get_basis_change(circ:Circuit):"""记录基底态在线路下的变化过程"""console = Console()table = Table(title="Basis Change",show_header=False, show_lines=True)n_qubits = circ.n_qubitsmapping = {i: n_qubits-i-1 for i in range(n_qubits)} # 重新映射量子比特sim = Simulator('mqvector', circ.n_qubits)for i in range(2**circ.n_qubits): # 遍历所有基底态tem = []# 制备基底态sim.reset() # 每研究完一个基底态都要重置模拟器的状态string = bin(i)[2:].zfill(circ.n_qubits)for j, v in enumerate(string):if v == '1':sim.apply_gate(X.on(mapping[j]))tem.append(sim.get_qs(True))for gate in circ: # 依次执行量子线路中量子门new = deepcopy(gate)new.obj_qubits = [mapping[i] for i in gate.obj_qubits]new.ctrl_qubits = [mapping[i] for i in gate.ctrl_qubits]sim.apply_gate(new)tem.append(sim.get_qs(True))table.add_row(*tem)console.print(table)circ1 = Circuit().z(1,0)
circ2 = Circuit().h(0).x(0,1).h(0)
print(circ1)
print(circ2)
get_basis_change(circ1)
get_basis_change(circ2)
q0: ────■─────┃ ┏━┻━┓
q1: ──┨ Z ┠───┗━━━┛ ┏━━━┓ ┏━━━┓ ┏━━━┓
q0: ──┨ H ┠─┨╺╋╸┠─┨ H ┠───┗━━━┛ ┗━┳━┛ ┗━━━┛ ┃
q1: ──────────■───────────Basis Change
┏━━━━━━━┳━━━━━━━━┓
┃ 1¦00⟩ ┃ 1¦00⟩ ┃
├───────┼────────┤
│ 1¦01⟩ │ 1¦01⟩ │
├───────┼────────┤
│ 1¦10⟩ │ 1¦10⟩ │
├───────┼────────┤
│ 1¦11⟩ │ -1¦11⟩ │
└───────┴────────┘Basis Change
┏━━━━━━━┳━━━━━━━━━━━┳━━━━━━━━━━━┳━━━━━━━━┓
┃ 1¦00⟩ ┃ √2/2¦00⟩ ┃ √2/2¦00⟩ ┃ 1¦00⟩ ┃
┃ ┃ √2/2¦10⟩ ┃ √2/2¦10⟩ ┃ ┃
├───────┼───────────┼───────────┼────────┤
│ 1¦01⟩ │ √2/2¦01⟩ │ √2/2¦01⟩ │ 1¦01⟩ │
│ │ √2/2¦11⟩ │ √2/2¦11⟩ │ │
├───────┼───────────┼───────────┼────────┤
│ 1¦10⟩ │ √2/2¦00⟩ │ √2/2¦00⟩ │ 1¦10⟩ │
│ │ -√2/2¦10⟩ │ -√2/2¦10⟩ │ │
├───────┼───────────┼───────────┼────────┤
│ 1¦11⟩ │ √2/2¦01⟩ │ -√2/2¦01⟩ │ -1¦11⟩ │
│ │ -√2/2¦11⟩ │ √2/2¦11⟩ │ │
└───────┴───────────┴───────────┴────────┘
上面我们以 HXH 和 Z 的恒等线路为例,展示基底态变化过程。在两个表的最后一列为最后的基底态。从结果可知,两个线路的结果是相同的,意味着它们是等价的。