Snižování hloubky Circuit pomocí zpětné propagace operátorů
Zpětná propagace operátorů je technika, při které se operace z konce kvantového Circuit absorbují do Pauliho operátoru. Obecně to vede ke snížení hloubky Circuit za cenu většího počtu členů v operátoru. Cílem je zpětně propagovat co největší část Circuit, aniž by operátor příliš narostl.
Jedním ze způsobů, jak umožnit hlubší zpětnou propagaci do Circuit a zároveň zabránit nadměrnému růstu operátoru, je zkrácení (truncation) členů s malými koeficienty namísto jejich přidávání do operátoru. Zkrácení členů může vést k menšímu počtu kvantových Circuit ke spuštění, avšak způsobuje určitou chybu ve výsledném výpočtu střední hodnoty úměrnou velikosti koeficientů zkrácených členů. V tomto tutoriálu implementujeme Qiskit vzor pro simulaci kvantové dynamiky Heisenbergova spinového řetězce pomocí zpětné propagace operátorů:
- Krok 1: Mapování na kvantový problém
- Namapování časově vyvíjeného Hamiltoniánu na kvantový Circuit
- Krok 2: Optimalizace problému
- Rozdělení Circuit na řezy (slices)
- Zpětná propagace řezů z Circuit na Pauliho pozorovatelnou
- Sloučení zbývajících řezů do jediného Circuit
- Transpilace Circuit pro Backend
- Krok 3: Provádění experimentů
- Výpočet střední hodnoty pomocí redukovaného Circuit a rozšířené pozorovatelné se StatevectorEstimator pro jednoduchost v tomto notebooku
- Krok 4: Rekonstrukce výsledků
- Netýká se.
Poznámka: Qiskit volně popisuje vrstvy jako oddíly Circuit o hloubce 1 napříč všemi Qubit. Tento balíček používá termín řezy (slices) pro vrstvy libovolné hloubky. Funkce qiskit_addon_obp.backpropagate je navržena tak, aby zpětně propagovala celé řezy najednou, takže volba způsobu dělení kvantového Circuit může mít zásadní vliv na to, jak dobře zpětná propagace funguje pro daný problém. O řezech se dozvíš více níže.
Krok 1: Mapování na kvantový problém
Mapování časového vývoje kvantového Heisenbergova modelu na kvantový experiment.
Balíček qiskit_addon_utils poskytuje znovupoužitelné funkcionality pro různé účely.
Jeho modul qiskit_addon_utils.problem_generators obsahuje funkce pro generování Heisenbergových Hamiltonánů na zadaném grafu propojení. Tento graf může být buď rustworkx.PyGraph, nebo CouplingMap, což usnadňuje použití v pracovních postupech orientovaných na Qiskit.
V následujícím příkladu nejprve vygenerujeme CouplingMap ve tvaru heavy-hex, z nějž vyřízneme lineární řetězec 10 Qubit. Všimni si, že indexy nové reduced_coupling_map jsou opět nulové.
# Added by doQumentation — required packages for this notebook
!pip install -q numpy qiskit qiskit-addon-obp qiskit-addon-utils qiskit-ibm-runtime rustworkx
from qiskit.transpiler import CouplingMap
coupling_map = CouplingMap.from_heavy_hex(3, bidirectional=False)
# Choose a 10-qubit linear chain on this coupling map
reduced_coupling_map = coupling_map.reduce([0, 13, 1, 14, 10, 16, 5, 12, 8, 18])
from rustworkx.visualization import graphviz_draw
graphviz_draw(reduced_coupling_map.graph, method="circo")
Dále vygenerujeme Pauliho operátor modelující Heisenbergův XYZ Hamiltonián.
undefined