Skip to main content
IBM Quantum Platform

Evolution

class Evolution(num_modes, operator, time=1.0, *, synthesis=None, atomic=False)

Bases : FermionicGate

Implémente l'évolution temporelle d'un opérateur.

Étant donné une HH fermionique operator et une évolution tttime , cette porte met en œuvre l'opérateur unitaire

U=e−itH.U = e^{-i t H}.

Pour que l' UU e soit unitaire, l' HH e doit être hermitien. Cette information relève de la responsabilité de l'appelant et n'est pas vérifiée.

Remarque

La décomposition de cette porte dans l'espace fermionique (en un circuit composé de portes Evolution plus petites) est facultative, et c'est ce que régit l'attribut synthesis . La porte peut également être transmise directement à l'étage de conversion des fermions en qubits, qui la cartographie et la synthétise dans son intégralité, quel que soit le nombre de termes qu'elle operator contient. Voir synthesis.

Lorsqu'il est décomposé (par exemple par ) decompose(), c'est qui détermine synthesis comment. La valeur par défaut est FermionicLieTrotter, ce qui divise l'évolution groupe par groupe lorsque operator est attribué groups à (voir « Termes de l'opérateur de groupe : utilisation de la structure de l'opérateur »), et terme par terme dans le cas contraire (précis uniquement lorsque les facteurs individuels commutent entre eux). Le processus de transpilation peut modifier davantage la décomposition; par exemple QDriftTrotterization, il remplace l'évolution par un échantillon aléatoire de ses termes. Les portes qu'il émet sont atomic, donc synthesis ne s'applique plus à elles.

Remarque

La trajectoire de simulation du vecteur d'état ne passe pas par synthesis: elle élève exactement operator l'ensemble à la puissance. La simulation de cette porte n'entraîne donc aucune erreur de Trotter, contrairement à un circuit décomposé, qui en présente généralement.

L'initialisation d'une instance de cette porte peut s'effectuer à l'aide des arguments indiqués ci-dessous.

Paramètres

  • num_modes (int) – le nombre de modes fermioniques sur lesquels agit cette porte.
  • operator (OperatorTrait) – l'opérateur hermitien HH, selon lequel on fait évoluer dans le temps les modes fermioniques sur lesquels agit cet opérateur.
  • time (float) – le temps d'évolution tt en saisissant l'exposant de e−itHe^{-i t H}. Une valeur négative correspond à une évolution en arrière dans le temps.
  • synthesis (FermionicEvolutionSynthesis | None) – la méthode de synthèse fermion-fermion permettant de décomposer cette porte, si tant est qu'elle puisse être décomposée. Si ( None par défaut), une instance FermionicLieTrotter est utilisée.
  • atomic (bool) – si cette porte est un facteur entièrement décomposé qui ne doit plus être décomposé davantage dans l'espace fermionique. Voir atomic.

Attributs

atomic

Cette porte est-elle un facteur qui ne doit pas être décomposé davantage?

A considère FermionicEvolutionSynthesis les facteurs qu'il émet comme atomiques, car ils résultent de la division qu'il a choisi d'effectuer : les décomposer à nouveau reviendrait à rejeter ce choix. L'évolution d'un terme à opérateur unique est atomique pour la raison, encore plus forte, qu'il n'y a plus rien à décomposer.

Une porte atomique n'a aucune définition; on la decompose() laisse donc telle quelle plutôt que de la développer. Le mappage et la synthèse s'effectuent toujours normalement au niveau « fermion-qubit », c'est-à-dire là où un facteur est transformé en opérations concrètes.

Ce paramètre est en lecture seule, pour la même raison que synthesis.

synthesis

La méthode de synthèse « fermion-à-fermion » utilisée pour décomposer cette porte.

Il s'agit d'une propriété en lecture seule : la définition de la porte est générée une seule fois, puis mise en cache; ainsi, une méthode de synthèse attribuée a posteriori ne pourrait pas prendre effet. Transmettez-le plutôt au constructeur.

operator

L'opérateur sous l'effet duquel les modes fermioniques soumis à une action évoluent dans le temps.


Méthodes

inverse

inverse(annotated=False)

Renvoie l'inverse de cette porte, e+itHe^{+i t H}.

Paramètres

annotated (bool) – ignoré. L'inverse de cette porte est une autre porte Evolution, elle n'a donc jamais besoin d'être une porte AnnotatedOperation.

Retours

Une porte Evolution qui génère le même opérateur pendant un temps inversé.

Type de retour

Évolution

Méthodes protocolaires

_apply_unitary_placed_

_apply_unitary_placed_(vec, norb, nelec, copy, freg_indices)

S'applique exp(-i * time * operator) après avoir réattribué l'opérateur aux modes globaux.

L'opérateur est réétiqueté selon ses modes globaux, converti en un ffsim.FermionOperator et transmis à ffsim.linear_operator(), puis appliqué au vecteur via scipy.sparse.linalg.expm_multiply(). Un opérateur qui n'est pas encore un FermionOperator est d'abord converti via le protocole SupportsFermionOperator , ce qui permet de faire évoluer n'importe quel type d'opérateur de ce paquet.

Paramètres

  • vec (np.ndarray) – le vecteur d'état sur lequel agir.
  • norb (int) – le nombre d'orbitales spatiales du vecteur d'état global.
  • nelec (int |tuple[int, int]) – soit un seul entier pour un système sans spin, soit une paire d'entiers indiquant le nombre de fermions de spin alpha et de fermions de spin bêta. Un nombre entier correspond à l'interprétation « sans spin » des modes (les modes norb de l'opérateur sont des orbitales alpha); une paire correspond à l'interprétation (orb, spin) « avec spin » des modes 2 * norb de l'opérateur.
  • copy (bool) – s'il faut copier le vecteur avant d'effectuer une opération dessus.
  • freg_indices (list[int]) – les indices des modes absolus (globaux) auxquels se superposent les modes locaux de cette porte. L'opérateur est converti de ses modes locaux vers ces modes globaux avant d'être appliqué, à l'image de la passe de synthèse du transpileur.

Retours

Le vecteur transformé.

Augmentations

  • MissingOptionalLibraryError – si ffsim n'est pas installé.
  • ValueError – si l'opérateur ne préserve pas le secteur (norb, nelec) . L'évolution sous exp(-i * time * operator) ne donne un opérateur unitaire que lorsque operator affecte le secteur à lui-même; ainsi, ffsim rejette tout opérateur qui ne conserve ni le nombre de particules ni la composante z du spin.

Type de retour

np.ndarray

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