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ą.