Algorytmy w praktyce

Czas połączyć wszystko, czego się nauczyliśmy. Zaimplementujemy algorytm Grovera — kwantowe przeszukiwanie — w najmniejszej sensownej wersji: na dwóch kubitach. Zadanie brzmi: spośród czterech „szuflad” (00, 01, 10, 11) znajdź tę jedną, w której ukryto nagrodę — otwierając ją tylko raz.

Dlaczego to ciekawe?

Klasycznie trzeba średnio sprawdzić ponad dwie szuflady, a w najgorszym razie trzy. Grover znajduje właściwą za jednym zapytaniem — i to ze stuprocentową pewnością (w wersji 2-kubitowej). Mechanizm: najpierw rozkładamy stan na wszystkie cztery szuflady naraz (superpozycja), potem „wyrocznia” oznacza szukaną szufladę ujemną fazą, a na końcu operator dyfuzji przekształca to niewidoczne oznaczenie we wzmocnienie właściwej odpowiedzi (interferencja).

Kod — Grover na 2 kubitach

Szukamy szuflady „11” (dla niej wyrocznia jest najprostsza — to bramka CZ):

from qiskit import QuantumCircuit
from qiskit_aer import AerSimulator

qc = QuantumCircuit(2, 2)

# 1. Superpozycja: wszystkie 4 szuflady naraz
qc.h([0, 1])

# 2. Wyrocznia: oznacz "11" ujemna faza (bramka CZ)
qc.cz(0, 1)

# 3. Operator dyfuzji: wzmocnij oznaczony stan
qc.h([0, 1])
qc.z([0, 1])
qc.cz(0, 1)
qc.h([0, 1])

# 4. Pomiar
qc.measure([0, 1], [0, 1])

sim = AerSimulator()
print(sim.run(qc, shots=1000).result().get_counts())

Wynik:

{'11': 1000}

Wszystkie 1000 uruchomień wskazało „11”. Bez sprawdzania szuflad po kolei — jedna konsultacja z wyrocznią i interferencja zrobiła resztę. Chcesz szukać innej szuflady? Wystarczy zmienić wyrocznię, np. dla „01” dodaj qc.x(1) przed bramką CZ i qc.x(1) po niej.

Jak czytać wyniki na prawdziwym sprzęcie

Po uruchomieniu tego samego obwodu na maszynie IBM (sposób poznałeś w lekcji o Qiskit) wynik nie będzie idealny — zobaczysz np. 950 razy „11” i po kilkadziesiąt pozostałych odpowiedzi. Tak wygląda praca z erą NISQ w praktyce: odpowiedź odczytujemy ze statystyki, a nie z pojedynczego uruchomienia. Przy większej liczbie kubitów obwody Grovera szybko stają się zbyt głębokie dla dzisiejszego sprzętu — dlatego ten algorytm czeka na maszyny z korekcją błędów.

Dokąd pójść dalej?

  • Algorytm Deutscha-Jozsy — najprostszy przykład wykładniczej przewagi kwantowej; świetne ćwiczenie po Groverze.
  • Teleportacja kwantowa — przesyłanie stanu kubitu za pomocą splątania; obwód ma tylko kilka bramek.
  • VQE i QAOA — algorytmy hybrydowe używane w prawdziwych projektach; opisujemy je w dziale Algorytmy kwantowe.
  • Kursy IBM Quantum Learning — od podstaw po korekcję błędów, z certyfikatami.

To koniec kursu Quantum 101. Wiesz już, jak działa kubit, umiesz przeczytać i zbudować obwód oraz uruchomić go na prawdziwym komputerze kwantowym. Świat kwantowy przestał być magią — został inżynierią.