Przejdź do głównej treści

Symulowanie natury

Obejrzyj ten film Olivii Lanes na temat symulowania natury za pomocą komputerów kwantowych lub otwórz wideo w osobnym oknie na YouTube.

Ta lekcja korzysta z treści następującego samouczka:

Samouczek dotyczący łagodzenia błędów w skali użyteczności z probabilistycznym wzmacnianiem błędów

Wprowadzenie​

Jednym z najbardziej fascynujących zastosowań komputerów kwantowych jest ich zdolność do symulowania zjawisk naturalnych. W tej lekcji przyjrzymy się, w jaki sposób komputery kwantowe są wykorzystywane do rozwiązywania problemów dynamiki kwantowej — konkretnie: jak pomagają nam zrozumieć ewolucję czasową układu kwantowego.

Na początku spojrzymy z szerszej perspektywy na ogólne kroki wykonywane podczas takich symulacji. Następnie przeanalizujemy konkretny przykład: eksperyment zaprezentowany przez IBM w 2023 roku, który pokazał koncepcję użyteczności kwantowej. Eksperyment ten stanowi doskonałe studium przypadku pozwalające zrozumieć praktyczne kroki i implikacje symulowania dynamiki kwantowej na rzeczywistym sprzęcie kwantowym. Na koniec będziesz mieć wyraźniejszy obraz tego, jak badacze podchodzą do tych wyzwań i dlaczego symulacja kwantowa wzbudza tak duże nadzieje na pogłębienie naszego rozumienia świata naturalnego.

Richard Feynman wygłosił niezwykle wpływowy wykład na Caltech w 1959 roku. Nosił on słynny tytuł „There's Plenty of Room at the Bottom" — żartobliwe nawiązanie do ogromnych, niezbadanych możliwości kryjących się w skali mikroskopowej. Feynman przekonywał, że większość fizyki na poziomie atomowym i subatomowym pozostaje jeszcze do odkrycia.

Znaczenie tego wykładu wzrosło w latach osiemdziesiątych XX wieku wraz z postępem technologicznym. W tym okresie Feynman powrócił do tych idei podczas kolejnego ważnego wykładu na Caltech, prezentując artykuł zatytułowany „Simulating Nature with Computers". Postawił tam odważne pytanie: czy komputery mogłyby wykonywać dokładne symulacje odtwarzające zachowanie natury na poziomie kwantowym? Feynman zasugerował, że zamiast polegać na przybliżonych modelach procesów atomowych, moglibyśmy używać komputerów, które same działają zgodnie z prawami mechaniki kwantowej — nie po to, by jedynie modelować naturę, lecz by ją naśladować.

Właśnie ten rodzaj symulacji fizycznej zbadamy w tej lekcji.

Przypomnij sobie oś czasu wprowadzoną w poprzednim odcinku. Na jednym końcu spektrum widoczne są problemy, które są łatwe do rozwiązania i nie wymagają zwiększonej prędkości, jaką może zapewnić obliczanie kwantowe.

Diagram przedstawiający rozkład możliwych problemów od łatwych do trudnych, od tych niewymagających komputera kwantowego do tych wymagających w pełni odpornego na błędy, ze wskazaniem, że skupiamy się na problemach pośrodku.

Na przeciwległym końcu znajdują się niezwykle trudne problemy wymagające w pełni odpornych na błędy maszyn kwantowych — technologii, która nie jest jeszcze dostępna. Na szczęście uważa się, że wiele problemów symulacyjnych leży gdzieś w połowie tej osi czasu, w zasięgu dzisiejszych komputerów kwantowych, które można już efektywnie wykorzystać. Jest wiele powodów, by być podekscytowanym i zaintrygowanym tą perspektywą, ponieważ symulowanie natury stanowi podstawę szerokiego zakresu obiecujących zastosowań.

Poniższe informacje opisują ogólny przepływ pracy przy symulacjach natury, a następnie konkretny przykład tego przepływu służący do odtworzenia wyników z dobrze znanego artykułu.

Ogólny przepływ pracy​

Zanim będzie można zastosować obliczenia kwantowe w tych ekscytujących dziedzinach, warto najpierw zrozumieć podstawowe kroki typowego przepływu pracy przy symulacjach:

  1. Identyfikacja Hamiltonianu układu

  2. Kodowanie Hamiltonianu

  3. Przygotowanie stanu

  4. Ewolucja czasowa stanu

  5. Optymalizacja Circuit

  6. Wykonanie Circuit

  7. Post-processing

Proces rozpoczyna się od zidentyfikowania interesującego nas układu kwantowego. Pomaga to określić Hamiltonian rządzący jego ewolucją czasową, a także sensowny opis jego początkowych właściwości, czyli jego stanu. Następnie należy wybrać odpowiednią metodę implementacji ewolucji czasowej tego stanu. Warto zauważyć, że pierwsze cztery kroki tego przepływu pracy są częścią kroku Mapping w frameworku wzorców Qiskit.

