Hands-on sa Qiskit: Hello World - Qiskit Patterns
Sa notebook na ito, dadaanan mo ang isang Qiskit Patterns workflow, at gagamitin ang Sampler primitive ng Qiskit.
Ang tutorial na ito ay bahagi ng nilalaman mula sa IBM Quantum Documentation: Hello World.
Mga kapaki-pakinabang na link:
- Mangyaring gumawa ng IBM Cloud account upang ma-access ang IBM Quantum Platform.
- Para sa mga may university email: kumuha ng feature code dito upang palawigin ang iyong libreng trial period.
- Para sa mga walang university email: mga tagubilin upang i-activate ang iyong account. I-activate nang lubusan ang iyong account sa pamamagitan ng pagrerehistro ng credit card. Ang iyong credit card ay hindi sinisingil sa prosesong ito o nang random pagkatapos ng pagrerehistro. Pinapayagan ka ng pag-activate na ito na magpatuloy sa pag-access sa iyong libreng resources sa IBM Cloud at IBM Quantum platform pagkatapos ng pagtatapos ng trial period (30 araw).
- Gagamit tayo ng cloud-based platform para mag-set up ng coding environment. Maaari kang gumamit ng QBraid o Google Colab.
- Pagkatapos ng notebook na ito, titingnan natin ang Quantum Teleportation protocol.
Higit pang links - Qiskit community at karagdagang learning resources:
- Grok sphere
- IBM Quantum Composer
- IBM Quantum Learning
- Qiskit Global Summer School 2025 lectures
- Qiskit v2.X Certification
- Qiskit advocate program
- Quantum summer internships
- Qiskit YouTube
I-install ang Qiskit β
Maaari kang gumamit ng online jupyter lab environment (tingnan ang guide Online lab environments) o lokal na i-install ang Qiskit.
Sundin ang Qiskit installation guide Install the Qiskit SDK and the Qiskit Runtime client para makumpleto ang sumusunod na mga hakbang:
-
I-install ang Qiskit kasama ang extra na visualization packages:
pip install qiskit[visualization] -
I-install ang qiskit-ibm-runtime:
pip install qiskit-ibm-runtime -
I-install ang jupyter:
pip install jupyterSuriin na ang bersyon ng Python na ginagamit mo sa iyong environment ay python>=3.10, upang matiyak na ito ay compatible sa pinakabagong Qiskit version:
# Added by doQumentation β required packages for this notebook
!pip install -q IPython
from platform import python_version
print(python_version())
3.13.7
Kung kailangan mong i-upgrade ang Python at hindi ka sigurado kung paano ito gawin, mangyaring tingnan ang guide na ito kung paano i-upgrade ang Python depende sa iyong OS: How to update Python
%pip install qiskit[visualization]
%pip install qiskit-ibm-runtime
%pip install
%pip install qiskit-aer
zsh:1: no matches found: qiskit[visualization]
Note: you may need to restart the kernel to use updated packages.
Requirement already satisfied: qiskit-ibm-runtime in /Users/astricornish/miniforge3/envs/um-qiskit/lib/python3.13/site-packages (0.43.0)
Requirement already satisfied: requests>=2.19 in /Users/astricornish/miniforge3/envs/um-qiskit/lib/python3.13/site-packages (from qiskit-ibm-runtime) (2.32.5)
Requirement already satisfied: requests-ntlm>=1.1.0 in /Users/astricornish/miniforge3/envs/um-qiskit/lib/python3.13/site-packages (from qiskit-ibm-runtime) (1.3.0)
Requirement already satisfied: numpy>=1.13 in /Users/astricornish/miniforge3/envs/um-qiskit/lib/python3.13/site-packages (from qiskit-ibm-runtime) (2.3.3)
Requirement already satisfied: urllib3>=1.21.1 in /Users/astricornish/miniforge3/envs/um-qiskit/lib/python3.13/site-packages (from qiskit-ibm-runtime) (2.5.0)
Requirement already satisfied: python-dateutil>=2.8.0 in /Users/astricornish/miniforge3/envs/um-qiskit/lib/python3.13/site-packages (from qiskit-ibm-runtime) (2.9.0.post0)
Requirement already satisfied: ibm-platform-services>=0.22.6 in /Users/astricornish/miniforge3/envs/um-qiskit/lib/python3.13/site-packages (from qiskit-ibm-runtime) (0.69.0)
Requirement already satisfied: pydantic>=2.5.0 in /Users/astricornish/miniforge3/envs/um-qiskit/lib/python3.13/site-packages (from qiskit-ibm-runtime) (2.12.2)
Requirement already satisfied: qiskit>=1.4.1 in /Users/astricornish/miniforge3/envs/um-qiskit/lib/python3.13/site-packages (from qiskit-ibm-runtime) (2.2.1)
Requirement already satisfied: packaging in /Users/astricornish/miniforge3/envs/um-qiskit/lib/python3.13/site-packages (from qiskit-ibm-runtime) (25.0)
Requirement already satisfied: ibm_cloud_sdk_core<4.0.0,>=3.24.2 in /Users/astricornish/miniforge3/envs/um-qiskit/lib/python3.13/site-packages (from ibm-platform-services>=0.22.6->qiskit-ibm-runtime) (3.24.2)
Requirement already satisfied: PyJWT<3.0.0,>=2.10.1 in /Users/astricornish/miniforge3/envs/um-qiskit/lib/python3.13/site-packages (from ibm_cloud_sdk_core<4.0.0,>=3.24.2->ibm-platform-services>=0.22.6->qiskit-ibm-runtime) (2.10.1)
Requirement already satisfied: six>=1.5 in /Users/astricornish/miniforge3/envs/um-qiskit/lib/python3.13/site-packages (from python-dateutil>=2.8.0->qiskit-ibm-runtime) (1.17.0)
Requirement already satisfied: charset_normalizer<4,>=2 in /Users/astricornish/miniforge3/envs/um-qiskit/lib/python3.13/site-packages (from requests>=2.19->qiskit-ibm-runtime) (3.4.4)
Requirement already satisfied: idna<4,>=2.5 in /Users/astricornish/miniforge3/envs/um-qiskit/lib/python3.13/site-packages (from requests>=2.19->qiskit-ibm-runtime) (3.11)
Requirement already satisfied: certifi>=2017.4.17 in /Users/astricornish/miniforge3/envs/um-qiskit/lib/python3.13/site-packages (from requests>=2.19->qiskit-ibm-runtime) (2025.10.5)
Requirement already satisfied: annotated-types>=0.6.0 in /Users/astricornish/miniforge3/envs/um-qiskit/lib/python3.13/site-packages (from pydantic>=2.5.0->qiskit-ibm-runtime) (0.7.0)
Requirement already satisfied: pydantic-core==2.41.4 in /Users/astricornish/miniforge3/envs/um-qiskit/lib/python3.13/site-packages (from pydantic>=2.5.0->qiskit-ibm-runtime) (2.41.4)
Requirement already satisfied: typing-extensions>=4.14.1 in /Users/astricornish/miniforge3/envs/um-qiskit/lib/python3.13/site-packages (from pydantic>=2.5.0->qiskit-ibm-runtime) (4.15.0)
Requirement already satisfied: typing-inspection>=0.4.2 in /Users/astricornish/miniforge3/envs/um-qiskit/lib/python3.13/site-packages (from pydantic>=2.5.0->qiskit-ibm-runtime) (0.4.2)
Requirement already satisfied: rustworkx>=0.15.0 in /Users/astricornish/miniforge3/envs/um-qiskit/lib/python3.13/site-packages (from qiskit>=1.4.1->qiskit-ibm-runtime) (0.17.1)
Requirement already satisfied: scipy>=1.5 in /Users/astricornish/miniforge3/envs/um-qiskit/lib/python3.13/site-packages (from qiskit>=1.4.1->qiskit-ibm-runtime) (1.16.2)
Requirement already satisfied: dill>=0.3 in /Users/astricornish/miniforge3/envs/um-qiskit/lib/python3.13/site-packages (from qiskit>=1.4.1->qiskit-ibm-runtime) (0.4.0)
Requirement already satisfied: stevedore>=3.0.0 in /Users/astricornish/miniforge3/envs/um-qiskit/lib/python3.13/site-packages (from qiskit>=1.4.1->qiskit-ibm-runtime) (5.5.0)
Requirement already satisfied: cryptography>=1.3 in /Users/astricornish/miniforge3/envs/um-qiskit/lib/python3.13/site-packages (from requests-ntlm>=1.1.0->qiskit-ibm-runtime) (46.0.2)
Requirement already satisfied: pyspnego>=0.4.0 in /Users/astricornish/miniforge3/envs/um-qiskit/lib/python3.13/site-packages (from requests-ntlm>=1.1.0->qiskit-ibm-runtime) (0.12.0)
Requirement already satisfied: cffi>=2.0.0 in /Users/astricornish/miniforge3/envs/um-qiskit/lib/python3.13/site-packages (from cryptography>=1.3->requests-ntlm>=1.1.0->qiskit-ibm-runtime) (2.0.0)
Requirement already satisfied: pycparser in /Users/astricornish/miniforge3/envs/um-qiskit/lib/python3.13/site-packages (from cffi>=2.0.0->cryptography>=1.3->requests-ntlm>=1.1.0->qiskit-ibm-runtime) (2.23)
Note: you may need to restart the kernel to use updated packages.
[31mERROR: You must give at least one requirement to install (see "pip help install")[0m[31m
[0mNote: you may need to restart the kernel to use updated packages.
Requirement already satisfied: qiskit-aer in /Users/astricornish/miniforge3/envs/um-qiskit/lib/python3.13/site-packages (0.17.2)
Requirement already satisfied: qiskit>=1.1.0 in /Users/astricornish/miniforge3/envs/um-qiskit/lib/python3.13/site-packages (from qiskit-aer) (2.2.1)
Requirement already satisfied: numpy>=1.16.3 in /Users/astricornish/miniforge3/envs/um-qiskit/lib/python3.13/site-packages (from qiskit-aer) (2.3.3)
Requirement already satisfied: scipy>=1.0 in /Users/astricornish/miniforge3/envs/um-qiskit/lib/python3.13/site-packages (from qiskit-aer) (1.16.2)
Requirement already satisfied: psutil>=5 in /Users/astricornish/miniforge3/envs/um-qiskit/lib/python3.13/site-packages (from qiskit-aer) (7.1.0)
Requirement already satisfied: python-dateutil>=2.8.0 in /Users/astricornish/miniforge3/envs/um-qiskit/lib/python3.13/site-packages (from qiskit-aer) (2.9.0.post0)
Requirement already satisfied: six>=1.5 in /Users/astricornish/miniforge3/envs/um-qiskit/lib/python3.13/site-packages (from python-dateutil>=2.8.0->qiskit-aer) (1.17.0)
Requirement already satisfied: rustworkx>=0.15.0 in /Users/astricornish/miniforge3/envs/um-qiskit/lib/python3.13/site-packages (from qiskit>=1.1.0->qiskit-aer) (0.17.1)
Requirement already satisfied: dill>=0.3 in /Users/astricornish/miniforge3/envs/um-qiskit/lib/python3.13/site-packages (from qiskit>=1.1.0->qiskit-aer) (0.4.0)
Requirement already satisfied: stevedore>=3.0.0 in /Users/astricornish/miniforge3/envs/um-qiskit/lib/python3.13/site-packages (from qiskit>=1.1.0->qiskit-aer) (5.5.0)
Requirement already satisfied: typing-extensions in /Users/astricornish/miniforge3/envs/um-qiskit/lib/python3.13/site-packages (from qiskit>=1.1.0->qiskit-aer) (4.15.0)
Note: you may need to restart the kernel to use updated packages.
Gawin ang mga kinakailangang importsβ
Gawin natin ang mga kinakailangang imports para sa tutorial na ito.
from qiskit import QuantumCircuit, QuantumRegister, ClassicalRegister
import qiskit_ibm_runtime
from qiskit.transpiler.preset_passmanagers import generate_preset_pass_manager
from qiskit_ibm_runtime import SamplerV2 as Sampler
from qiskit.quantum_info import SparsePauliOp
from qiskit.quantum_info import Statevector
from qiskit.visualization import plot_bloch_multivector, plot_state_qsphere
from IPython.display import display, Latex
I-set up ang iyong IBM Quantum Platform account β
Para mai-execute ang quantum circuits sa tunay na hardware, kakailanganin mo ng IBM Cloud account.
Sundin ang mga tagubilin sa guide na ito Set up your IBM Cloud account para makumpleto ang sumusunod na mga hakbang:
- I-set up ang IBM Cloud account kung wala ka pa.
- Mag-log in o gumawa ng IBM Quantum Platform account gamit ang IBMid.
- I-access ang iyong IBM Quantum Platform dashboard, gumawa ng iyong API token, at kopyahin ito sa isang ligtas na lokasyon. (Tingnan ang unang reference image sa ibaba.)
- Sa code cell na sumusunod sa reference images, palitan ang
deleteThisAndPasteYourAPIKeyHereng iyong API key. - Pumunta sa Instances page mula sa β° main menu at gumawa ng iyong instance. Kung hindi ka bahagi ng Network institution, piliin ang open plan. (Tingnan ang pangalawang reference image sa ibaba.)
- Pagkatapos magawa ang instance, kopyahin ang nauugnay na CRN code nito. (Ang CRN ay nangangahulugang Cloud Resource Names) Maaaring kailanganin mong mag-refresh upang makita ang instance.
- Sa code cell na sumusunod sa reference images, palitan ang
deleteThisAndPasteYourCRNHereng iyong CRN code.
Tala: Ituring ang iyong API key na gaya ng isang ligtas na password. Tingnan ang Set up your IBM Cloud account guide para sa karagdagang impormasyon tungkol sa paggamit ng iyong API key sa parehong ligtas at hindi pinagkakatiwalaang environments.
#@title personals
your_api_key = "YOUR_API_KEY"
your_crn = "YOUR_CRN"
from qiskit_ibm_runtime import QiskitRuntimeService
# Save your API key to access real devices
your_api_key = your_api_key
your_crn = your_crn
QiskitRuntimeService.save_account(
channel="ibm_cloud",
token=your_api_key,
instance=your_crn,
set_as_default=True,
overwrite=True,
)
Lumikha at magpatakbo ng simpleng quantum algorithm gamit ang Qiskit pattern framework β
Ang Qiskit pattern conceptual framework ay maaaring isaalang-alang bilang anatomy ng isang quantum algorithm.
Ang apat na hakbang sa pagsulat ng quantum program gamit ang Qiskit patterns ay:
-
I-map ang problema sa isang quantum-native format.
-
I-optimize ang circuits at operators.
-
I-execute gamit ang Qiskit primitive function.
-
Suriin ang mga resulta.
Step 1. I-map ang problema sa isang quantum-native formatβ
Sa isang quantum program, ang quantum circuits ay ang native format kung saan kakatawan ang quantum instructions, at ang operators ay kumakatawan sa observables na susukatin. Kapag lumilikha ng circuit, kadalasan ay gumagawa ka ng bagong QuantumCircuit object, pagkatapos ay magdagdag ng mga tagubilin dito sa pagkakasunud-sunod.
Demonstration: Pagbuo ng basic quantum circuits sa Qiskit β
Subukan natin ang pagbuo ng ilang simpleng circuits sa Qiskit.
# Simple quantum circuit with two qubits and two classical bits
# Create quantum circuit with 2 qubits and 2 classical bits
qc = QuantumCircuit(2)
# Add gates to your circuit
qc.x(0)
qc.s(1)
# Draw the output using MatPlotLib
qc.draw(output='mpl')
# Quantum circuit with a Quantum Register named 'qr' that has two qubits, and a Classical Register named 'cr' with two classical bits
# Create a quantum register with 2 qubits, register label is 'qr'
qreg = QuantumRegister(2)
# Create a classical register with 2 qubits, register label is 'cr'
creg = ClassicalRegister(2)
# Create a quantum circuit with registers qreg and creg
qc = QuantumCircuit(qreg, creg)
# Add gates to your registers
qc.x(qreg[0])
# Draw the quantum circuit
qc.draw(output='mpl')
Exercise: Pagbuo ng basic quantum circuits sa Qiskit β
Lumikha ng circuit para sa Bell state na
# Create a new circuit with two qubits
qc = QuantumCircuit(2)
# Add a Hadamard gate to qubit 0
qc.h(0)
# Perform a controlled-X gate on qubit 1, controlled by qubit 0
qc.cx(0,1)
# Return a drawing of the circuit using MatPlotLib ("mpl").
qc.draw('mpl')
Ang inisyal na state ng quantum circuit ay ang state.
Ang panghuling state ay:
# Use Statevector to fetch the statevector of the circuit
sv = Statevector(qc)
sv.draw(output='latex')
Isang tala sa bit numbering sa Qiskit
Inumberan ng Qiskit ang bits sa isang string mula kanan papuntang kaliwa. Gumagamit ang Qiskit SDK ng LSb 0 bit numbering. Kapag ipinapakita o ini-interpret ang listahan ng bits (o qubits) bilang isang string, ang bit ay ang pinakakaliwang bit, at ang bit ay ang pinakakanang bit. Ito ay dahil kadalasan ay isinusulat natin ang mga numero kasama ang most significant digit sa kaliwa, at sa Qiskit, ang bit ay ini-interpret bilang ang most significant bit. Para sa karagdagang detalye, tingnan ang Bit-ordering in the Qiskit SDK topic.
#LSB ordering example
qc2 = QuantumCircuit(2)
qc2.x(1)
qc2.draw("mpl")
sv2 = Statevector(qc2)
sv2.draw(output='latex')
Kailangan ba natin ng measurement gates?
Kapag lumilikha ng quantum circuits, kailangan mo ring isaalang-alang kung anong uri ng data ang nais mong ibalik pagkatapos ng execution. Nagbibigay ang Qiskit ng dalawang paraan upang ibalik ang data: maaari kang makakuha ng expectation value ng isang observable, o maaari kang makakuha ng probability distribution para sa isang set ng qubits na pipiliin mong sukatin. Ihanda ang iyong workload upang sukatin ang iyong circuit sa isa sa dalawang paraang ito gamit ang Qiskit primitives.
Samplerprimitive - nagbabalik ng probability distribution para sa isang set ng qubits na pipiliin mong sukatin. Hal.:
Estimatorprimitive - nagbabalik ng expectation value ng observable. Hal.:
Gagamitin natin ang Sampler ngayon, kaya kailangan nating magdagdag ng measurement gates sa ating circuit.
# Use measure_all, which adds a barrier, applies measurement gates on all qubits, creates a classical register called `meas`
qc.measure_all()
qc.draw('mpl')
Step 2. I-optimize ang circuits para sa target na hardwareβ
Kapag nag-execute ng circuits sa isang device, mahalagang i-optimize ang set ng instructions na nilalaman ng circuit at i-minimize ang overall depth (humigit-kumulang ang bilang ng instructions) ng circuit. Tinitiyak nito na makukuha mo ang pinakamahusay na resulta na posible sa pamamagitan ng pagbabawas ng mga epekto ng error at noise. Bukod pa rito, ang instructions ng circuit ay dapat sumunod sa Instruction Set Architecture (ISA) ng backend device at dapat isaalang-alang ang basis gates at qubit connectivity ng device.
Ang sumusunod na code ay nag-i-instantiate ng simulator upang isumite ang job at binabago ang circuit at observables upang tumugma sa ISA ng backend na iyon. Tandaan na gagamit tayo ng tunay na device mamaya.
# option:
from qiskit_ibm_runtime.fake_provider import FakeTorino
backend = FakeTorino()
print(
f"Name: {backend.name}\n"
f"Version: {backend.version}\n"
f"Native gate set: {backend.operation_names}\n"
)
#to view other properties you can use properties()
# refer to https://docs.quantum.ibm.com/guides/get-qpu-information
Name: fake_torino
Version: 2
Native gate set: ['for_loop', 'delay', 'cz', 'id', 'sx', 'measure', 'reset', 'switch_case', 'if_else', 'rz', 'x']
# Convert to an ISA circuit
pm = generate_preset_pass_manager(backend=backend, optimization_level=3)
isa_circuit_sampler = pm.run(qc)
isa_circuit_sampler.draw("mpl", idle_wires=False)

Step 3. I-execute gamit ang Qiskit primitivesβ
Ang quantum computers ay maaaring gumawa ng mga random na resulta, kaya karaniwan kang nagko-collect ng sample ng outputs sa pamamagitan ng pagpapatakbo ng circuit nang maraming beses. Maaari mong tantyahin ang halaga ng observable gamit ang Estimator class. Ang Sampler ay maaaring gamitin upang makakuha ng data mula sa quantum computer. Ang mga objects na ito ay may run() method na nag-e-execute ng selection ng circuits, observables, at parameters (kung naaangkop), gamit ang primitive unified bloc (PUB).
# Create a sampler instance using the selected backend
sampler = Sampler(backend)
# Run the sampler primitive on ISA circuit for specified number of shots (1024)
job_sampler = sampler.run([isa_circuit_sampler], shots=1024)
# Save the result of the job
result_sampler = job_sampler.result()
Step 4. I-post-process ang mga resultaβ
Ang hakbang na ito ay nagsasangkot ng postprocessing sa iyong mga resulta. Maaari mong i-feed ang mga resultang ito sa isa pang workflow para sa karagdagang analysis o maghanda ng plot ng mga key values at data. Sa pangkalahatan, ang hakbang na ito ay tiyak sa iyong problema.
- Para sa
Sampler, i-plot natin ang probability distribution na nakuha sa pamamagitan ng pag-sample ng quantum circuit ng kasing dami ng shots na iyong tinukoy gamit angplot_histogram.
from qiskit.visualization import plot_histogram
counts = result_sampler[0].data.meas.get_counts()
# Note: meas is the default name of the classical register when using measure_all().
# If you specify a classical register, then use the name you assign
# Plot the result
plot_histogram(counts)

Magpatakbo ng programa sa tunay na device
Kung gusto mong patakbuhin ang code na ito sa tunay na device, maaari mong gamitin ang sumusunod na code.
from qiskit_ibm_runtime import QiskitRuntimeService
# View the list of backends you have access to
service = QiskitRuntimeService()
service.backends()
management.get:WARNING:2025-11-03 14:24:36,838: Loading default saved account
[<IBMBackend('ibm_fez')>,
<IBMBackend('ibm_brisbane')>,
<IBMBackend('ibm_torino')>,
<IBMBackend('ibm_marrakesh')>]
# Get backend
backend_real = service.least_busy(simulator=False, operational=True)
#backend_real = service.backend(name="insert_backend_name") # use this if you want to choose a specific backend
sampler = Sampler(backend_real)
pm = generate_preset_pass_manager(backend=backend_real, optimization_level=3)
isa_circuit = pm.run(qc)
job = sampler.run([isa_circuit], shots=1024)
print(job.job_id)
<bound method BasePrimitiveJob.job_id of <RuntimeJobV2('d444lcg7i53s73e4n6tg', 'sampler')>>
result = job.result()
print(
f"Name: {backend_real.name}\n"
f"Version: {backend_real.version}\n"
f"Native gate set: {backend_real.operation_names}\n"
)
Name: ibm_fez
Version: 2
Native gate set: ['delay', 'cz', 'id', 'sx', 'measure', 'reset', 'if_else', 'rz', 'x']
counts = result[0].data.meas.get_counts()
plot_histogram(counts)

Pagkuha ng mga resulta mula sa nakumpletong jobβ
Ipinapakita ng cell sa ibaba kung paano mo makukuha ang mga resulta mula sa nakumpletong job.
service = QiskitRuntimeService()
retrieved_job = service.job('d40mquhsg33c73dhhs00')
result = retrieved_job.result()
counts = result[0].data.meas.get_counts()
plot_histogram(counts)
management.get:WARNING:2025-11-03 14:24:55,135: Loading default saved account
