TeNPy TEBD-Backend
qiskit_addon_mpf.backends.tenpy_tebd
A tenpy-basierten TEBD-Backend.
Dieses Backend ist nur verfügbar, wenn die optionalen Abhängigkeiten installiert wurden:
pip install "qiskit-addon-mpf[tenpy]"Kolumne „ 1 “ | Kolumne „ 2 “ |
|---|---|
TEBDEvolver | Ein TEBD-Algorithmus zur Entwicklung eines internen MPO. |
MPOState | Eine Vermittlerklasse, um TeNPy's MPO an die State schnittstelle. |
MPS_neel_state | Konstruiert den Néel-Zustand als MPS. |
Zugrunde liegende Methode
Dieses Modul bietet ein Zeitentwicklungs-Backend für die Berechnung dynamischer MPF-Koeffizienten auf der Grundlage des TEBD-Algorithmus (Time-Evolving Block Decimation) [1], der in der tenpy tensornetzwerk-Bibliothek implementiert ist.
Die von diesem Modul bereitgestellten Klassen dienen zwei Zwecken:
- Die Verbindung von
tenpyimplementierung der Schnittstelle, die durchqiskit_addon_mpf.backends. - Erweiterung von
tenpytEBD-Implementierung, um einen internen MPO- (statt MPS-) Zustand zu behandeln (siehe auchStatefür weitere Details).
Im einfachsten Sinne stellt dieses Modul eine unkomplizierte Erweiterung des TEBD-Algorithmus dar, um einen internen MPO-Zustand zu evolvieren. Wenn Sie also dieses Backend für Ihren dynamischen MPF-Algorithmus verwenden möchten, müssen Sie den Hamiltonian, den Sie zeitlich entwickeln möchten, in einer tenpy-nativen Form kodieren. Um konkreter zu werden, wird die TEBDEvolver klasse (die eine Unterklasse von tenpy.algorithms.tebd.TEBDEngine) arbeitet mit einem Hamiltonian in Form eines Model. TeNPy bietet eine Reihe von praktischen Methoden zur Konstruktion solcher Hamiltonians in seinem tenpy.models modul. Wenn keine dieser Klassen Ihre Anforderungen erfüllt, können Sie die LayerModel klasse verwenden, die einige Konvertierungsmethoden von Qiskit-nativen Objekten implementiert.
Codebeispiel
Dieser Abschnitt zeigt ein einfaches Beispiel, das Ihnen den Einstieg in die Verwendung dieses Backends erleichtern soll. Das Beispiel zeigt, wie die drei Fabrikfunktionen erstellt werden, die für die setup_dynamic_lse().
Zunächst definieren wir den Hamiltonian, den wir zeitlich entwickeln möchten. Hier wählen wir einfach eine der tenpykomfortmethoden aus.
>>> from tenpy.models import XXZChain2
>>> hamil = XXZChain2(
... {
... "L": 10,
... "Jz": 0.8,
... "Jxx": 0.7,
... "hz": 0.3,
... "bc_MPS": "finite",
... "sort_charge": False,
... }
... )Als Nächstes können wir die identity_factory erstellen, die mit dem IdentityStateFactory protokoll entsprechen muss. Dazu verwenden wir die initialize_from_lattice() -Methode, die als einzige Eingabe das Gitter verwendet, das dem soeben definierten Hamiltonian zugrunde liegt.
>>> from functools import partial
>>> from qiskit_addon_mpf.backends.tenpy_tebd import MPOState
>>> identity_factory = partial(MPOState.initialize_from_lattice, hamil.lat),Wir können nun die ExactEvolverFactory und ApproxEvolverFactory instanzfabriken für die Zeitevolution. Zu diesem Zweck können wir einfach die vordefinierten Werte des TEBDEvolver initialisierer binden und ihn auf die richtige Schnittstelle reduzieren, wie sie von den jeweiligen Funktionsprotokollen erwartet wird.
>>> from qiskit_addon_mpf.backends.tenpy_tebd import TEBDEvolver
>>> exact_evolver_factory = partial(
... TEBDEvolver,
... model=hamil,
... dt=0.05,
... options={
... "order": 4,
... "preserve_norm": False,
... },
... )Beachten Sie, dass wir den Wert dt auf einen kleinen Zeitschritt festgelegt und eine Suzuki-Trotter-Zerlegung höherer Ordnung verwendet haben, um die obige genaue Zeitentwicklung nachzuahmen.
Im Folgenden legen wir den Wert dt nicht fest und verwenden nur eine Suzuki-Trotter-Formel zweiter Ordnung für die ungefähre Zeitentwicklung. Darüber hinaus legen wir auch einige Trunkierungseinstellungen fest.
>>> approx_evolver_factory = partial(
... TEBDEvolver,
... model=hamil,
... options={
... "order": 2,
... "preserve_norm": False,
... "trunc_params": {
... "chi_max": 10,
... "svd_min": 1e-5,
... "trunc_cut": None,
... },
... },
... )Natürlich sind Sie nicht auf die hier gezeigten Beispiele beschränkt, und wir ermutigen Sie, mit den anderen Einstellungen zu spielen, die von TeNPy’s TEBDEngine implementierung.
Einschränkungen
Abschließend weisen wir auf einige bekannte Einschränkungen bezüglich der Art von Hamiltonianern hin, die mit diesem Backend behandelt werden können:
- alle Interaktionen müssen 1-dimensional sein
- für die Wechselwirkungen müssen endliche Randbedingungen gelten
Ressourcen
[1]: https://en.wikipedia.org/wiki/Time-evolving _block_decimation