Przejdź do głównej treści

Mierzenie Qubitów

Wersje pakietów

Kod na tej stronie został opracowany z użyciem poniższych wymagań. Zalecamy korzystanie z tych lub nowszych wersji.

qiskit[all]~=2.3.0
qiskit-ibm-runtime~=0.43.1

Aby uzyskać informacje o stanie Qubitu, możesz go zmierzyć na klasyczny bit. W Qiskit pomiary wykonywane są w bazie obliczeniowej, czyli jednoQubitowej bazie Pauliego-ZZ. W związku z tym pomiar daje wynik 0 lub 1, zależnie od pokrycia z stanami własnymi Pauliego-ZZ, 0|0\rangle i 1|1\rangle:

qmeasure{0(outcome+1),with probability p0=q02,1(outcome1),with probability p1=q12.|q\rangle \xrightarrow{measure}\begin{cases} 0 (\text{outcome}+1), \text{with probability } p_0=|\langle q|0\rangle|^{2}\text{,} \\ 1 (\text{outcome}-1), \text{with probability } p_1=|\langle q|1\rangle|^{2}\text{.} \end{cases}

Pomiary śródukładowe

Pomiary śródukładowe są kluczowym elementem układów dynamicznych. Przed wydaniem qiskit-ibm-runtime v0.43.0 instrukcja measure była jedyną instrukcją pomiarową w Qiskit. Pomiary śródukładowe mają jednak inne wymagania strojenia niż końcowe pomiary (pomiary wykonywane na końcu Circuit). Na przykład przy strojeniu pomiaru śródukładowego trzeba uwzględnić czas trwania instrukcji, ponieważ dłuższe instrukcje powodują bardziej zakłócone Circuity. W przypadku pomiarów końcowych nie trzeba brać pod uwagę czasu trwania instrukcji, gdyż po nich nie następują już żadne inne instrukcje.

W qiskit-ibm-runtime v0.43.0 wprowadzono instrukcję MidCircuitMeasure. Jak wskazuje nazwa, jest to nowa instrukcja pomiarowa zoptymalizowana pod kątem pomiarów śródukładowych na układach QPU IBM®.

uwaga

Instrukcja MidCircuitMeasure odpowiada instrukcji measure_2 zgłaszanej w polu supported_instructions Backendu. Jednak measure_2 nie jest obsługiwane przez wszystkie Backendy. Użyj service.backends(filters=lambda b: "measure_2" in b.supported_instructions), aby znaleźć Backendy, które go obsługują. W przyszłości mogą zostać dodane nowe instrukcje pomiarowe, jednak nie jest to gwarantowane.

Zastosowanie pomiaru do Circuit

Istnieje kilka sposobów na zastosowanie pomiarów do Circuit:

Metoda QuantumCircuit.measure

Użyj metody measure, aby zmierzyć QuantumCircuit.

Przykłady:

# Added by doQumentation — required packages for this notebook
!pip install -q qiskit qiskit-ibm-runtime
from qiskit import QuantumCircuit

qc = QuantumCircuit(5, 5)
qc.x(0)
qc.x(1)
qc.x(4)
qc.measure(
range(5), range(5)
) # Measures all qubits into the corresponding clbit.
<qiskit.circuit.instructionset.InstructionSet at 0x7fdc54260490>
from qiskit import QuantumCircuit

qc = QuantumCircuit(3, 1)
qc.x([0, 2])
qc.measure(1, 0) # Measure qubit 1 into the classical bit 0.
<qiskit.circuit.instructionset.InstructionSet at 0x7fdc54260820>

Klasa Measure

Klasa Qiskit Measure mierzy wskazane Qubity.

from qiskit.circuit import Measure

qc = QuantumCircuit(3, 1)
qc.x([0, 1])
qc.append(Measure(), [0], [0]) # measure qubit 0 into clbit 0
<qiskit.circuit.instructionset.InstructionSet at 0x7fdc54260df0>

Metoda QuantumCircuit.measure_all

Aby zmierzyć wszystkie Qubity na odpowiadające im klasyczne bity, użyj metody measure_all. Domyślnie ta metoda dodaje nowe klasyczne bity w ClassicalRegister, które przechowują te pomiary.

from qiskit import QuantumCircuit

qc = QuantumCircuit(3, 1)
qc.x([0, 2])
qc.measure_all() # Measure all qubits.

Metoda QuantumCircuit.measure_active

Aby zmierzyć wszystkie Qubity, które nie są bezczynne, użyj metody measure_active. Ta metoda tworzy nowy ClassicalRegister o rozmiarze równym liczbie mierzonych niebezczynnych Qubitów.

from qiskit import QuantumCircuit

qc = QuantumCircuit(3, 1)
qc.x([0, 2])
qc.measure_active() # Measure qubits that are not idle, that is, qubits 0 and 2.

Metoda MidCircuitMeasure

Użyj MidCircuitMeasure, aby zastosować pomiar śródukładowy (wymaga qiskit-ibm-runtime v0.43.0 lub nowszego). Choć do pomiaru śródukładowego można użyć QuantumCircuit.measure, ze względu na swój projekt MidCircuitMeasure jest zazwyczaj lepszym wyborem. Na przykład dodaje mniejszy narzut do twojego Circuit niż QuantumCircuit.measure.

from qiskit import QuantumCircuit
from qiskit_ibm_runtime import QiskitRuntimeService
from qiskit_ibm_runtime.circuit import MidCircuitMeasure
from qiskit.circuit import Measure

service = QiskitRuntimeService()
backend = service.least_busy(operational=True, simulator=False)

circ = QuantumCircuit(2, 2)
circ.x(0)
circ.append(MidCircuitMeasure(), [0], [0])
# circ.measure([0], [0])
# circ.measure_all()
print(circ.draw(cregbundle=False))
┌───┐┌────────────┐
q_0: ┤ X ├┤0 ├
└───┘│ │
q_1: ─────┤ Measure_2 ├
│ │
c_0: ═════╡0 ╞
└────────────┘
c_1: ═══════════════════
Ważne uwagi
  • Aby używać pomiarów, musi istnieć co najmniej jeden rejestr klasyczny.
  • Prymityw Sampler wymaga pomiarów w Circuit. Możesz dodać pomiary do Circuit z prymitywem Estimator, jednak są one ignorowane.

Następne kroki

Zalecenia