Qiskit to otwartoźródłowa biblioteka Pythona stworzona przez IBM — najpopularniejsze na świecie narzędzie do programowania komputerów kwantowych. Pozwala budować obwody, uruchamiać je na symulatorach i wysyłać na prawdziwe procesory kwantowe IBM przez internet. W tej lekcji zbudujemy stan Bella z poprzedniej lekcji — tym razem w kodzie.
Krok 1: Instalacja
Potrzebujesz Pythona 3.9 lub nowszego. W terminalu wpisz:
pip install qiskit qiskit-aer
Pakiet qiskit-aer to szybki symulator — klasyczny program udający mały komputer kwantowy. Na początek w zupełności wystarczy.
Krok 2: Pierwszy obwód — stan Bella
from qiskit import QuantumCircuit
from qiskit_aer import AerSimulator
# Obwód z 2 kubitami i 2 bitami klasycznymi na wyniki
qc = QuantumCircuit(2, 2)
qc.h(0) # bramka Hadamarda: kubit 0 w superpozycję
qc.cx(0, 1) # bramka CNOT: splątanie kubitów 0 i 1
qc.measure([0, 1], [0, 1]) # pomiar obu kubitów
print(qc.draw()) # rysunek obwodu w konsoli
# Uruchamiamy 1000 powtórzeń na symulatorze
sim = AerSimulator()
job = sim.run(qc, shots=1000)
print(job.result().get_counts())
Przykładowy wynik:
{'00': 507, '11': 493}
Dokładnie to przewidziała teoria: tylko wyniki „00” i „11”, każdy w około połowie z 1000 uruchomień. Kubity są splątane — zawsze zgadzają się co do wyniku, choć sam wynik jest losowy. Gratulacje: właśnie wykonałeś swoje pierwsze obliczenie kwantowe.
Krok 3: Prawdziwy komputer kwantowy
Symulator to plac zabaw — czas na prawdziwą maszynę. Załóż bezpłatne konto w serwisie IBM Quantum Platform (quantum.ibm.com), skopiuj swój token API i zainstaluj pakiet dostępowy:
pip install qiskit-ibm-runtime
from qiskit_ibm_runtime import QiskitRuntimeService, SamplerV2
from qiskit.transpiler.preset_passmanagers import generate_preset_pass_manager
service = QiskitRuntimeService(channel="ibm_quantum_platform",
token="TWOJ_TOKEN")
backend = service.least_busy(operational=True, simulator=False)
print("Maszyna:", backend.name)
# Dopasowanie obwodu do fizycznego układu kubitów
pm = generate_preset_pass_manager(backend=backend, optimization_level=1)
qc_fiz = pm.run(qc)
job = SamplerV2(mode=backend).run([qc_fiz], shots=1000)
counts = job.result()[0].data.c.get_counts()
print(counts)
Twój obwód trafi do kolejki i wykona się na procesorze nadprzewodzącym chłodzonym do temperatury bliskiej zera absolutnego. Wynik będzie podobny do symulacji, ale z niespodzianką: pojawi się trochę wyników „01” i „10”. To nie błąd w kodzie — to szum prawdziwego sprzętu, czyli dekoherencja, o której mówiliśmy we wstępie teoretycznym. Właśnie zobaczyłeś na własne oczy, dlaczego korekcja błędów jest świętym Graalem tej dziedziny.
Co dalej?
- Oficjalna dokumentacja i kursy: IBM Quantum Learning (learning.quantum.ibm.com) — bezpłatne, interaktywne, po angielsku.
- Eksperymentuj: zmień
shots, dodaj trzeci kubit, usuń bramkę H i zobacz, jak zmieniają się wyniki. - Gotowy na więcej? W ostatniej lekcji — Algorytmy w praktyce — zaimplementujemy algorytm Grovera.