Přeskočit na hlavní obsah
Tento projekt je v betě. Našel jsi chybu? Otevřít issue na GitHubu. Máš otázku nebo nápad? Zeptej se v Discussions — rádi si poslechneme tvou zpětnou vazbu!
Jaká je kvalita překladu na této stránce?

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 obvod 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í Hamiltoniánů podobných Heisenbergovým 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 číslovány od nuly.

# Added by doQumentation — installs the packages this notebook needs if they are missing
import importlib.util

_needed = {"numpy": "numpy", "qiskit": "qiskit", "qiskit_addon_obp": "qiskit-addon-obp", "qiskit_addon_utils": "qiskit-addon-utils", "qiskit_ibm_runtime": "qiskit-ibm-runtime", "rustworkx": "rustworkx"}
_missing = [pip for module, pip in _needed.items()
if importlib.util.find_spec(module) is None]
# One at a time, so a package that fails to install does not block the others
for _pip in _missing:
%pip install -q {_pip}
if not _missing:
print("\u2713 All required packages are installed")
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")

Code output

Dále vygenerujeme Pauliho operátor modelující Heisenbergův XYZ Hamiltonián.

undefined