Sukatin ang mga Qubit
Mga bersyon ng package
Ang code sa pahinang ito ay ginawa gamit ang mga sumusunod na kinakailangan. Inirerekomenda namin ang paggamit ng mga bersyong ito o mas bago.
qiskit[all]~=2.3.0
qiskit-ibm-runtime~=0.43.1
Para makakuha ng impormasyon tungkol sa estado ng isang qubit, maaari mo itong sukatin sa isang classical bit. Sa Qiskit, ang mga sukat ay isinasagawa sa computational basis, ibig sabihin, ang single-qubit Pauli- basis. Kaya naman, ang isang sukat ay nagbubunga ng 0 o 1, depende sa overlap sa mga Pauli- eigenstate na at :
Mga sukat sa gitna ng circuit
Ang mga sukat sa gitna ng circuit ay isang mahalagang bahagi ng mga dynamic na circuit. Bago ang qiskit-ibm-runtime v0.43.0, ang measure lamang ang measurement instruction sa Qiskit. Ang mga sukat sa gitna ng circuit, gayunpaman, ay may iba't ibang kinakailangan sa pag-tune kaysa sa terminal na mga sukat (mga sukat na nangyayari sa katapusan ng isang circuit). Halimbawa, kailangan mong isaalang-alang ang tagal ng instruction kapag nag-tune ng sukat sa gitna ng circuit dahil ang mas matagal na mga instruction ay nagdudulot ng mas maingay na mga circuit. Hindi mo kailangang isaalang-alang ang tagal ng instruction para sa mga terminal na sukat dahil walang mga instruction pagkatapos ng mga terminal na sukat.
Sa qiskit-ibm-runtime v0.43.0, ipinakilala ang MidCircuitMeasure instruction. Tulad ng isinasaad ng pangalan, ito ay isang bagong measurement instruction na na-optimize para sa mid-circuit sa mga IBM® QPU.
Ang MidCircuitMeasure instruction ay naka-map sa measure_2 instruction na iniulat sa supported_instructions ng backend. Gayunpaman, ang measure_2 ay hindi sinusuportahan sa lahat ng backend. Gamitin ang service.backends(filters=lambda b: "measure_2" in b.supported_instructions) para mahanap ang mga backend na sumusuporta dito. Maaaring magdagdag ng mga bagong sukat sa hinaharap, ngunit hindi ito garantisado.
Mag-apply ng sukat sa isang circuit
Mayroong ilang paraan para mag-apply ng mga sukat sa isang circuit:
Paraan ng QuantumCircuit.measure
Gamitin ang paraan ng measure para sukatin ang isang QuantumCircuit.
Mga halimbawa:
# 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>
Klase ng Measure
Ang Qiskit Measure class ay sumusukat sa mga tinukoy na qubit.
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>
Paraan ng QuantumCircuit.measure_all
Para sukatin ang lahat ng qubit sa kaukulang mga classical bit, gamitin ang paraan ng measure_all. Sa default, ang pamamaraang ito ay nagdadagdag ng mga bagong classical bit sa isang ClassicalRegister para iimbak ang mga sukat na ito.
from qiskit import QuantumCircuit
qc = QuantumCircuit(3, 1)
qc.x([0, 2])
qc.measure_all() # Measure all qubits.
Paraan ng QuantumCircuit.measure_active
Para sukatin ang lahat ng qubit na hindi idle, gamitin ang paraan ng measure_active. Ang pamamaraang ito ay lumilikha ng bagong ClassicalRegister na may sukat na katumbas ng bilang ng mga non-idle na qubit na sinusukat.
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.
Paraan ng MidCircuitMeasure
Gamitin ang MidCircuitMeasure para mag-apply ng sukat sa gitna ng circuit (nangangailangan ng qiskit-ibm-runtime v0.43.0 o mas bago). Bagama't maaari mong gamitin ang QuantumCircuit.measure para sa sukat sa gitna ng circuit, dahil sa disenyo nito, ang MidCircuitMeasure ay karaniwang mas magandang pagpipilian. Halimbawa, nagdadagdag ito ng mas kaunting overhead sa iyong circuit kaysa sa paggamit ng 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: ═══════════════════
- Dapat may kahit isang classical register para magamit ang mga sukat.
- Ang Sampler primitive ay nangangailangan ng mga sukat sa circuit. Maaari kang magdagdag ng mga sukat sa circuit gamit ang Estimator primitive, ngunit binabalewala ang mga ito.
Mga susunod na hakbang
- Klase ng
Measure - Paraan ng
measure_all - Paraan ng
measure_active - Paraan ng
random_circuit