Po skonfigurowaniu obwodu ewolucji czasowej, kolejne etapy obejmują przeprowadzenie właściwego eksperymentu. Zazwyczaj obejmuje to optymalizację obwodu kwantowego implementującego algorytm ewolucji czasowej, uruchomienie obwodu na sprzęcie kwantowym oraz przetworzenie wyników. Są to te same trzy ostatnie kroki co w frameworku wzorców Qiskit.

Następnie omówimy, co oznaczają te kroki, zanim przejdziemy do kodowania.

1. Zidentyfikuj Hamiltonian układu

Pierwszym istotnym krokiem przeprowadzania eksperymentu symulacyjnego jest zidentyfikowanie hamiltonianu opisującego system. W wielu przypadkach hamiltonian jest dobrze ustalony. Jednak często konstruujemy go, sumując wkłady energetyczne z mniejszych części systemu. Zazwyczaj wyraża się to jako sumę wyrazów:

H=∑iNHiH=\sum_i^N {H_i}

gdzie każdy wyraz HiH_i działa na jeden z NN lokalnych podsystemów (takich jak pojedyncza cząstka lub mała grupa cząstek) całkowitego hamiltonianu HH. W przypadku nierozróżnialnych cząstek elementarnych ważne jest, aby ustalić, czy system obejmuje fermiony czy bozony, gdzie fermiony podlegają zasadzie wykluczania Pauliego, co oznacza, że żadne dwa identyczne fermiony nie mogą zajmować tego samego stanu kwantowego, jak elektrony. W przeciwieństwie do fermionów, wiele bozonów może istnieć w tym samym stanie kwantowym, a ta różnica wpływa na statystykę systemu i sposób jego modelowania.

W praktyce ludzie są często zainteresowani systemami fizycznymi, w których elementy są zakładane jako dobrze oddzielone lub oznaczone, a tym samym rozróżnialne, jak w przypadku spinów na sieci krystalicznej.

A lattice with spins and a molecule which is bonded together using electrons which are fermions.

Ten system składa się ze spinów dipoli magnetycznych ułożonych na sieci krystalicznej, które są traktowane jako cząstki rozróżnialne poprzez zliczanie ich adresu. Ten system opisywany jest przez model Isinga z polem poprzecznym, a jego hamiltonian jest konstruowany z sumy dwóch części:

H=∑iNHi=J∑<i,j>ZiZj+h∑i=0NXiH = \sum_i^N {H_i} = J \sum_{<i,j>}Z_iZ_j + h\sum_{i=0}^N X_i

Gdzie pierwszy wyraz reprezentuje energię oddziaływania między sąsiadującymi spinami. Tutaj <i,j><i,j> wskazuje, że sumujemy po wszystkich parach spinów bezpośrednio połączonych na sieci krystalicznej, ZiZ_i i ZjZ_j to macierze Pauliego-Z, które reprezentują stan spinów w miejscach ii i jj, a JJ to stała sprzężenia, która określa siłę tego oddziaływania. Drugi wyraz reprezentuje wpływ zewnętrznego pola magnetycznego przyłożonego do całego systemu. Tutaj XiX_i to macierz Pauliego-X działająca na pojedynczy spin w miejscu ii, a hh wskazuje siłę tego zewnętrznego pola.

2. Kodowanie Hamiltonianu

Następnym krokiem jest przetłumaczenie hamiltonianu na formę, którą może przetworzyć komputer kwantowy, co nazywamy kodowaniem. Ten proces kodowania zależy krytycznie od rodzaju cząstek w systemach: rozróżnialnych lub nierozróżnialnych, oraz fermionu lub bozonu, jeśli cząstki są nierozróżnialne.

A flow chart showing different potential types of mappings for different system types including bosons, fermions, and distinguishable particles like spins on a lattice.

Jeśli masz system z rozróżnialnymi cząstkami, jak spiny 1/21/2 ustalone na sieci krystalicznej, którym pobieżnie przyjrzeliśmy się powyżej, hamiltonian jest często już zapisany w języku zgodnym z kubitami. Operator Pauliego-Z, na przykład, w naturalny sposób opisuje spin skierowany w górę lub w dół, i nie jest potrzebne żadne specjalne kodowanie.

Podczas symulowania nierozróżnialnych cząstek fermionów lub bozonów konieczne jest zastosowanie transformacji kodującej. Cząstki te są opisywane w ramach specjalnego formalizmu matematycznego zwanego second quantization, który śledzi liczbę obsadzeń każdego stanu kwantowego poprzez wprowadzenie operatorów creation i annihilation, gdzie operator kreacji a^i†\hat{a}_i^\dagger dodaje jedną cząstkę do stanu ii, natomiast operator anihilacji a^i\hat{a}_i usuwa jedną cząstkę ze stanu ii. Na podstawie tego formalizmu drugiej kwantyzacji fermiony można transformować za pomocą transformacji Bravyi-Kitaeva i Jordana-Wignera. Transformacja Jordana-Wignera definiuje fermionowy operator kreacji f^j†=(∏k<j(−Zk))(Xj+iYj2)\hat{f}_j^\dagger = \Bigl( \prod\limits_{k \lt j}{(-Z_k)} \Bigr)\Bigl( \frac{X_j + i Y_j}{2} \Bigr), który wypełnia jj-ty stan kwantowy fermionem, oraz fermionowy operator anihilacji f^j=(∏k<j(−Zk))(Xj−iYj2)\hat{f}_j= \Bigl( \prod\limits_{k \lt j}{(-Z_k)} \Bigr)\Bigl( \frac{X_j - i Y_j}{2} \Bigr), który opróżnia fermion z jj-tego stanu. Więcej szczegółów na temat tej transformacji Jordana-Wignera znajdziesz w naszym kursie Quantum Computing in Practice, odcinek 5 - Mapowanie. Podobnie bozony wymagają własnych metod kodowania, takich jak transformacja Holsteina-Primakoffa, aby mogły być reprezentowane przez qubity.

