Aller au contenu principal

Mesurer des qubits

Versions des packages

Le code de cette page a été développé avec les dépendances suivantes. Nous recommandons d'utiliser ces versions ou des versions plus récentes.

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

Pour obtenir des informations sur l'état d'un qubit, tu peux le mesurer sur un bit classique. Dans Qiskit, les mesures sont effectuées dans la base computationnelle, c'est-à-dire la base de Pauli-ZZ à un qubit. Ainsi, une mesure donne 0 ou 1, selon le recouvrement avec les états propres de Pauli-ZZ 0|0\rangle et 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}

Mesures en milieu de circuit

Les mesures en milieu de circuit sont un composant clé des circuits dynamiques. Avant qiskit-ibm-runtime v0.43.0, measure était la seule instruction de mesure dans Qiskit. Cependant, les mesures en milieu de circuit ont des exigences de calibration différentes des mesures terminales (mesures effectuées à la fin d'un circuit). Par exemple, il faut tenir compte de la durée de l'instruction lors de la calibration d'une mesure en milieu de circuit, car des instructions plus longues engendrent des circuits plus bruités. Il n'est pas nécessaire de prendre en compte la durée de l'instruction pour les mesures terminales, car il n'y a pas d'instructions après celles-ci.

Dans qiskit-ibm-runtime v0.43.0, l'instruction MidCircuitMeasure a été introduite. Comme son nom l'indique, il s'agit d'une nouvelle instruction de mesure optimisée pour les mesures en milieu de circuit sur les QPU IBM®.

remarque

L'instruction MidCircuitMeasure correspond à l'instruction measure_2 rapportée dans supported_instructions du backend. Cependant, measure_2 n'est pas prise en charge sur tous les backends. Utilise service.backends(filters=lambda b: "measure_2" in b.supported_instructions) pour trouver les backends qui la prennent en charge. De nouvelles mesures pourraient être ajoutées à l'avenir, mais ce n'est pas garanti.

Appliquer une mesure à un circuit

Il existe plusieurs façons d'appliquer des mesures à un circuit :

Méthode QuantumCircuit.measure

Utilise la méthode measure pour mesurer un QuantumCircuit.

Exemples :

# 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>

Classe Measure

La classe Qiskit Measure mesure les qubits spécifiés.

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>

Méthode QuantumCircuit.measure_all

Pour mesurer tous les qubits dans les bits classiques correspondants, utilise la méthode measure_all. Par défaut, cette méthode ajoute de nouveaux bits classiques dans un ClassicalRegister pour stocker ces mesures.

from qiskit import QuantumCircuit

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

Méthode QuantumCircuit.measure_active

Pour mesurer tous les qubits qui ne sont pas inactifs, utilise la méthode measure_active. Cette méthode crée un nouveau ClassicalRegister dont la taille est égale au nombre de qubits non inactifs mesurés.

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.

Méthode MidCircuitMeasure

Utilise MidCircuitMeasure pour appliquer une mesure en milieu de circuit (nécessite qiskit-ibm-runtime v0.43.0 ou une version ultérieure). Bien que tu puisses utiliser QuantumCircuit.measure pour une mesure en milieu de circuit, MidCircuitMeasure est généralement un meilleur choix en raison de sa conception. Par exemple, elle ajoute moins de surcharge à ton circuit que 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: ═══════════════════
Notes importantes
  • Il doit y avoir au moins un registre classique pour pouvoir utiliser les mesures.
  • La primitive Sampler nécessite des mesures de circuit. Tu peux ajouter des mesures de circuit avec la primitive Estimator, mais elles seront ignorées.

Prochaines étapes

Recommandations