Prakticky s Qiskitem: Hello World - Qiskit Patterns
V tomto notebooku projdeš pracovním postupem Qiskit Patterns a použiješ Qiskitův primitiv Sampler.
Tento tutoriál částečně vychází z obsahu IBM Quantum Documentation: Hello World.
Užitečné odkazy:
- Prosím vytvoř si účet na IBM Cloud pro přístup k IBM Quantum Platform.
- Pro ty s univerzitním e-mailem: získej zde funkční kód pro prodloužení zkušebního období zdarma.
- Pro ty bez univerzitního e-mailu: pokyny k aktivaci účtu. Plně aktivuj svůj účet registrací kreditní karty. Tvá kreditní karta nebude při tomto procesu ani náhodně po registraci účtována. Tato aktivace ti umožní pokračovat v přístupu k bezplatným zdrojům v IBM Cloud a na platformě IBM Quantum i po skončení zkušebního období (30 dní).
- Použijeme cloudovou platformu pro nastavení prostředí pro psaní kódu. Můžeš použít buď QBraid nebo Google Colab.
- Po tomto notebooku se podíváme na protokol kvantové teleportace.
Další odkazy – komunita Qiskit a zdroje pro další vzdělávání:
- Grok sphere
- IBM Quantum Composer
- IBM Quantum Learning
- Přednášky Qiskit Global Summer School 2025
- Certifikace Qiskit v2.X
- Program Qiskit advocate
- Letní stáže v oblasti kvantových technologií
- Qiskit YouTube
Instalace Qiskitu
Můžeš použít online prostředí jupyter lab (viz průvodce Online lab environments) nebo nainstalovat Qiskit lokálně.
Postupuj podle instalačního průvodce Qiskitu Install the Qiskit SDK and the Qiskit Runtime client a proveď následující kroky:
-
Nainstaluj Qiskit včetně doplňkových balíčků pro vizualizaci:
pip install qiskit[visualization] -
Nainstaluj qiskit-ibm-runtime:
pip install qiskit-ibm-runtime -
Nainstaluj jupyter:
pip install jupyterZkontroluj, že verze Pythonu, kterou ve svém prostředí používáš, je python>=3.10, aby byla kompatibilní s nejnovější verzí Qiskitu:
# Added by doQumentation — required packages for this notebook
!pip install -q IPython
from platform import python_version
print(python_version())
3.13.7
Pokud potřebuješ upgradovat Python a nevíš jak, podívej se na tohoto průvodce upgradem Pythonu podle tvého operačního systému: 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.
Proveď nezbytné importy
Proveďme nezbytné importy pro tento tutoriál.
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
Nastavení účtu IBM Quantum Platform
Abys mohl/a spouštět kvantové obvody na skutečném hardwaru, budeš potřebovat účet IBM Cloud.
Postupuj podle pokynů v tomto průvodci Nastavení účtu IBM Cloud a dokonči následující kroky:
- Pokud ještě nemáš účet IBM Cloud, vytvoř si ho.
- Přihlas se nebo vytvoř účet IBM Quantum Platform pomocí IBMid.
- Přejdi na nástěnku IBM Quantum Platform, vytvoř svůj API token a ulož ho na bezpečné místo. (Viz první referenční obrázek níže.)
- V buňce s kódem za referenčními obrázky nahraď
deleteThisAndPasteYourAPIKeyHeresvým API klíčem. - Přejdi na stránku Instances v nabídce ☰ hlavního menu a vytvoř svoji instanci. Pokud nejsi součástí síťové instituce, zvol otevřený plán. (Viz druhý referenční obrázek níže.)
- Po vytvoření instance zkopíruj přidružený kód CRN. (CRN je zkratka pro Cloud Resource Names) Možná bude nutné stránku obnovit, aby se instance zobrazila.
- V buňce s kódem za referenčními obrázky nahraď
deleteThisAndPasteYourCRNHeresvým kódem CRN.
Poznámka: Zacházej se svým API klíčem jako s bezpečným heslem. Více informací o používání API klíče v bezpečných i nedůvěryhodných prostředích najdeš v průvodci Nastavení účtu IBM Cloud.
#@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,
)
Vytvoření a spuštění jednoduchého kvantového algoritmu pomocí frameworku Qiskit pattern
Konceptuální framework Qiskit pattern lze považovat za anatomii kvantového algoritmu.
Čtyři kroky k napsání kvantového programu pomocí Qiskit patterns jsou:
-
Namapuj problém do kvantově nativního formátu.
-
Optimalizuj obvody a operátory.
-
Spusť pomocí primitivní funkce Qiskit.
-
Analyzuj výsledky.
Krok 1. Namapování problému do kvantově nativního formátu
V kvantovém programu jsou kvantové obvody nativním formátem pro reprezentaci kvantových instrukcí a operátory reprezentují pozorovatelné veličiny, které se mají měřit. Při vytváření obvodu obvykle vytvoříš nový objekt QuantumCircuit a pak do něj postupně přidáváš instrukce.
Ukázka: Sestavení základních kvantových obvodů v Qiskitu
Zkusme sestavit jednoduché obvody s Qiskitem.
# 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')
Cvičení: Sestavení základních kvantových obvodů v Qiskitu
Vytvoř obvod pro Bellův stav
# 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')
Počáteční stav kvantového obvodu je stav .
Výsledný stav je:
# Use Statevector to fetch the statevector of the circuit
sv = Statevector(qc)
sv.draw(output='latex')
Poznámka k číslování bitů v Qiskitu
Qiskit čísluje bity v řetězci zprava doleva. Qiskit SDK používá číslování bitů LSb 0. Při zobrazení nebo interpretaci seznamu bitů (nebo qubitů) jako řetězce je bit nejlevější bit a bit je nejpravější bit. Je to proto, že čísla obvykle zapisujeme s nejvýznamnější cifrou vlevo, a v Qiskitu je bit interpretován jako nejvýznamnější bit. Více podrobností najdeš v tématu Řazení bitů v Qiskit SDK.
#LSB ordering example
qc2 = QuantumCircuit(2)
qc2.x(1)
qc2.draw("mpl")
sv2 = Statevector(qc2)
sv2.draw(output='latex')
Potřebujeme měřicí hradla?
Při vytváření kvantových obvodů musíš také zvážit, jaký typ dat chceš po spuštění vrátit. Qiskit poskytuje dva způsoby vracení dat: můžeš získat střední hodnotu pozorovatelné veličiny nebo pravděpodobnostní distribuci pro sadu qubitů, které se rozhodneš měřit. Připrav svůj výpočet k měření obvodu jedním z těchto dvou způsobů pomocí primitiv Qiskit.
- Primitiv
Sampler– vrací pravděpodobnostní distribuci pro sadu qubitů, které se rozhodneš měřit. Např.:
- Primitiv
Estimator– vrací střední hodnotu pozorovatelné veličiny. Např.:
Dnes budeme používat Sampler, takže musíme přidat měřicí hradla do našeho obvodu.
# 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')
Krok 2. Optimalizace obvodů pro cílový hardware
Při spouštění obvodů na zařízení je důležité optimalizovat sadu instrukcí, které obvod obsahuje, a minimalizovat celkovou hloubku (přibližně počet instrukcí) obvodu. Tím zajistíš co nejlepší výsledky díky snížení vlivu chyb a šumu. Instrukce obvodu musí navíc odpovídat instrukční sadě architektury (ISA) backendového zařízení a musí zohledňovat jeho základní hradla a propojení qubitů.
Následující kód vytvoří instanci simulátoru, na který se úloha odešle, a transformuje obvod a operátory tak, aby odpovídaly ISA daného backendu. Upozorňujeme, že skutečné zařízení použijeme později.
# 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)
