Skip to main content
IBM Quantum Platform

Evoluzione

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

Basi: FermionicGate

Implementa l'evoluzione temporale di un operatore.

Dato un HHoperator fermionico e un’evoluzione tttime , questo gate implementa l’operatore unitario

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

Affinché l’ UU e sia unitario, l’ HH e deve essere ermitiano. Ciò è di responsabilità di chi chiama e non viene verificato.

Nota

La suddivisione di questo gate nello spazio fermionico (in un circuito composto da gate Evolution più piccoli) è facoltativa, ed è proprio ciò che regola l'attributo synthesis . Il gate può anche essere trasmesso direttamente alla fase “da fermione a qubit”, che lo mappa e lo sintetizza nella sua interezza, indipendentemente dal numero di termini che operator contiene. Vedi synthesis.

Quando viene scomposto (ad esempio da ) decompose(), è che ne determina synthesis le modalità. Il valore predefinito è FermionicLieTrotter, che suddivide l'evoluzione per gruppi quando a operator è groups assegnato (vedi Termini dell'operatore di gruppo: utilizzare la struttura dell'operatore ), e per termini nel caso contrario (esatto solo quando i singoli fattori commutano tra loro). Il processo di transpilazione può alterare ulteriormente la decomposizione; ad esempio QDriftTrotterization, sostituisce l’evoluzione con un campione casuale dei suoi termini. I campi che emette sono atomic, quindi non synthesis si applica più a essi.

Nota

Il percorso di simulazione del vettore di stato non passa per synthesis: eleva all’esponenziale l’intero vettore esattamente operator . La simulazione di questo gate non comporta quindi alcun errore di Trotter, mentre un circuito scomposto in genere ne presenta.

L'inizializzazione di un'istanza di questo gate può essere effettuata utilizzando gli argomenti elencati di seguito.

Parametri

  • num_modes (int) – il numero di modi fermionici su cui agisce questo gate.
  • operator (OperatorTrait) – l'operatore ermitiano HH in base al quale far evolvere nel tempo le modalità fermioniche su cui agisce.
  • time (float) – il tempo di evoluzione tt inserendo l'esponente di e−itHe^{-i t H}. Un valore negativo fa tornare indietro il tempo.
  • synthesis (FermionicEvolutionSynthesis | None) – il metodo di sintesi da fermione a fermione con cui scomporre questo gate, ammesso che possa essere scomposto. Se None (impostazione predefinita), viene utilizzata un'istanza FermionicLieTrotter di.
  • atomic (bool) – se questo cancello sia un fattore completamente scomposto che non deve essere ulteriormente scomposto nello spazio fermionico. Vedi atomic.

Attributi

atomic

Se questo gate sia un fattore che non deve essere scomposto ulteriormente.

A contrassegna FermionicEvolutionSynthesis i fattori che emette come atomici, poiché sono il risultato della scissione che ha scelto di effettuare: scomporli ulteriormente significherebbe rinunciare a quella scelta. L'evoluzione di un termine a operatore singolo è atomica per la ragione, ancora più valida, che non c'è più nulla da scomporre.

Un gate atomico non ha alcuna definizione, quindi lo si lascia decompose() così com'è invece di approfondirlo. A livello di fermioni-qubit, la mappatura e la sintesi avvengono ancora normalmente: è proprio lì che un fattore viene tradotto in operazioni concrete.

È di sola lettura, per lo stesso motivo di synthesis.

synthesis

Il metodo di sintesi da fermione a fermione con cui viene scomposta questa porta logica.

Si tratta di un elemento di sola lettura: la definizione del gate viene generata una volta sola e poi memorizzata nella cache, quindi un metodo di sintesi assegnato successivamente non potrebbe avere effetto. Passalo invece al costruttore.

operator

L'operatore in base al quale far evolvere nel tempo le modalità fermioniche su cui agisce.


Metodi

inverse

inverse(annotated=False)

Restituisce l'inverso di questa porta, e+itHe^{+i t H}.

Parametri

annotated (bool) – ignorato. L'inverso di questa porta è un'altra Evolution, quindi non deve mai essere un AnnotatedOperation.

Risultati

Un gate Evolution che evolve lo stesso operatore per un tempo invertito.

Tipo di restituzione

Evoluzione

Metodi del protocollo

_apply_unitary_placed_

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

Si applica exp(-i * time * operator) dopo aver riassegnato l'operatore alle modalità globali.

L'operatore viene riassegnato alle sue modalità globali, convertito in un e ffsim.FermionOperator passato a ffsim.linear_operator(), quindi applicato al vettore tramite scipy.sparse.linalg.expm_multiply(). Un operatore che non sia già un FermionOperator viene prima convertito tramite il protocollo SupportsFermionOperator , in modo che qualsiasi tipo di operatore di questo pacchetto possa essere evoluto.

Parametri

  • vec (np.ndarray) – il vettore di stato su cui agire.
  • norb (int) – il numero di orbitali spaziali del vettore di stato globale.
  • nelec (int |tuple[int, int]) – o un singolo numero intero per un sistema senza spin, oppure una coppia di numeri interi che indicano il numero di fermioni con spin alfa e beta. Un numero intero indica l'interpretazione senza spin delle modalità (le modalità norb dell'operatore sono orbitali alfa); una coppia indica l'interpretazione (orb, spin) con spin delle modalità 2 * norb dell'operatore.
  • copy (bool) – se copiare il vettore prima di eseguire operazioni su di esso.
  • freg_indices (list[int]) – gli indici delle modalità assolute (globali) a cui si mappano le modalità locali di questo gate. L'operatore viene riassegnato dalle sue modalità locali a queste modalità globali prima di essere applicato, rispecchiando il passaggio di sintesi del transpiler.

Risultati

Il vettore trasformato.

Aumenti

  • MissingOptionalLibraryError – se ffsim non è installato.
  • ValueError – se l'operatore non conserva il settore (norb, nelec) . L'evoluzione sotto produce un operatore unitario exp(-i * time * operator) solo quando operator mappa il settore su se stesso, quindi ffsim rifiuta un operatore che non conservi né il numero di particelle né la componente z dello spin.

Tipo di restituzione

np.ndarray

Questa pagina è stata utile?
Segnala un bug, un errore di battitura o richiedi contenuti su GitHub.