Ostatecznie, niezależnie od tego, czy droga jest bezpośrednia, czy wymaga tłumaczenia, cel jest ten sam: wyrazić hamiltonian systemu w formie operatorów spinowych Pauliego, które komputer kwantowy może zrozumieć i wykonać.

3. Przygotowanie stanu

Po zakodowaniu pożądanego hamiltonianu w zestawie bramek komputera kwantowego, kolejnym ważnym krokiem jest wybranie odpowiedniego stanu początkowego, aby rozpocząć symulację. Wybór stanu początkowego wpływa nie tylko na zbieżność algorytmów wariacyjnych, takich jak wariacyjny solver wartości własnych (VQE), ale także na dokładność i wydajność ewolucji czasowej oraz próbkowania. Zasadniczo stan początkowy służy jako punkt startowy obliczeń, tworząc podstawy do wydobycia użytecznych obserwabli z modelowanego systemu kwantowego. Idealnie ten stan powinien reprezentować fizycznie sensowną konfigurację badanego systemu.

Dla wielu symulacji chemii kwantowej stan Hartree-Focka może być dobrym punktem wyjścia. W języku drugiej kwantyzacji stan Hartree-Focka (∣ϕ⟩HF|\phi\rangle_{HF}) jest tworzony poprzez zastosowanie operatorów kreacji (a^i†\hat{a}_i^\dagger) dla każdego z orbitali o najniższej energii do stanu próżni (∣vac⟩=∣01...0k...0N⟩=∣0⟩⊗N|vac\rangle = |0_1 ... 0_k ... 0_N\rangle = |0\rangle ^{\otimes N}), stanu bez elektronów.

∣ϕ⟩HF=∏i=1ka^i†∣0⟩⊗N=a^1†...a^k†∣01...0k...0N⟩|\phi\rangle_{HF} = \prod\limits_{i=1}^k \hat{a}_i^\dagger |0\rangle ^{\otimes N} = \hat{a}_1^\dagger ... \hat{a}_k^\dagger |0_1 ... 0_k ... 0_N\rangle

Dodatkowo, łatwo przygotowywany ansatz z istotnym nakładaniem się na prawdziwy stan podstawowy może służyć jako dobry stan początkowy dla problemów chemicznych, takich jak znalezienie energii stanu podstawowego.

Bardziej ogólnie możemy zapisać dowolny nn-kubitowy stan jako superpozycję stanów bazy obliczeniowej ∣ci⟩∣c_i\rangle ze współczynnikami aia_i, spełniającą warunki normalizacji. Przygotowanie takiego stanu można generalnie osiągnąć, stosując określony operator O^\hat{O} do stanu początkowego, którym zwykle jest, zgodnie z konwencją, stan bazowy złożony z samych zer.

∣ψ⟩=∑i=02n−1ai∣ci⟩=O^∣0⟩⊗nwith∑i=02n−1∣ai2∣=1|\psi\rangle = \sum_{i=0}^{2^n-1}{a_i |c_i\rangle}=\hat{O}|0\rangle^{\otimes n}\\ \text{with} \qquad \sum_{i=0}^{2^n-1}{|a_i^2|}=1

Jednak ten proces często wymaga wykładniczej liczby bramek CNOT, co czyni go generalnie kosztownym pod względem zasobów. Często koncentrujemy się na przygotowywaniu stanów początkowych, dla których wymagania dotyczące zasobów implementacji są skromniejsze. Z tego powodu często koncentrujemy się na przygotowywaniu stanów początkowych, które są mniej złożone. Powszechnym i praktycznym wyborem jest stan produktowy, w którym kubity nie są splątane, można go przygotować za pomocą tylko operacji jednokubitowych, co znacznie zmniejsza wymagania dotyczące zasobów w przygotowaniu stanu oraz jego złożoność. 4. Ewolucja czasowa stanu

Teraz, gdy stan początkowy jest ustalony, możemy wreszcie rozpocząć samą symulację - zbadać, jak stan systemu ∣ϕ(t=0)⟩|\phi(t=0)\rangle zmienił się w ∣ϕ(t)⟩|\phi(t)\rangle po pewnym czasie tt. W mechanice kwantowej ta ewolucja jest opisywana przez pojedynczą operację matematyczną zwaną operatorem ewolucji czasowej:

