Qiskit — pierwsze kroki

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.