Skip to main content
IBM Quantum Platform

Quimb TEBD-Backend

qiskit_addon_mpf.backends.quimb_tebd

A quimb-basierten TEBD-Backend.

Achtung

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

pip install "qiskit-addon-mpf[quimb]"
Kolumne „ 1 “
Kolumne „ 2 “
TEBDEvolverEin TEBD-Algorithmus zur Entwicklung eines internen MPO.
MPOStateEin MPO, das die Vidal-Spurweite durchsetzt.

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 quimb tensornetzwerk-Bibliothek implementiert ist.

Die von diesem Modul bereitgestellten Klassen dienen zwei Zwecken:

  1. Die Verbindung von quimbimplementierung der Schnittstelle, die durch qiskit_addon_mpf.backends.
  2. Erweiterung von quimbtEBD-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 quimb-nativen Form kodieren. Um konkreter zu werden, wird die TEBDEvolver klasse (die eine Unterklasse von quimb.tensor.TEBD) arbeitet mit einem Hamiltonian in Form eines quimb.tensor.LocalHam1D. Quimb bietet eine Reihe von praktischen Methoden zur Konstruktion solcher Hamiltonians in seinem quimb.tensor.tensor_builder 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, um Ihnen den Einstieg in die Verwendung dieses Backends zu erleichtern. Das Beispiel zeigt, wie die drei Fabrikfunktionen erstellt werden, die für die setup_dynamic_lse().

Zuerst erstellen wir die identity_factory , die mit dem IdentityStateFactory protokoll entsprechen muss. Dies geschieht einfach durch die Verwendung der quimb.tensor.MPO_identity() funktion und umhüllen die resultierende quimb.tensor.MatrixProductOperator mit unserer eigenen MPOState schnittstelle.

>>> from qiskit_addon_mpf.backends.quimb_tebd import MPOState
>>> from quimb.tensor import MPO_identity
>>> num_qubits = 10
>>> identity_factory = lambda: MPOState(MPO_identity(num_qubits))

Als nächstes, bevor man die ExactEvolverFactory und ApproxEvolverFactory zu definieren, müssen wir den Hamiltonian definieren, den wir zeitlich entwickeln möchten. Hier wählen wir einfach eine der quimbkomfortmethoden aus.

>>> from quimb.tensor import ham_1d_heis
>>> hamil = ham_1d_heis(num_qubits, 0.8, 0.3, cyclic=False)

Wir können nun die exakten und approximativen Instanzfabriken der Zeitentwicklung konstruieren. Dazu können wir einfach mit functools.partial() verwenden, um die vordefinierten Werte des TEBDEvolver initialisierers binden und ihn auf die korrekte Schnittstelle reduzieren, wie sie von den ExactEvolverFactory und ApproxEvolverFactory protokollen erwartet wird.

>>> from functools import partial
>>> from qiskit_addon_mpf.backends.quimb_tebd import TEBDEvolver
>>> exact_evolver_factory = partial(
...     TEBDEvolver,
...     H=hamil,
...     dt=0.05,
...     order=4,
... )

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,
...     H=hamil,
...     order=2,
...     split_opts={"max_bond": 10, "cutoff": 1e-5},
... )

Natürlich sind Sie nicht auf die hier gezeigten Beispiele beschränkt, und wir ermutigen Sie, mit den anderen Einstellungen zu spielen, die von der quimb.tensor.TEBD 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
  • die Wechselwirkungen müssen acylisch sein

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.