U(t)=e−iHtU(t) = e^{-iHt}

gdzie przyjęliśmy ℏ=1\hbar=1 zgodnie z konwencją. Zastosowanie tego operatora do naszego stanu początkowego daje nam stan końcowy: ∣ϕ(t)⟩=e−iHt∣ϕ(t=0)⟩|\phi(t)\rangle = e^{-iHt}|\phi(t=0)\rangle

Jednak zbudowanie obwodu kwantowego, który bezpośrednio implementuje pełny operator e−iHte^{-iHt}, jest zazwyczaj niemożliwe, gdy nasz hamiltonian jest sumą różnych części. Dlatego potrzebujemy trotteryzacji.

Mówiąc prościej, trotteryzacja to technika przybliżania eksponencjalizacji macierzy (tutaj hamiltonianu HH), zwłaszcza gdy wykładnik zawiera nieprzemienne operatory ([HA,HB]≠0[H_A, H_B] \neq 0). Często hamiltonian HH składa się z wielu operatorów, które nie są przemienne. W takim przypadku nie można rozdzielić ich eksponent:

e−i(HA+HB)t≠e−iHAte−iHBte^{-i(H_A + H_B)t} \neq e^{-iH_A t}e^{-iH_B t}

Użytecznym podejściem jest naprzemienne stosowanie ich eksponent ewolucji czasowej w krótkich odstępach czasu, t/nt/n, łącznie nn razy. W przypadku tych dwóch nieprzemiennych wkładów zapisalibyśmy

e−iHt≈(e−iHAt/ne−iHBt/n)ne^{−i H t}\approx \left(e^{−i H_A t/n}e^{−i H_B t/n}\right)^n

A quantum circuit showing Trotterized time-evolution operators: operators split into small pieces.

Błąd wprowadzony przez to przybliżenie nazywany jest błędem Trottera. Możemy zmniejszyć ten błąd, zwiększając nn, ale wiąże się to z kosztem. Istnieją również bardziej zaawansowane wzory wyższego rzędu (drugiego rzędu i inne warianty). Na przykład wzór drugiego rzędu oferuje lepszą dokładność, stosując kroki w symetrycznym schemacie.

First order:e−iHt≈(∏je−iHit/n)nSecond order:e−iHt≈(∏j=1Ne−iHjt/2n)n(∏k=N1e−iHkt/2n)n\begin{aligned} \text{First order:} & \qquad e^{-iHt}\approx \left(\prod_j{e^{-iH_i t/n}}\right)^n\\ \text{Second order:} & \qquad e^{-iHt}\approx \left(\prod_{j=1}^N{e^{-iH_j t/2n}}\right)^n\left(\prod_{k=N}^1{e^{-iH_k t/2n}}\right)^n \end{aligned}

Tutaj NN to liczba nieprzemiennych wyrazów, HjH_j, w Hamiltonianie, który ma zostać rozbity w ten sposób, a nn to liczba małych kroków czasowych, na które ta ewolucja jest podzielona. Zwróć uwagę na odwrotną kolejność operatorów w drugim iloczynie w podejściu drugiego rzędu.

Zobacz sekcję o trotteryzacji w kursie Algorytmy diagonalizacji kwantowej, aby dowiedzieć się więcej. 5. Optymalizacja obwodu

Po wygenerowaniu Trotteryzowanego Circuit krok mapowania jest zakończony i możemy przejść do optymalizacji Circuit. Proces ten obejmuje kilka kluczowych zadań:

  • Ustal układ qubit/kubitów, który odwzorowuje abstrakcyjne qubit/kubity Circuit na fizyczne qubit/kubity sprzętu. Ten krok jest konieczny, ponieważ architektura sprzętu często ma określone ograniczenia dotyczące połączeń, podczas gdy projekty Circuit kwantowych zazwyczaj zakładają, że dowolny qubit/kubit może oddziaływać z dowolnym innym.

  • Wstaw bramki swap tam, gdzie potrzeba, aby umożliwić oddziaływania między qubit/kubitami, które nie są bezpośrednio połączone na urządzeniu.

  • Przetłumacz Gate'y Circuit na instrukcje Instruction Set Architecture (ISA), które sprzęt może bezpośrednio wykonać.

  • Przeprowadź optymalizacje Circuit, aby zmniejszyć głębokość Circuit i liczbę Gate'ów. Tę optymalizację można również zastosować wcześniej — na wirtualnym Circuit przed przypisaniem qubit/kubitów do konkretnych połączeń sprzętowych.

Warto podkreślić, że duża część tego procesu optymalizacji jest obsługiwana automatycznie przez narzędzia w Qiskit. Dokładnie to, jak to działa, zbadamy w dalszej części tej lekcji.

6. Wykonanie Circuit

