Vai al contenuto principale

Misurare i qubit

Versioni dei pacchetti

Il codice in questa pagina è stato sviluppato usando i seguenti requisiti. Si raccomanda di usare queste versioni o versioni più recenti.

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

Per ottenere informazioni sullo stato di un qubit, puoi misurarlo su un bit classico. In Qiskit, le misurazioni vengono eseguite nella base computazionale, ovvero la base di Pauli-ZZ a singolo qubit. Di conseguenza, una misurazione restituisce 0 o 1, in base alla sovrapposizione con gli autostati di Pauli-ZZ 0|0\rangle e 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}

Misurazioni a metà circuito

Le misurazioni a metà circuito sono una componente fondamentale dei circuiti dinamici. Prima di qiskit-ibm-runtime v0.43.0, measure era l'unica istruzione di misurazione in Qiskit. Le misurazioni a metà circuito, tuttavia, hanno requisiti di calibrazione diversi rispetto alle misurazioni terminali (misurazioni che avvengono alla fine di un circuito). Ad esempio, bisogna considerare la durata dell'istruzione quando si calibra una misurazione a metà circuito, poiché istruzioni più lunghe generano circuiti più rumorosi. Non è necessario considerare la durata delle istruzioni per le misurazioni terminali, poiché non ci sono istruzioni successive.

In qiskit-ibm-runtime v0.43.0 è stata introdotta l'istruzione MidCircuitMeasure. Come suggerisce il nome, si tratta di una nuova istruzione di misurazione ottimizzata per le misurazioni a metà circuito su QPU IBM®.

nota

L'istruzione MidCircuitMeasure corrisponde all'istruzione measure_2 riportata nelle supported_instructions del backend. Tuttavia, measure_2 non è supportata su tutti i backend. Usa service.backends(filters=lambda b: "measure_2" in b.supported_instructions) per trovare i backend che la supportano. In futuro potrebbero essere aggiunte nuove misurazioni, ma non è garantito.

Applicare una misurazione a un circuito

Esistono diversi modi per applicare misurazioni a un circuito:

Metodo QuantumCircuit.measure

Usa il metodo measure per misurare un QuantumCircuit.

Esempi:

# 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 misura i qubit specificati.

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>

Metodo QuantumCircuit.measure_all

Per misurare tutti i qubit nei corrispondenti bit classici, usa il metodo measure_all. Per impostazione predefinita, questo metodo aggiunge nuovi bit classici in un ClassicalRegister per memorizzare le misurazioni.

from qiskit import QuantumCircuit

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

Metodo QuantumCircuit.measure_active

Per misurare tutti i qubit che non sono inattivi, usa il metodo measure_active. Questo metodo crea un nuovo ClassicalRegister con una dimensione pari al numero di qubit non inattivi da misurare.

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.

Metodo MidCircuitMeasure

Usa MidCircuitMeasure per applicare una misurazione a metà circuito (richiede qiskit-ibm-runtime v0.43.0 o versione successiva). Anche se puoi usare QuantumCircuit.measure per una misurazione a metà circuito, per via della sua progettazione MidCircuitMeasure è generalmente la scelta migliore. Ad esempio, aggiunge meno overhead al tuo circuito rispetto a 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: ═══════════════════
Note importanti
  • Per usare le misurazioni deve essere presente almeno un registro classico.
  • La primitiva Sampler richiede misurazioni del circuito. È possibile aggiungere misurazioni del circuito con la primitiva Estimator, ma vengono ignorate.

Passi successivi

Raccomandazioni