Skip to main content
IBM Quantum Platform

Systèmes de back-end

qiskit_addon_mpf.backends

Les backends optionnels pour l'algorithme DynamicMPF algorithme.


Disponibilité

La possibilité d'utiliser un certain backend dépend de la disponibilité de la bibliothèque de réseau tensoriel sous-jacente. Cela peut être facilement vérifié au moment de l'exécution à l'aide des indicateurs suivants :

HAS_QUIMB

Indique si la dépendance optionnelle quimb est installée.

HAS_TENPY

Indique si la dépendance optionnelle tenpy est installée.


Systèmes de back-end

En fonction de la disponibilité (voir ci-dessus), les backends suivants sont disponibles :

quimb_tebdA quimb-basé sur le TEBD.
quimb_layersUn backend à évolution temporelle par couches utilisant quimb.
quimb_circuitUn backend à évolution temporelle basé sur un circuit utilisant quimb.
tenpy_tebdA tenpy-basé sur le TEBD.
tenpy_layersUn backend à évolution temporelle par couches utilisant tenpy.

Interface

L'interface mise en œuvre par l'un ou l'autre de ces backends optionnels est constituée des classes suivantes :

Évoluer

class Evolver

GitHub

Bases : ABC

L'interface pour les algorithmes d'évolution temporelle utilisés au sein de DynamicMPF.

Cette interface d'évolution temporelle est utilisée par l'équipe d'experts de la Commission européenne DynamicMPF.lhs et DynamicMPF.rhs et devrait faire évoluer dans le temps un objet State sous son capot. Le mécanisme exact de l'algorithme est décrit plus en détail dans le document suivant DynamicMPF, State, et setup_dynamic_lse().

conjugate

abstract property

Type: bool

Retourne si cette instance de time-evolver agit sur le côté droit.

evolved_time

abstract property

Type: float

Renvoie le temps d'évolution actuel.

step

abstract step()

GitHub

Effectuer un seul pas de temps de cet algorithme d'évolution temporelle.

Elle doit agir sur l'objet référencé en interne State (pour lequel aucun nom n'est prescrit par cette interface). La question de savoir si cette instance d'algorithme d'évolution temporelle doit faire évoluer le State du côté gauche ou du côté droit, dépend de la valeur de conjugate.

Type de retour

Aucun

Etat

class State

GitHub

Bases : ABC

L'interface pour le DynamicMPF.evolution_state.

Cet état d'évolution temporelle est partagé entre les instances LHS et RHS Evolver de l'instance DynamicMPF instance. Dans la plupart des cas où un backend concret mettant en œuvre cette interface est basé sur des réseaux tensoriels, cet état sera un opérateur de produit matriciel (MPO). En effet, la plupart des algorithmes d'évolution temporelle font normalement évoluer un état de produit matriciel (MPS), comme illustré ci-dessous, où des blocs d'évolution temporelle (U#) sont appliqués successivement à un MPS unidimensionnel (S#). Ici, le réseau tensoriel croît vers la droite au fur et à mesure que le temps passe.

MPS Evolution

S0┄┄┲━━━━┱┄┄┄┄┄┄┄┄┲━━━━┱┄
│   ┃ U1 ┃        ┃ U5 ┃
S1┄┄┺━━━━┹┄┲━━━━┱┄┺━━━━┹┄
│          ┃ U3 ┃
S2┄┄┲━━━━┱┄┺━━━━┹┄┲━━━━┱┄ ...
│   ┃ U2 ┃        ┃ U6 ┃
S3┄┄┺━━━━┹┄┲━━━━┱┄┺━━━━┹┄
│          ┃ U4 ┃
S4┄┄┄┄┄┄┄┄┄┺━━━━┹┄┄┄┄┄┄┄┄

Cependant, dans notre cas, nous voulons que deux moteurs d'évolution temporelle partagent un même état. Pour ce faire, l'un d'entre eux peut faire évoluer l'état depuis la droite (comme précédemment, U#), mais le second peut faire évoluer l'état depuis la gauche (V#). Pour ce faire, l'état doit également avoir des liaisons allant dans cette direction, ce qui en fait un MPO bidimensionnel (M#) plutôt que le MPS unidimensionnel d'avant.

MPO Evolution

    ┄┲━━━━┱┄┄┄┄┄┄┄┄┲━━━━┱┄┄M0┄┄┲━━━━┱┄┄┄┄┄┄┄┄┲━━━━┱┄
     ┃ V5 ┃        ┃ V1 ┃  │   ┃ U1 ┃        ┃ U5 ┃
    ┄┺━━━━┹┄┲━━━━┱┄┺━━━━┹┄┄M1┄┄┺━━━━┹┄┲━━━━┱┄┺━━━━┹┄
            ┃ V3 ┃         │          ┃ U3 ┃
... ┄┲━━━━┱┄┺━━━━┹┄┲━━━━┱┄┄M2┄┄┲━━━━┱┄┺━━━━┹┄┲━━━━┱┄ ...
     ┃ V6 ┃        ┃ V2 ┃  │   ┃ U2 ┃        ┃ U6 ┃
    ┄┺━━━━┹┄┲━━━━┱┄┺━━━━┹┄┄M3┄┄┺━━━━┹┄┲━━━━┱┄┺━━━━┹┄
            ┃ V4 ┃         │          ┃ U4 ┃
    ┄┄┄┄┄┄┄┄┺━━━━┹┄┄┄┄┄┄┄┄┄M4┄┄┄┄┄┄┄┄┄┺━━━━┹┄┄┄┄┄┄┄┄

overlap

abstract overlap(initial_state)

GitHub

Calculer le chevauchement de cet état avec l'état initial fourni.

Avertissement

Une implémentation concrète de cette méthode devrait soulever un TypeError si l'objet initial_state fourni n'est pas pris en charge par le backend qui l'implémente.

Paramètres

initial_state (Any) – l'état initial avec lequel calculer le chevauchement.

Augmentations

TypeError - si l'état initial fourni a un type incompatible.

Retours

Le chevauchement de cet état avec l'état fourni.

Type de retour

complexe

Cette page a-t-elle été utile ?
Signaler un bogue, une coquille ou proposer du contenu sur GitHub.