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_tebd | A quimb-basé sur le TEBD. |
quimb_layers | Un backend à évolution temporelle par couches utilisant quimb. |
quimb_circuit | Un backend à évolution temporelle basé sur un circuit utilisant quimb. |
tenpy_tebd | A tenpy-basé sur le TEBD. |
tenpy_layers | Un 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
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()
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
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)
Calculer le chevauchement de cet état avec l'état initial fourni.
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