Langkau ke kandungan utama

Hands-on dengan Qiskit: Hello World - Corak Qiskit

Dalam notebook ini kamu akan melalui aliran kerja Qiskit Patterns, dan menggunakan primitif Sampler Qiskit.

Tutorial ini sebahagiannya melibatkan kandungan daripada Dokumentasi IBM Quantum: Hello World.

Pautan berguna:

  1. Buat akaun IBM Cloud untuk mengakses Platform IBM Quantum.
  2. Kita akan menggunakan platform berasaskan awan untuk menyediakan persekitaran pengekodan. Kamu boleh menggunakan sama ada QBraid atau Google Colab.
  3. Selepas notebook ini, kita akan melihat protokol Teleportasi Kuantum.

Lebih banyak pautan - komuniti Qiskit dan sumber pembelajaran lanjut:

Pasang Qiskit​

Kamu boleh menggunakan persekitaran jupyter lab dalam talian (lihat panduan Persekitaran lab dalam talian) atau pasang Qiskit secara tempatan.

Ikuti panduan pemasangan Qiskit Pasang Qiskit SDK dan klien Qiskit Runtime untuk melengkapkan langkah-langkah berikut:

  • Pasang Qiskit termasuk pakej visualisasi tambahan: pip install qiskit[visualization]

  • Pasang qiskit-ibm-runtime: pip install qiskit-ibm-runtime

  • Pasang jupyter: pip install jupyter Semak bahawa versi Python yang kamu gunakan dalam persekitaran kamu adalah python>=3.10, untuk memastikan ia serasi dengan versi Qiskit terkini:

# Added by doQumentation β€” required packages for this notebook
!pip install -q IPython
from platform import python_version

print(python_version())
3.13.7

Jika kamu perlu menaik taraf Python dan tidak pasti cara melakukannya, rujuk panduan ini tentang cara menaik taraf Python mengikut OS kamu: Cara mengemaskini 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.
ERROR: You must give at least one requirement to install (see "pip help install")
Note: 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.

Buat import yang diperlukan​

Jom buat import yang diperlukan untuk tutorial ini.

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

Sediakan akaun IBM Quantum Platform kamu​

Untuk melaksanakan litar kuantum pada perkakasan sebenar, kamu memerlukan akaun IBM Cloud.

Ikuti arahan dalam panduan ini Sediakan akaun IBM Cloud kamu untuk melengkapkan langkah-langkah berikut:

  1. Sediakan akaun IBM Cloud jika kamu belum ada.
  2. Log masuk atau buat akaun Platform IBM Quantum dengan IBMid.
  3. Akses papan pemuka IBM Quantum Platform kamu, buat token API kamu, dan salinnya ke lokasi yang selamat. (Lihat imej rujukan pertama di bawah.)
  4. Dalam sel kod yang mengikuti imej rujukan, gantikan deleteThisAndPasteYourAPIKeyHere dengan kunci API kamu.
  5. Pergi ke halaman Instances daripada menu utama ☰ dan buat instance kamu. Jika kamu bukan sebahagian daripada institusi Rangkaian, pilih pelan terbuka. (Lihat imej rujukan kedua di bawah.)
  6. Selepas instance dibuat, salin kod CRN yang berkaitan. (CRN bermaksud Cloud Resource Names) Kamu mungkin perlu muat semula untuk melihat instance tersebut.
  7. Dalam sel kod yang mengikuti imej rujukan, gantikan deleteThisAndPasteYourCRNHere dengan kod CRN kamu.

Nota: Perlakukan kunci API kamu seperti kata laluan yang selamat. Rujuk panduan Sediakan akaun IBM Cloud kamu untuk maklumat lanjut tentang penggunaan kunci API kamu dalam persekitaran selamat dan tidak dipercayai.

#@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,
)

Buat dan jalankan algoritma kuantum mudah menggunakan rangka kerja corak Qiskit​

Rangka kerja konseptual corak Qiskit boleh dianggap sebagai anatomi algoritma kuantum.

Empat langkah untuk menulis program kuantum menggunakan corak Qiskit ialah:

  1. Petakan masalah kepada format natif kuantum.

  2. Optimumkan Circuit dan operator.

  3. Laksanakan menggunakan fungsi primitif Qiskit.

  4. Analisis keputusan.

Langkah 1. Petakan masalah kepada format natif kuantum​

Dalam program kuantum, Circuit kuantum adalah format natif untuk mewakili arahan kuantum, dan operator mewakili pemerhatian yang akan diukur. Apabila mencipta Circuit, kamu biasanya akan mencipta objek QuantumCircuit baru, kemudian tambahkan arahan kepadanya secara berurutan.

Demonstrasi: Membina Circuit kuantum asas dalam Qiskit​

Jom cuba bina beberapa Circuit mudah dengan 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 diagram

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

Quantum circuit diagram

