Medir qubits
Versões dos pacotes
O código nesta página foi desenvolvido usando os seguintes requisitos. Recomendamos usar estas versões ou mais recentes.
qiskit[all]~=2.3.0
qiskit-ibm-runtime~=0.43.1
Para obter informações sobre o estado de um qubit, você pode medi-lo em um bit clássico. No Qiskit, as medições são realizadas na base computacional, ou seja, a base de Pauli- de um único qubit. Portanto, uma medição retorna 0 ou 1, dependendo da sobreposição com os autoestados de Pauli- e :
Medições no meio do circuito
As medições no meio do circuito são um componente fundamental dos circuitos dinâmicos. Antes da versão v0.43.0 do qiskit-ibm-runtime, measure era a única instrução de medição no Qiskit. No entanto, as medições no meio do circuito têm requisitos de ajuste diferentes das medições terminais (medições que ocorrem no final de um circuito). Por exemplo, é preciso considerar a duração da instrução ao ajustar uma medição no meio do circuito, pois instruções mais longas geram circuitos mais ruidosos. Não é necessário considerar a duração da instrução para medições terminais, pois não há instruções após elas.
Na versão v0.43.0 do qiskit-ibm-runtime, a instrução MidCircuitMeasure foi introduzida. Como o nome sugere, é uma nova instrução de medição otimizada para uso no meio do circuito em QPUs IBM®.
A instrução MidCircuitMeasure mapeia para a instrução measure_2 reportada em supported_instructions do backend. No entanto, measure_2 não é suportada em todos os backends. Use service.backends(filters=lambda b: "measure_2" in b.supported_instructions) para encontrar backends que a suportam. Novas medições podem ser adicionadas no futuro, mas isso não é garantido.
Aplicar uma medição a um circuito
Há várias maneiras de aplicar medições a um circuito:
Método QuantumCircuit.measure
Use o método measure para medir um QuantumCircuit.
Exemplos:
# 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
A classe Measure do Qiskit mede os qubits especificados.
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étodo QuantumCircuit.measure_all
Para medir todos os qubits nos bits clássicos correspondentes, use o método measure_all. Por padrão, este método adiciona novos bits clássicos em um ClassicalRegister para armazenar essas medições.
from qiskit import QuantumCircuit
qc = QuantumCircuit(3, 1)
qc.x([0, 2])
qc.measure_all() # Measure all qubits.
Método QuantumCircuit.measure_active
Para medir todos os qubits que não estão ociosos, use o método measure_active. Este método cria um novo ClassicalRegister com tamanho igual ao número de qubits não ociosos sendo medidos.
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étodo MidCircuitMeasure
Use MidCircuitMeasure para aplicar uma medição no meio do circuito (requer qiskit-ibm-runtime v0.43.0 ou posterior). Embora seja possível usar QuantumCircuit.measure para uma medição no meio do circuito, por conta de seu design, MidCircuitMeasure costuma ser a melhor escolha. Por exemplo, ele adiciona menos sobrecarga ao seu circuito do que o uso de 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: ═══════════════════
- É necessário ter pelo menos um registrador clássico para usar medições.
- O primitivo Sampler requer medições no circuito. Você pode adicionar medições ao circuito com o primitivo Estimator, mas elas serão ignoradas.
Próximos passos
- Classe
Measure - Método
measure_all - Método
measure_active - Método
random_circuit