Po zakończeniu kroku optymalizacji jesteśmy gotowi do wykonania Circuit za pomocą prymitywu. Rozważamy eksperyment symulacyjny, którego celem jest zrozumienie, jak pewne właściwości układu zmieniają się w czasie. W tym celu prymityw Estimator jest najbardziej odpowiednim wyborem, ponieważ pozwala mierzyć wartości oczekiwane obserwowalnych odpowiadających tym właściwościom.

Następnie korzystamy z opcji obejmujących techniki tłumienia i łagodzenia błędów, aby poprawić dokładność Estimatora. Na koniec uruchamiamy eksperyment i zbieramy wyniki.

7. Post-processing

Ostatnim krokiem jest post-processing zebranych danych. Polega to na wyodrębnieniu zmierzonych wartości oczekiwanych lub — jeśli użyto prymitywu Sampler — próbkowanego rozkładu prawdopodobieństwa w bazie obliczeniowej. Gdy potrzebne są jedynie wartości oczekiwane odpowiednich obserwowalnych, można je bezpośrednio uzyskać z prymitywu Estimator, dostępne zarówno jako surowe wyniki, jak i z zastosowanym łagodzeniem błędów. Często te zmierzone wartości oczekiwane stanowią punkt wyjścia do dodatkowych obliczeń dotyczących innych interesujących wielkości. Takie dodatkowe obliczenia zazwyczaj nie wymagają komputera kwantowego i można je efektywnie przeprowadzić na klasycznym komputerze.

Replikacja artykułu „Utility"​

uwaga

Ta część to ogólne omówienie samouczka Utility-scale error mitigation with probabilistic error amplification, który replikuje wyniki artykułu Evidence for the Utility of Quantum Computing Before Fault Tolerance. Zdecydowanie zalecamy otwarcie wspomnianego samouczka razem z tą sesją.

Przyjrzymy się teraz konkretnemu przykładowi z bardzo wpływowego artykułu opublikowanego przez IBM w 2023 roku, zatytułowanego Evidence for the Utility of Quantum Computing Before Fault Tolerance, często nazywanego „artykułem Utility".

Okładka artykułu zwanego artykułem Utility, opublikowanego w czasopiśmie Nature.

Od momentu publikacji praca ta szybko stała się przełomowym badaniem w społeczności zajmującej się obliczeniami kwantowymi. Jej główna teza głosi, że zaszumiony komputer kwantowy, wykorzystując 127 qubitów i 2880 Gate'ów, może wyznaczać dokładne wartości oczekiwane dla Circuit'ów kwantowych leżących poza zasięgiem klasycznych metod symulacji brute-force, które próbują dokładnie symulować te same Circuit'y.

Badanie to miało szczególne znaczenie, ponieważ wykazało, że komputery kwantowe mogą służyć do weryfikacji lub porównywania wyników z przybliżonymi klasycznymi metodami symulacji, takimi jak algorytmy sieci tensorowych — zwłaszcza w scenariuszach, w których dokładne rozwiązanie nie jest wcześniej znane.

Kolejnym godnym uwagi aspektem tej pracy jest to, że była szeroko reprodukowana: badacze i użytkownicy mają teraz możliwość replikowania i weryfikowania eksperymentu przy użyciu dostępnych w chmurze systemów kwantowych IBM oraz frameworka Qiskit. W kolejnych krokach przeprowadzimy cię przez etapy tej replikacji, omawiając krok po kroku samouczek IBM.

W tej lekcji omawiamy konkretne kroki wymagane do przetłumaczenia problemu na dane wejściowe, które urządzenie kwantowe może przetworzyć. Skupiamy się na symulowaniu dynamiki całkowitego namagnesowania w układzie magnetycznych spinów dipolowych rozmieszczonych na siatce, poddanym zewnętrznemu polu magnetycznemu. Układ ten można opisać modelem Isinga z poprzecznym polem magnetycznym. Reprezentujemy go za pomocą sparametryzowanego Circuit'u kwantowego, gdzie parametry odpowiadają nastawnnym wartościom oddziaływań spin-spin (ZZZZ) oraz sile zewnętrznego, poprzecznego pola magnetycznego (BxB_x, sparametryzowanego przy użyciu XX).

Spiny na siatce skierowane w górę lub w dół.

Ponieważ ta seria nosi tytuł Quantum Computing in Practice, omówimy dodatkowe szczegóły technik eksperymentalnych stosowanych w celu poprawy jakości wyników. Jedna ważna procedura polega na identyfikowaniu i usuwaniu „złych" qubitów — tych o niskiej wierności Gate'ów lub krótkich czasach dekoherencji — które mogłyby znacząco wpłynąć na wynik eksperymentu. Takie problematyczne qubity mogą wynikać ze słabej kalibracji lub interakcji z układami dwupoziomowymi (TLS). Usunięcie tych qubitów zmienia natywną topologię sprzętu, efektywnie zmieniając sieć, na której symulowany jest układ.

Ponadto omówimy, jak skonstruować sparametryzowany Circuit kwantowy implementujący ewolucję czasową układu przy użyciu Trotterization. Kluczowym elementem tego procesu jest identyfikowanie warstw splątujących w Circuit'cie, które odgrywają istotną rolę w głównej technice łagodzenia błędów.

