Zacznij pracę z Qiskit w klasie
W tym module Qiskit w Klasie uczniowie muszą mieć działające środowisko Python z zainstalowanymi następującymi pakietami:
qiskitw wersji 2.1.0 lub nowszejqiskit-ibm-runtimew wersji 0.40.1 lub nowszejqiskit-aerw wersji 0.17.0 lub nowszejqiskit.visualizationnumpypylatexenc
Aby skonfigurować i zainstalować powyższe pakiety, zapoznaj się z przewodnikiem Instalacja Qiskit. Aby uruchamiać zadania na prawdziwych komputerach kwantowych, uczniowie muszą założyć konto w IBM Quantum®, postępując zgodnie z instrukcjami w przewodniku Konfiguracja konta IBM Cloud®.
Ten moduł został przetestowany i wykorzystał 2 sekundy czasu QPU na procesorze Heron v2. Jest to wyłącznie szacunek. Twoje rzeczywiste zużycie może się różnić.
# Added by doQumentation — required packages for this notebook
!pip install -q qiskit qiskit-aer qiskit-ibm-runtime
# Uncomment and modify this line as needed to install dependencies
#!pip install 'qiskit>=2.1.0' 'qiskit-ibm-runtime>=0.40.1' 'qiskit-aer>=0.17.0' 'numpy' 'pylatexenc'
Wprowadzenie
W modułach Qiskit w Klasie będziesz mieć okazję użyć komputera kwantowego do eksploracji różnych pojęć z dziedzin powiązanych z obliczeniami kwantowymi, takich jak mechanika kwantowa, informatyka, chemia i inne. Ten moduł stanowi warunek wstępny dla pozostałych — wprowadza podstawy obliczeń kwantowych oraz sposób korzystania z Qiskit do uruchamiania obwodów kwantowych.
Najpierw damy ci krótki przegląd działania klasycznego komputera, a następnie pokażemy, jak te pojęcia są adaptowane do paradygmatu obliczeń kwantowych. Na koniec pokażemy, jak połączyć te koncepcje, aby zbudować i uruchomić swój pierwszy obwód kwantowy.
Komputery klasyczne
Prawdopodobnie znasz już podstawy działania komputerów klasycznych, ale tutaj wyróżnimy kilka kluczowych cech, abyśmy mogli następnie przeprowadzić porównanie z komputerami kwantowymi.
Podstawowe jednostki informacji: bity
Komputery klasyczne przetwarzają informacje klasyczne, a podstawową jednostką informacji klasycznej jest bit. Pojedynczy bit może przechowywać odpowiedź na jedno pytanie „tak/nie". Dwa stany binarne bitu reprezentujemy zazwyczaj jako „0" i „1".
Przypomnienie liczb binarnych
Łączenie bitów pozwala przechowywać więcej informacji. Na przykład, jeśli chcesz przechować liczbę od 0 do 15, możesz to zrobić za pomocą czterech bitów w następujący sposób:
| 0 = 0000 | 4 = 0100 | 8 = 1000 | 12 = 1100 |
| 1 = 0001 | 5 = 0101 | 9 = 1001 | 13 = 1101 |
| 2 = 0010 | 6 = 0110 | 10 = 1010 | 14 = 1110 |
| 3 = 0011 | 7 = 0111 | 11 = 1011 | 15 = 1111 |
Ogólnie rzecz biorąc, aby przekonwertować liczbę binarną o bitach na znajomą liczbę w systemie dziesiętnym, mnożysz bit o najmniejszym znaczeniu (skrajny prawy) przez , następny bit z lewej przez , kolejny przez i tak dalej, aż do bitu o największym znaczeniu (skrajny lewy), który mnożysz przez .
A zatem bitów może znajdować się w jednym z różnych możliwych stanów.
Sprawdź swoją wiedzę
Przeczytaj poniższe pytania, zastanów się nad odpowiedzią, a następnie kliknij trójkąt, aby odsłonić rozwiązanie.
Ile bitów potrzeba, aby zapisać liczbę 86? Napisz bitstring kodujący tę liczbę w systemie binarnym.
Odpowiedź:
Pamiętaj, że bitów pozwala reprezentować liczby od do , więc sześć bitów daje nam zakres do . To trochę za mało. Dodajemy jeszcze jeden bit, aby uzyskać zakres do . Teraz rozłóżmy 86 na potęgi liczby 2:
Podstawowe operacje: bramki
Komputer musi być w stanie coś robić z bitami, aby móc — no cóż — obliczać. Bramki binarne to operacje stanowiące podstawowe elementy składowe wszystkich bardziej skomplikowanych algorytmów i kodów.
Bramka jednobitowa:
NOT
Gdy masz tylko jeden bit, istnieje tylko jeden sposób na zmianę jego stanu: odwrócenie stanu z 0 na 1 lub z 1 na 0. Nazywamy to bramką „NOT". Efekt tej bramki — i pozostałych bramek omawianych poniżej — można przedstawić w tak zwanej „tabeli prawdy", z kolumnami dla stanów wejściowych i wyjściowych qubitów. Tabela prawdy dla bramki NOT wygląda następująco:
| Wejście | Wyjście |
|---|---|
| 0 | 1 |
| 1 | 0 |
Bramki wielobitowe:
AND
AND to bramka dwubitowa, która przyjmuje dwa bity wejściowe i daje jeden bit wyjściowy. Zwraca 1, jeśli oba bity wejściowe wynoszą 1, w przeciwnym razie 0:
| Wejście | Wyjście |
|---|---|
| 00 | 0 |
| 01 | 0 |
| 10 | 0 |
| 11 | 1 |
OR
OR to kolejna bramka dwubitowa z jednym bitem wyjściowym. Zwraca 1, jeśli którykolwiek z bitów wynosi 1:
| Wejście | Wyjście |
|---|---|
| 00 | 0 |
| 01 | 1 |
| 10 | 1 |
| 11 | 1 |
XOR
XOR oznacza „exclusive OR" (wyłączne OR) i działa jak bramka OR, ale zwraca 1 tylko wtedy, gdy dokładnie jeden z bitów wejściowych wynosi 1. Zwraca 0, jeśli oba wynoszą 1 lub oba wynoszą 0:
| Wejście | Wyjście |
|---|---|
| 00 | 0 |
| 01 | 1 |
| 10 | 1 |
| 11 | 0 |
Pomiary:
Zazwyczaj, ucząc się o obliczeniach klasycznych, nie poświęca się zbyt wiele uwagi procesowi odczytu stanu bitów. Wynika to z faktu, że nie jest to zbyt skomplikowane z konceptualnego punktu widzenia. Możesz mierzyć bity w dowolnym momencie — przed, w trakcie lub po obliczeniach — i nie wpływa to na wynik. W obliczeniach kwantowych sytuacja jest inna, jak omówimy poniżej.
Obwody:
Łącząc powyższe bramki, możesz wykonać dowolną operację na komputerze. Weźmy prosty przykład: używając bramek AND i XOR, można zbudować obwód półsumatora, który oblicza sumę dwóch bitów. Jest to przedstawione na schemacie obwodu logicznego, gdzie przewody reprezentują bity, a bramki operujące na bitach są pokazane jako symbole na odpowiednich przewodach:
A zatem dwa bity są kopiowane i przepuszczane zarówno przez bramkę AND, jak i XOR. Wynik bramki XOR to „bit sumy" (S), który pozostaje na miejscu jedności liczby binarnej, natomiast wynik bramki AND to „bit przeniesienia" (C), który jest wartością kolejnej najbardziej znaczącej cyfry w liczbie binarnej. Oto tabela prawdy:
| Suma () | Przeniesienie () | ||
|---|---|---|---|
| 0 | 0 | 0 | 0 |
| 0 | 1 | 1 | 0 |
| 1 | 0 | 1 | 0 |
| 1 | 1 | 0 | 1 |
Sprawdź swoją wiedzę
Przeczytaj poniższe pytania, zastanów się nad odpowiedzią, a następnie kliknij trójkąt, aby odsłonić rozwiązanie.
Zweryfikuj, że powyższa tabela prawdy daje poprawny wynik dla obwodu sumatora. To znaczy, dla każdej z czterech kombinacji A i B, sprawdź, czy .
Odpowiedź:
Komputery kwantowe
Bity Qubit
Tak jak bity są podstawowymi jednostkami klasycznej informacji, kwantowe bity, czyli „Qubit", są podstawowymi jednostkami informacji kwantowej. Podobnie jak klasyczny bit, stan Qubit może wynosić 0 lub 1, co zwykle oznaczamy jako i . Jednak w przeciwieństwie do klasycznego bitu, Qubit może też znajdować się w superpozycji stanu i stanu jednocześnie. Ogólnie rzecz biorąc, Qubit może być w dowolnym stanie postaci:
gdzie i są zespolonymi amplitudami spełniającymi warunek .
Faza kwantowa
Ponieważ i są zespolone, każdą z nich można zapisać jako , gdzie nazywamy fazą. Jeśli pomnożymy cały stan przez ten sam globalny czynnik fazowy, nic fizycznie się nie zmienia — nazywamy to fazą globalną i nie ma ona żadnych obserwowalnych konsekwencji.
Z tego powodu przyjęło się „wyłączać" przed nawias, co daje:
gdzie jest względną fazą stanu kwantowego, która ma obserwowalne konsekwencje.
Faza ta odgrywa bardzo ważną rolę w obliczeniach kwantowych — jej różnorodne konsekwencje poznasz w kolejnych modułach Qiskit w klasie.
Wiele Qubit
O ile stan wielu bitów można było wyrazić po prostu jako ciąg zer i jedynek, o tyle stan wielu Qubit jest nieco bardziej skomplikowany ze względu na zasady superpozycji i splątania.
Przypomnij sobie, że bitów może przyjmować jeden z możliwych stanów — od binarnego 000...000 do 111...111. Teraz jednak, dzięki zasadzie superpozycji, Qubit może być jednocześnie w superpozycji wszystkich tych stanów!
Można to wyrazić jako
gdzie, podobnie jak w przypadku klasycznym, stan odpowiada stanowi, w którym każdy Qubit przyjmuje odpowiednią kombinację zer i jedynek tworzącą liczbę binarną . Stany te znane są jako „obliczeniowe stany bazowe" układu kwantowego. Na przykład stan trzech Qubit można zapisać jako superpozycję ośmiu obliczeniowych stanów bazowych:
Każdy Qubit w układzie jest oznaczony indeksem od do . Przyjęta konwencja zakłada odczytywanie stanów Qubit od prawej do lewej, tak że stan Qubit jest stanem znajdującym się najdalej po prawej, a stan Qubit — najdalej po lewej. Taka notacja nazywa się „little-endian" i może początkowo wydawać się nieintuicyjna, skoro jesteśmy przyzwyczajeni do czytania od lewej do prawej.
Sprawdź swoje rozumienie
Przeczytaj poniższe pytanie/pytania, zastanów się nad odpowiedzią, a następnie kliknij trójkąt, by zobaczyć rozwiązanie.
Na pierwszy rzut oka porządkowanie Qubit od prawej do lewej, jak w notacji little-endian, może wydawać się nieintuicyjne, lecz jest to w rzeczywistości bardzo logiczne! Wyjaśnij dlaczego. (Przypomnij sobie omówiony wcześniej sposób zamiany liczb binarnych na dziesiętne.)
Odpowiedź:
Jeśli Qubit numerujemy od prawej do lewej, tak że Qubit 0 jest najdalej po prawej, a Qubit N-1 najdalej po lewej, logiczne jest powiązanie Qubit z bitem najmniej znaczącym, mnożonym przez , oraz Qubit z bitem najbardziej znaczącym, mnożonym przez .
Splątanie
Jak wspomnieliśmy wcześniej, kolejną kluczową właściwością Qubit jest możliwość splątania ich ze sobą. Weźmy przykład stanu dwóch Qubit, gdzie i :
Stan Qubit 0 może być zatem równy lub z jednakowym prawdopodobieństwem — tak samo w przypadku Qubit 1. Jednak te prawdopodobieństwa nie są już od siebie niezależne. Jeśli zmierzymy stan Qubit 0 i okaże się, że wynosi , to wiemy, że Qubit 1 również będzie w stanie . Jest to prawdą niezależnie od tego, jak daleko od siebie się znajdują — dlatego pomiar splątanego stanu bywa określany mianem „upiornego działania na odległość".
Splątanie może przybierać też inne formy. Na przykład stan
za każdym razem daje przeciwne wyniki: jeśli jeden Qubit zostaje zmierzony jako , drugi jest gwarantowanie w stanie .
Sprawdź swoje rozumienie
Przeczytaj poniższe pytanie/pytania, zastanów się nad odpowiedzią, a następnie kliknij trójkąt, by zobaczyć rozwiązanie.
Czy stan jest splątany? Dlaczego tak lub dlaczego nie?
Odpowiedź:
Nie jest splątany. Choć wyniki pomiaru obu Qubit są zawsze takie same, wynika to jedynie z tego, że każdy Qubit jest na stałe w stanie . Wynik pomiaru jednego Qubit faktycznie nie zależy od drugiego — oba po prostu zawsze wynoszą .
Ogólnie rzecz biorąc, jeśli możesz opisać stan każdego Qubit osobno, a następnie pomnożyć je przez siebie w taki sposób:
to taki stan nazywamy „stanem produktowym" i nie jest on splątany.
Notacja wektorowa
Często przydatne jest użycie wektorów i macierzy, by zobaczyć, jak stan kwantowy przekształca się pod wpływem różnych operacji. W tej reprezentacji stany kwantowe są wektorami, a Gate kwantowe (omówione w następnej sekcji) — macierzami przekształcającymi te wektory.
Dla pojedynczego Qubit wektorowe postacie stanów przyjmuje się jako: W ten sposób dowolny stan można zapisać jako
Dla ogólnego stanu Qubit potrzebujemy wektora o wymiarach, ze stanami bazowymi uporządkowanymi w rosnącym porządku binarnym, zgodnie z oczekiwaniami:
Mając tę notację wektorową na uwadze, możemy przejść do potrzebnych Gate kwantowych, ich działania na stany kwantowe oraz ich postaci macierzowych.
Sprawdź swoje rozumienie
Przeczytaj poniższe pytanie/pytania, zastanów się nad odpowiedzią, a następnie kliknij trójkąt, by zobaczyć rozwiązanie.
Dla układu dwóch Qubit istnieją cztery obliczeniowe stany bazowe. Zapisz każdy z nich w notacji ket oraz w notacji wektorowej.
Odpowiedź:
Gates kwantowe Gate'y
Podobnie jak klasyczne Gate'y, takie jak NOT, AND, OR i XOR, można łączyć w celu budowania dowolnych klasycznych Circuit'ów, kwantowe Gate'y odgrywają tę samą rolę w obliczeniach kwantowych. Ponieważ Qubity posiadają dodatkowe właściwości mechaniki kwantowej, kwantowe Gate'y są odpowiednio bogatsze. Choć nadal możemy opisać ich działanie na stany bazowe i za pomocą tablicy prawdy, nie oddaje to pełnego obrazu. W przypadku kwantowych Gate'ów często bardziej naturalne jest użycie reprezentacji macierzowej, ponieważ działają one również na superpozycje stanów bazowych.
Poniżej przedstawimy najczęściej stosowane kwantowe Gate'y i sposób, w jaki przekształcają one oddziałujące z nimi Qubity. Tam, gdzie to możliwe, połączymy je ze znajomymi klasycznymi Gate'ami.
Jednobitowe Gate'y (Single-qubit gates)
Gate : Jest to kwantowy odpowiednik operacji NOT. Jego tablica prawdy wygląda dokładnie tak jak klasyczny Gate NOT:
| Wejście | Wyjście |
|---|---|
Reprezentacja macierzowa:
W Qiskit tworzenie Circuit'u z Gate'em wygląda następująco:
from qiskit import QuantumCircuit
qc = QuantumCircuit(1)
qc.x(0)
qc.draw("mpl")
W tym bardzo prostym diagramie Circuit'u Qubit jest reprezentowany przez przewód – czarną poziomą linię – a Gate pojawia się jako prostokąt na tym przewodzie.
Gate Hadamarda: Tworzy stan superpozycji. Tablica prawdy:
| Wejście | Wyjście |
|---|---|
Reprezentacja macierzowa:
Circuit z Gate'em Hadamarda tworzy się w następujący sposób:
from qiskit import QuantumCircuit
qc = QuantumCircuit(1)
qc.h(0)
qc.draw("mpl")
Gate : Dodaje przesunięcie fazowe do stanu :
| Wejście | Wyjście |
|---|---|
W Qiskit tworzenie Circuit'u z Gate'em wygląda następująco:
qc = QuantumCircuit(1)
qc.z(0)
qc.draw("mpl")
Gate : Dodaje przesunięcie fazowe do stanu :
| Wejście | Wyjście |
|---|---|
W Qiskit tworzenie Circuit'u z Gate'em wygląda następująco:
qc = QuantumCircuit(1)
qc.t(0)
qc.draw("mpl")
Wielobitowe Gate'y (Multi-qubit gates)
Dwubitowe Gate'y mogą przypominać klasyczne Gate'y dwubitowe, ale z jednym istotnym zastrzeżeniem: wszystkie kwantowe Gate'y muszą być odwracalne. W terminologii algebry liniowej oznacza to, że są reprezentowane przez macierze unitarne. Dlatego dwa wejściowe Qubity zawsze odwzorowują się na dwa wyjściowe Qubity, a operację można co do zasady cofnąć. Stoi to w sprzeczności z klasycznymi Gate'ami, takimi jak AND czy OR, które tracą informację i są nieodwracalne – znając wyjście, nie możesz jednoznacznie ustalić wejścia.
Gate CNOT (Controlled-NOT): Dwa wejściowe Qubity noszą nazwy Qubitu „sterującego" (control) i Qubitu „docelowego" (target). Qubit sterujący pozostaje niezmieniony, lecz jego stan decyduje o tym, co dzieje się z Qubitem docelowym. Jeśli Qubit sterujący jest w stanie , to Gate jest stosowany do Qubitu docelowego; jeśli stan Qubitu sterującego wynosi , żadna zmiana nie jest wprowadzana. W poniższej notacji zakładamy, że Qubit (skrajny prawy) jest sterującym, a Qubit (skrajny lewy) jest docelowym. Poniżej stosowana notacja to
| Wejście | Wyjście |
|---|---|
Zatem macierz reprezentująca tę operację to:
qc = QuantumCircuit(2)
qc.cx(0, 1)
qc.draw("mpl")
To pierwszy diagram Circuit'u, który widzimy z dwoma Qubitami, reprezentowanymi przez dwa przewody. Gate CNOT jest zastosowany między dwoma Qubitami, przy czym pełni rolę sterującego, a docelowego.
Sprawdź swoje zrozumienie
Przeczytaj poniższe pytanie(-a), zastanów się nad odpowiedzią, a następnie kliknij trójkąt, aby odsłonić rozwiązanie.
Większość Gate'ów ma tę samą postać macierzową w Qiskit co wszędzie indziej. Jednak Gate CNOT działa na dwa Qubity, więc nagle konwencje kolejności Qubitów stają się problemem. Teksty, które porządkują Qubity jako , będą pokazywać inną postać macierzową Gate'u CNOT. Zweryfikuj przez jawne mnożenie macierzy, że powyższa macierz CNOT ma właściwe działanie na stan
Odpowiedź:
Gate SWAP: Ten Gate zamienia stany dwóch Qubitów. Tablica prawdy:
| Wejście | Wyjście |
|---|---|
Zatem macierz reprezentująca tę operację to:
qc = QuantumCircuit(2)
qc.swap(0, 1)
qc.draw("mpl")
Gate SWAP można w rzeczywistości zbudować z trzech Gate'ów CNOT. Aby zobaczyć jak, możemy rozłożyć (decompose()) Gate za pomocą Qiskit:
qc = QuantumCircuit(2)
qc.swap(0, 1)
qc.decompose().draw("mpl")
Widzimy tu po raz pierwszy, jak wiele Gate'ów jest przedstawianych w diagramie Circuit'u. Czytamy go od lewej do prawej, więc skrajny lewy Gate jest stosowany jako pierwszy.
Sprawdź swoje zrozumienie
Przeczytaj poniższe pytanie(-a), zastanów się nad odpowiedzią, a następnie kliknij trójkąt, aby odsłonić rozwiązanie.
Zweryfikuj, że powyższa kombinacja Gate'ów CNOT daje w wyniku Gate SWAP. Możesz to zrobić poprzez mnożenie macierzy lub dowolną inną metodę.
Odpowiedź:
Za pomocą mnożenia macierzy:
Za pomocą tablicy prawdy, aby zobaczyć jak stany zmieniają się przy każdym CNOT. W ostatniej kolumnie stany powinny odpowiadać kolumnie „wyjście" tablicy prawdy SWAP:
| Wejście | CNOT(A,B) | CNOT(B,A) | CNOT(A,B) |
|---|---|---|---|