Skip to main content
IBM Quantum Platform

TeNPy TEBD-Backend

qiskit_addon_mpf.backends.tenpy_tebd

A tenpy-basierten TEBD-Backend.

Vorsicht

Die optionale Abhängigkeit TeNPy wurde bisher unter einer GPLv3 Lizenz angeboten. Ab der Veröffentlichung von v1.0.4 am 2. Oktober 2024 wird es unter der Lizenz Apache v2 angeboten. Die Lizenz dieses Pakets ist nur mit Apache -lizenzierten Versionen von TeNPy kompatibel.

Achtung

Dieses Backend ist nur verfügbar, wenn die optionalen Abhängigkeiten installiert wurden:

pip install "qiskit-addon-mpf[tenpy]"
Kolumne „ 1 “
Kolumne „ 2 “
TEBDEvolverEin TEBD-Algorithmus zur Entwicklung eines internen MPO.
MPOStateEine Vermittlerklasse, um TeNPy's MPO an die State schnittstelle.
MPS_neel_stateKonstruiert 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:

  1. Die Verbindung von tenpyimplementierung der Schnittstelle, die durch qiskit_addon_mpf.backends.
  2. Erweiterung von tenpytEBD-Implementierung, um einen internen MPO- (statt MPS-) Zustand zu behandeln (siehe auch State fü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

War diese Seite hilfreich?
Melden Sie auf GitHub einen Fehler, einen Tippfehler oder fordern Sie Inhalte an.