Qiskit patterns krok 1: Map​

Samouczek realizuje krok mapowania podobnie do ogólnego podejścia opisanego powyżej. Specyficznie dla tego problemu samouczek wykonuje następujące czynności:

  • Tworzy sparametryzowany Circuit modelu Isinga

  • Tworzy warstwy splątujące i usuwa złe qubity

  • Generuje wersję Circuit'u opartą na Trotterization

W samouczku zaczynamy od wczesnego tworzenia serii funkcji pomocniczych w notebooku. Funkcje te mają na celu uproszczenie procesu w miarę postępów. Nie są wymaganą częścią procedury, ale to dobra powszechna praktyka podczas pracy nad podobnymi eksperymentami: rozbicie problemu na zarządzalne komponenty. Funkcje obejmują:

  • Usuwanie połączeń qubitów

  • Definiowanie połączeń qubitów

  • Konstruowanie połączeń warstw

  • Konstruowanie warstwy splątującej

  • Definiowanie Circuit'u z Trotterization

Przyjrzyjmy się teraz nieco bliżej tematom związanym z tymi funkcjami. Sprzężenia warstwowe

Sprzężenia warstwowe określają, w jaki sposób Qubity oddziałują ze swoimi sąsiadami podczas symulacji. Nasze urządzenia kwantowe wykorzystują układ heksagonalny (heavy-hexagonal), charakterystyczny wzorzec łączenia Qubitów. W ramach tego układu połączenia między Qubitami — znane jako „krawędzie” — można podzielić na trzy odrębne zbiory. Co ważne, żadne dwa połączenia w tym samym zbiorze nie współdzielą Qubitu. Taka organizacja rozwiązuje kluczowe ograniczenie sprzętowe: na prawdziwym komputerze kwantowym Qubit może uczestniczyć tylko w jednej dwuqubitowej bramce (Gate) w danym momencie.

A color-coded map showing layers of couplings. The emphasizes that two-qubit gates can be executed across the entire quantum computer, even though only one two-qubit gate can be executed simultaneously on a given qubit.

Dzięki uporządkowaniu wszystkich połączeń w trzy oddzielne warstwy, dwuqubitowe bramki (Gate) można zastosować w całym urządzeniu w trzech kolejnych rundach. Zapewnia to, że żaden Qubit nie bierze udziału w więcej niż jednej bramce na warstwę. Te bramki implementują oddziaływanie ZZ w modelu Isinga i są powtarzane w każdym kroku czasowym symulacji (każdym kroku Trottera).

Dodatkowo stosowana jest technika zwana twirlingiem, która modyfikuje charakterystykę szumu w urządzeniu. Twirling przekształca szum w taki sposób, że nawet proste modele szumu stają się dokładniejszym odwzorowaniem błędów fizycznych. To udoskonalenie umożliwia dokładniejszą charakteryzację szumu, którą można następnie wykorzystać do poprawy strategii łagodzenia błędów. Usuwanie „złych” qubitów

Kolejny krok polega na usunięciu „złych” Qubitów z listy fizycznych Qubitów dostępnych dla eksperymentu. Qubit może stać się „zły” z różnych powodów. Czasami jest to po prostu kwestia słabej kalibracji, którą można naprawić poprzez ponowną kalibrację. W innych przypadkach problem jest bardziej złożony i związany z tzw. defektem systemu dwupoziomowego (TLS). Te defekty TLS powodują fluktuacje parametrów Qubitu i relaksację. Rozwiązanie tego problemu często wymaga rozgrzania całego systemu, a następnie ponownego jego schłodzenia — proces, który może trwać dłuższy czas i nie jest wykonalny przy zdalnym dostępie do sprzętu kwantowego przez chmurę.

Na razie najprostszym podejściem jest wykluczenie tych problematycznych Qubitów z puli fizycznych Qubitów, które będą używane w eksperymencie. IBM Quantum Platform® ułatwia identyfikację Qubitów, które działają poniżej oczekiwań na danym QPU. Możesz albo otworzyć QPU i zwizualizować ich charakterystyki bezpośrednio na platformie, albo pobrać dane z platformy jako plik CSV. Następnie utwórz listę Qubitów do wykluczenia i usuń je z całkowitego zbioru fizycznych Qubitów na urządzeniu.

The layout of a quantum computer is shown with a low-performing qubit indicated in pink.

Usunięcie niewiarygodnych Qubitów zapewnia, że zachowanie systemu jest bardziej przewidywalne, co poprawia dokładność eksperymentu. Umożliwia też lepsze modelowanie szumu, co jest niezbędne do wdrażania skutecznych strategii mitygacji błędów. Obwód trotteryzowany

Nadszedł czas, by skonstruować nasz trotteryzowany obwód. Jak omówiono wcześniej, trotteryzacja rozkłada ewolucję czasową na dyskretne kroki, więc musimy wybrać, ile kroków użyć. W tym przykładzie wybierzemy sześć kroków. Ogólnie podejście to polega na wyważeniu błędu Trottera — błędu aproksymacji wprowadzanego przez algorytm — z błędami spowodowanymi dekoherencją. Zwiększenie liczby kroków Trottera zmniejsza błąd aproksymacji, ale wymaga głębszych obwodów kwantowych, które są bardziej podatne na szum dekoherencji.