Latihan: Membina Circuit kuantum asas dalam Qiskit​

Buat Circuit untuk keadaan Bell ∣00⟩+∣11⟩2\frac{|00\rangle + |11\rangle}{\sqrt{2}}

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

Quantum circuit diagram

Keadaan awal Circuit kuantum adalah keadaan ∣00⟩\ket{00}.

Keadaan akhir ialah:

# Use Statevector to fetch the statevector of the circuit
sv = Statevector(qc)
sv.draw(output='latex')

22∣00⟩+22∣11⟩\frac{\sqrt{2}}{2} |00\rangle+\frac{\sqrt{2}}{2} |11\rangle

Nota tentang penomboran bit dalam Qiskit

Qiskit menomborkan bit dalam rentetan dari kanan ke kiri. Qiskit SDK menggunakan penomboran bit LSb 0. Apabila memaparkan atau mentafsir senarai nn bit (atau Qubit) sebagai rentetan, bit nβˆ’1nβˆ’1 adalah bit paling kiri, dan bit 00 adalah bit paling kanan. Ini kerana kita biasanya menulis nombor dengan digit paling bererti di sebelah kiri, dan dalam Qiskit, bit nβˆ’1nβˆ’1 ditafsirkan sebagai bit paling bererti. Untuk maklumat lanjut, lihat topik Susunan bit dalam Qiskit SDK.

#LSB ordering example
qc2 = QuantumCircuit(2)
qc2.x(1)

qc2.draw("mpl")

Quantum circuit diagram

sv2 = Statevector(qc2)
sv2.draw(output='latex')

∣10⟩ |10\rangle

Adakah kita perlukan Gate pengukuran?

Apabila mencipta Circuit kuantum, kamu juga perlu mempertimbangkan jenis data yang ingin dikembalikan selepas pelaksanaan. Qiskit menyediakan dua cara untuk mengembalikan data: kamu boleh mendapatkan nilai jangkaan pemerhatian, atau kamu boleh mendapatkan taburan kebarangkalian untuk set Qubit yang kamu pilih untuk diukur. Sediakan beban kerja kamu untuk mengukur Circuit kamu dalam salah satu daripada dua cara ini dengan primitif Qiskit.

  • Primitif Sampler - mengembalikan taburan kebarangkalian untuk set Qubit yang kamu pilih untuk diukur. Contoh:
  • Primitif Estimator - mengembalikan nilai jangkaan pemerhatian. Contoh:

Kita akan menggunakan Sampler hari ini, jadi kita perlu menambah Gate pengukuran pada Circuit kita.

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

Quantum circuit diagram

Langkah 2. Optimumkan Circuit untuk perkakasan yang dituju​

Bila melaksanakan Circuit pada peranti, penting untuk mengoptimumkan set arahan yang terkandung dalam Circuit dan meminimumkan kedalaman keseluruhan (lebih kurang bilangan arahan) Circuit tersebut. Ini memastikan kamu dapat hasil terbaik dengan mengurangkan kesan ralat dan hingar. Selain itu, arahan dalam Circuit mesti mematuhi Instruction Set Architecture (ISA) peranti Backend dan perlu mengambil kira gate asas serta ketersambungan Qubit peranti.

Kod berikut membuat simulator untuk menghantar kerja dan mengubah Circuit serta observable supaya sepadan dengan ISA Backend tersebut. Perlu diingat bahawa kita akan guna peranti sebenar kemudian.

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

Rajah Circuit Kuantum

Langkah 3. Laksanakan menggunakan primitif Qiskit​

Komputer kuantum boleh menghasilkan keputusan rawak, jadi biasanya kamu kumpul sampel output dengan menjalankan Circuit beberapa kali. Kamu boleh anggarkan nilai observable menggunakan kelas Estimator. Sampler boleh digunakan untuk dapat data daripada komputer kuantum. Objek-objek ini ada kaedah run() yang melaksanakan pilihan Circuit, observable, dan parameter (jika berkaitan), menggunakan 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()

Langkah 4. Proses keputusan selepas pelaksanaan​

Langkah ini melibatkan pemprosesan keputusan yang diperoleh. Kamu mungkin akan masukkan keputusan ini ke dalam aliran kerja lain untuk analisis lanjut atau sediakan plot nilai dan data utama. Secara umumnya, langkah ini khusus untuk masalah kamu.

  • Untuk Sampler, kita plot taburan kebarangkalian yang diperoleh dengan mengambil sampel Circuit kuantum sebanyak bilangan shots yang kamu tentukan menggunakan plot_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)

Output kod

Jalankan program pada peranti sebenar

Kalau kamu nak jalankan kod ini pada peranti sebenar, kamu boleh guna kod berikut.

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)

Output kod

Ambil keputusan daripada kerja yang telah selesai​

Sel di bawah menunjukkan cara kamu boleh ambil keputusan daripada kerja yang telah selesai.

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

Output kod