Skip to main content
IBM Quantum Platform

Weiterentwicklung

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

Basen: FermionicGate

Implementiert die zeitliche Entwicklung eines Operators.

Für ein fermionisches HHoperator und eine Entwicklung tttime implementiert dieses Gatter die unitäre

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

Damit UU einheitlich ist, muss HH hermitisch sein. Dies liegt in der Verantwortung des Anrufers und wird nicht überprüft.

Anmerkung

Die Aufteilung dieses Gatters im Fermionenraum (in eine Schaltung aus kleineren Gattern Evolution ) ist optional, und genau dies wird durch das Attribut synthesis gesteuert. Das Gatter kann auch direkt an die Fermion-zu-Qubit-Stufe übergeben werden, die es vollständig abbildet und synthetisiert, unabhängig davon, wie viele Terme es operator enthält. Siehe synthesis.

Wenn es zerlegt wird (beispielsweise durch ) decompose(), bestimmt synthesis , wie dies geschieht. Standardmäßig ist die Einstellung FermionicLieTrotter, wodurch die Entwicklung gruppenweise aufgeteilt wird, wenn dem zugewiesen groups operator ist (siehe „Gruppenoperatorterme: Verwendung der Operatorstruktur“ ), und ansonsten termweise (nur exakt, wenn die einzelnen Faktoren miteinander kommutieren). Der Transpilationsprozess kann die Zerlegung weiter verändern; QDriftTrotterizationso wird beispielsweise die Entwicklung durch eine zufällige Auswahl ihrer Terme ersetzt. Die von ihm erzeugten Gatter sind atomic, daher gilt für sie synthesis nicht mehr.

Anmerkung

Der Simulationspfad des Zustandsvektors verläuft nicht durch synthesis: Er potenziert das Ganze exakt operator . Die Simulation dieses Gatters führt daher zu keinem Trotter-Fehler, während dies bei einer zerlegten Schaltung im Allgemeinen der Fall ist.

Die Initialisierung einer Instanz dieses Gatters kann mit den unten aufgeführten Argumenten erfolgen.

Parameter

  • num_modes (int) – die Anzahl der fermionischen Moden, auf die dieses Gatter einwirkt.
  • operator (OperatorTrait) – der hermitische Operator HH, unter dem die betroffenen Fermionenmoden zeitlich weiterentwickelt werden sollen.
  • time (float) – Die Evolutionszeit tt wird als Exponent von e−itHe^{-i t H} eingegeben. Ein negativer Wert bewirkt eine Rückwärtsentwicklung in der Zeit.
  • synthesis (FermionicEvolutionSynthesis | None) – die Fermion-zu-Fermion-Synthese-Methode, mit der dieses Gatter zerlegt werden kann, sofern es überhaupt zerlegt wird. Wenn None (Standardeinstellung), wird eine Instanz FermionicLieTrotter verwendet.
  • atomic (bool) – ob dieses Tor ein vollständig zerlegter Faktor ist, der im fermionischen Raum nicht weiter zerlegt werden darf. Siehe atomic.

Attribute

atomic

Ob dieses Gatter ein Faktor ist, der nicht weiter zerlegt werden darf.

Ein „A“ FermionicEvolutionSynthesis kennzeichnet die von ihm emittierten Faktoren als atomar, da sie das Ergebnis der von ihm gewählten Aufspaltung sind: Würde man sie erneut aufspalten, würde diese Wahl zunichte gemacht. Die Entwicklung eines einzelnen Operatorterms ist atomar, und zwar aus dem noch gewichtigeren Grund, dass es nichts mehr gibt, was man noch aufspalten könnte.

Ein Atomgatter ist überhaupt nicht definiert, daher decompose() wird es einfach beibehalten, anstatt es näher zu erläutern. Auf der Ebene der Fermionen und Qubits, wo ein Faktor in konkrete Operationen umgesetzt wird, erfolgt die Abbildung und Synthese nach wie vor wie gewohnt.

Dies ist schreibgeschützt, aus demselben Grund wie synthesis.

synthesis

Das Verfahren der Fermion-zu-Fermion-Synthese, mit dem dieses Gatter zerlegt wird.

Dies ist schreibgeschützt: Die Definition des Gatters wird einmal erstellt und anschließend zwischengespeichert, sodass eine nachträglich zugewiesene Synthesemethode keine Wirkung entfalten könnte. Übergebe es stattdessen an den Konstruktor.

operator

Der Operator, unter dem die angeregten Fermionenmoden zeitlich entwickelt werden sollen.


Methoden

inverse

inverse(annotated=False)

Gibt die Inverse dieses Gatters zurück: „ e+itHe^{+i t H} “.

Parameter

annotated (bool) – ignoriert. Die Inverse dieses Gatters ist ein anderes Evolution, daher muss es niemals ein sein AnnotatedOperation.

Rückgabe

Ein Evolution Gatter, das denselben Operator für die negierte Zeit auswertet.

Rückgabetyp

Evolution

Protokollmethoden

_apply_unitary_placed_

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

Gilt exp(-i * time * operator) nach der Umbenennung des Operators in globale Modi.

Der Operator wird auf seine globalen Moden umbenannt, in ein umgewandelt und ffsim.FermionOperator an übergeben ffsim.linear_operator(), dann über auf den Vektor angewendet scipy.sparse.linalg.expm_multiply(). Ein Operator, der noch kein ist, FermionOperator wird zunächst über das Protokoll SupportsFermionOperator konvertiert, sodass jeder Operatortyp dieses Pakets weiterentwickelt werden kann.

Parameter

  • vec (np.ndarray) – der Zustandsvektor, auf den die Aktion angewendet werden soll.
  • norb (int) – die Anzahl der räumlichen Orbitalen des globalen Zustandsvektors.
  • nelec (int |tuple[int, int]) – entweder eine einzelne ganze Zahl für ein spinloses System oder ein Ganzzahlpaar, das die Anzahlen der Alpha- und Beta-Fermionen angibt. Eine ganze Zahl wählt die Interpretation ohne Spin (die norb Moden des Operators sind Alpha-Orbitale); ein Paar wählt die (orb, spin) Interpretation mit Spin der Moden 2 * norb des Operators.
  • copy (bool) – ob der Vektor vor der Bearbeitung kopiert werden soll.
  • freg_indices (list[int]) – die absoluten (globalen) Modenindizes, auf die die lokalen Moden dieses Gates abgebildet werden. Der Operator wird vor seiner Anwendung von seinen lokalen Moden auf diese globalen Moden umbenannt, was dem Synthese-Durchlauf des Transpilers entspricht.

Rückgabe

Der transformierte Vektor.

Erhöhungen

  • MissingOptionalLibraryError – falls ffsim nicht installiert ist.
  • ValueError – wenn der Operator den Sektor (norb, nelec) nicht bewahrt. Die Entwicklung unter liefert exp(-i * time * operator) nur dann einen unitären Operator, wenn den Sektor auf sich selbst operator abbildet; daher lehnt ffsim einen Operator ab, der weder die Teilchenzahl noch die z-Komponente des Spins bewahrt.

Rückgabetyp

np.ndarray

War diese Seite hilfreich?
Melden Sie auf GitHub einen Fehler, einen Tippfehler oder fordern Sie Inhalte an.