Obwód zostanie zdefiniowany za pomocą kilku parametrów: parametru theta reprezentującego siłę zewnętrznego pola magnetycznego, sprzężeń między warstwami, liczby kroków, liczby Qubitów oraz oczywiście wyboru backendu urządzenia. Ponieważ namagnesowanie systemu zależy od siły zewnętrznego pola magnetycznego, warto uruchomić symulację przy różnych wartościach pola magnetycznego. Ta zmienność odpowiada różnym kątom obrotu dla Gate'u RX w obwodzie.

from qiskit.circuit import Parameter

num_steps = 6 #Trotter steps
theta = Parameter("theta")
circuit = trotter_circuit(
theta, layer_couplings, num_steps, qubits = good_qubits, backend = backend
)
num_params = 12

# 12 parameter values for Rx between [0,p/2].
#Reshape to outer product broadcast with observables

parameter_values = np.linspace(0,np.pi/2,num_params).reshape((num_params,1))
num_params = parameter_values.size

Wzorce Qiskit, krok 2: Optymalizacja​

Teraz, gdy wygenerowaliśmy nasz obwód, kolejnym krokiem jest jego optymalizacja. Pierwsza część tego procesu polega na zdefiniowaniu menedżera przejść (pass manager). W kontekście Qiskit SDK transpilacja to proces przekształcania wejściowego Circuit do postaci nadającej się do wykonania na urządzeniu kwantowym. Transformacja ta odbywa się przez sekwencję kroków zwanych przejściami transpilatora (transpiler passes). Menedżer przejść to obiekt przechowujący listę tych przejść i mogący stosować je do obwód. Aby go utworzyć, inicjalizujesz PassManager z żądaną listą przejść transpilatora. Ostatecznie menedżer przejść wytwarza circuit ISA — Circuit wyrażony w terminach Instruction Set Architecture (ISA) backendu. Oznacza to, że Circuit jest reprezentowany przy użyciu Gate'ów natywnych dla sprzętu backendu, choć nie zawiera jeszcze informacji o taktowaniu wymaganych do uruchomienia Circuit na urządzeniu.

Wzorce Qiskit, krok 3: Wykonanie za pomocą prymitywów​

Nadszedł czas, aby uruchomić nasz obwód. Użyjemy Estimatora jako głównego narzędzia w tym eksperymencie, ponieważ naszym celem jest pomiar całkowitego namagnesowania układu. Estimator jest specjalnie zaprojektowany do szacowania wartości oczekiwanych obserwowalnych, co czyni go tutaj idealnym wyborem. Na tym etapie konieczne jest również skonfigurowanie ustawień mitygacji błędów. Zastosujemy Zero Noise Extrapolation (ZNE), aby poprawić dokładność wyników. W tutorialu zobaczysz, że podajemy dwie lub więcej wartości współczynnika szumu, dla których oceniane są modele ekstrapolowane, i wybieramy „Probabilistic Error Amplification" (PEA) jako metodę amplifikacji. PEA jest preferowane w tym eksperymencie, ponieważ skaluje się znacznie lepiej niż inne opcje — co jest kluczowe podczas pracy z układami złożonymi ze 100 lub więcej kubitów/qubitów.

To wszystko, co jest potrzebne do uruchomienia eksperymentu.

Przerwa na temat mitygacji błędów

Zanim przejdziemy do post-processingu, zatrzymajmy się na chwilę, aby wyjaśnić, co oznacza Zero Noise Extrapolation (ZNE). Wspominaliśmy o tej koncepcji we wcześniejszych odcinkach, ale warto ją krótko przypomnieć. ZNE to technika mitygacji błędów zaprojektowana w celu zmniejszenia wpływu nieznanego szumu pojawiającego się podczas wykonywania Circuit kwantowych, pod warunkiem że szum ten można skalować w kontrolowany sposób. Metoda opiera się na założeniu, że wartości oczekiwane skalują się z szumem zgodnie ze znaną funkcją:

⟨A(λ)⟩=⟨A(0)⟩+∑k=0makλk+R,\langle A(\lambda)\rangle = \langle A(0)\rangle + \sum_{k=0}^m {a_k \lambda^k}+R,

gdzie λλ reprezentuje siłę szumu, która może być celowo amplifikowana.

Proces implementacji ZNE składa się z następujących kroków:

  1. Amplifikuj szum Circuit dla różnych współczynników szumu λ1λ_1, λ2λ_2, … .
  2. Wykonaj każdy obwód ze wzmocnionym szumem, aby zmierzyć odpowiadające wartości oczekiwane ⟨A(λ1)⟩\langle A(\lambda_1)\rangle, ⟨A(λ2)⟩\langle A(\lambda_2)\rangle, ….
  3. Ekstrapoluj te wyniki z powrotem do granicy zerowego szumu \langle A(λ0)⟩A(\lambda_0)\rangle.

Plots are shown of an expectation value, that same expectation value with noise amplified, and then the value extrapolated back to the case of zero noise.

Technika ta pozwala oszacować, jaki byłby wynik przy braku szumu, poprawiając dokładność obliczeń kwantowych.

Głównym wyzwaniem skutecznej implementacji ZNE jest opracowanie dokładnego modelu szumu dla wartości oczekiwanej oraz amplifikacja szumu w kontrolowany i dobrze zrozumiały sposób. Powszechne techniki amplifikacji błędów w ZNE obejmują skalowanie czasu trwania impulsów poprzez kalibrację, powtarzanie Gate'ów z wykorzystaniem cykli tożsamości oraz dodawanie szumu przez próbkowanie kanałów Pauli — metodę zwaną Probabilistic Error Amplification (PEA).

Spośród nich PEA jest często preferowanym wyborem z kilku powodów:

  • Rozciąganie impulsów (pulse stretching) wiąże się z wysokim kosztem obliczeniowym.

  • Składanie Gate'ów (gate folding), które wykorzystuje wstawienia tożsamości, nie daje mocnych teoretycznych gwarancji zachowania odchylenia szumu.

  • PEA ma zastosowanie do dowolnego Circuit wykonywanego z natywnym współczynnikiem szumu, choć wymaga wcześniejszego poznania modelu szumu.

Three methods of amplifying noise for ZNE are shown: pulse stretching, gate folding, and probabilistic error amplification.

PEA działa w oparciu o założenie warstwowego modelu szumu podobnego do tego stosowanego w probabilistic error cancellation (PEC). Jednak w odróżnieniu od PEC unika wykładniczego narzutu próbkowania, który zazwyczaj rośnie wraz z szumem Circuit. Ta wydajność sprawia, że PEA jest praktycznym i solidnym podejściem do amplifikacji szumu w ZNE, ułatwiając bardziej niezawodną kwantową mitygację błędów. Aby scharakteryzować model szumu, musimy najpierw zidentyfikować odrębne warstwy operacji dwu-qubitowych w Circuit. Dla każdej z tych warstw stosujemy procedurę Pauli twirling do dwu-qubitowych Gate'ów, co pomaga zapewnić, że szum można dokładnie opisać modelem szumu tłumiącego. Następnie powtarzamy pary warstw tożsamości na różnych głębokościach i na koniec dopasowujemy wartości wierności, aby określić współczynniki błędów dla każdego kanału szumu.

Chociaż zrozumienie tej metody koncepcyjnie jest korzystne, jej ręczna implementacja w Qiskit jest znacznie prostsza, jak pokazano w towarzyszącym tutorialu.

Steps are shown in learning a sparse Pauli-Lindblad noise model

Wzorce Qiskit, krok 4: Przetwarzanie końcowe​

Po zakończeniu eksperymentu możesz obejrzeć wynik, przeprowadzając jego post-processing. Przerywana szara linia na wykresie przedstawia wyniki uzyskane metodami przybliżonymi klasycznymi, z błędem przybliżenia zredukowanym do niskiego progu. Surowe punkty danych dla różnych współczynników szumu, wybranych na początku, są wyraźnie przesunięte względem tej przerywanej linii. Natomiast ciągła niebieska linia prezentuje dane po zastosowaniu naszego przetwarzania ZNE, co zauważalnie przybliża wyniki do dokładnych wartości. Podsumowując, wartości uzyskane w normalnych warunkach szumu (współczynnik szumu nf=1.0) wykazują znaczące odchylenie od dokładnych wyników. Tymczasem wartości po mitygacji ściśle pokrywają się z dokładnymi, demonstrując skuteczność techniki mitygacji szumu opartej na PEA.

A plot of exact solutions, unmitigated solutions, and mitigated solutions to the problem solved in the utility paper.

Summary​

Szybko podsumujmy to, czego się nauczyliśmy:

  • Symulacja kwantowa jest jednym z najbardziej obiecujących obszarów zastosowań w krótko- i średnioterminowej perspektywie.

  • Ma szerokie zastosowania — od farmaceutyki po fizykę wysokich energii, naukę o materiałach i wiele innych dziedzin.

  • Artykuł Utility paper IBM, opublikowany w 2023 roku, wskazał kierunek ku możliwości wykorzystania komputerów kwantowych do odkryć naukowych, a my przeanalizowaliśmy towarzyszący mu tutorial.

  • Kroki prowadzące przez problem symulacji od początku do końca są stosunkowo proste i mamy nadzieję, że możesz teraz korzystać z tego materiału wideo i tutorialu jako przewodnika przy rozwiązywaniu kolejnych problemów symulacyjnych.

Ankieta po kursie​

Gratulacje ukończenia tego kursu! Prosimy o chwilę, aby pomóc nam ulepszyć nasz kurs, wypełniając następującą krótką ankietę. Twoje opinie zostaną wykorzystane do poprawy naszej oferty treści i doświadczenia użytkownika. Dziękujemy!