Skip to main content
IBM Quantum Platform

UCJ

class UCJ(ucj_op)

Basen: FermionicGate

Implementiert den (lokalen) unitaren Cluster-Jastrow-Ansatz ((L)UCJ).

Ein unitärer Jastrow-Operator eines Clusters hat die Form

(∏k=1LUk eiJk Uk†)Ufinal\left(\prod_{k=1}^{L} \mathcal{U}_k\, e^{i \mathcal{J}_k}\, \mathcal{U}_k^\dagger\right) \mathcal{U}_\text{final}

wobei jedes Uk\mathcal{U}_k ein ist OrbitalRotationund jedes Jk\mathcal{J}_k ein diagonaler Coulomb-Operator ist

J=12∑ij,στJijστ niσ njτ,\mathcal{J} = \frac12 \sum_{ij,\sigma\tau} \mathbf{J}^{\sigma\tau}_{ij}\, n_{i\sigma}\, n_{j\tau},

und Ufinal\mathcal{U}_\text{final} ist eine optionale abschließende Drehung um die Umlaufbahn. Die Anzahl der Terme LL entspricht der Anzahl der Ansatzwiederholungen.

Der Operator selbst wird von ffsim erstellt, und dieses Gatter wandelt ihn in ein FermionicCircuit. um. Diese Arbeitsteilung ist bewusst gewählt: ffsim ist für die mathematischen Grundlagen zuständig (doppelte Faktorisierung der „ t2t_2 “-Amplituden, die komprimierte Variante, die Parametervektor-Packung, die von einem Variationsoptimierer gesteuert wird), während dieses Gate das Ergebnis als fermionische Moden ausdrückt, sodass der Transpiler es durch eine beliebige Fermion-zu-Qubit-Kodierung umsetzen kann. Die unveränderte Weitergabe eines ffsim-Operators sorgt dafür, dass beide konsistent bleiben; siehe dazu den Leitfaden zu ffsim-Beziehungen.

Akzeptiert einen der drei UCJ-Operatoren von ffsim, deren Typ die Spinvariante und die Anzahl der Moden festlegt, auf die dieses Gatter wirkt:

  • UCJOpSpinBalanced wirkt auf 2 * norb Block-Spin-Moden, wobei sich beide Spinsektoren eine Orbitalrotation teilen und die Coulomb-Matrizen diagonal [alpha-alpha, alpha-beta] sind (β-β verwendet α-α wieder, β-α verwendet α-β wieder).
  • UCJOpSpinUnbalanced wirkt auf 2 * norb Block-Spin-Moden mit unabhängigen Rotationen [alpha, beta] und Matrizen [alpha-alpha, alpha-beta, beta-beta] .
  • UCJOpSpinless wirkt auf spinlose norb Moden ein.
Anmerkung

ffsim UCJOpSpinless gilt auch für einen Spin-Sektor, in dem seine Tensoren auf beide Spin-Sektoren wirken, ohne dass ein Cross-Spin-Term auftritt. Die Breite eines Gatters muss bei dessen Erstellung festgelegt werden, daher liest dieses Gatter diesen Typ immer als norbSingle-Mode-Register aus. Bauen Sie die Zwei-Register-Leseoperation als einen Operator auf, dessen UCJOpSpinBalanced Alpha-Beta-Block Null ist; dies ist derselbe Operator.

Anmerkung

ffsim unterstützt Windows nicht (aufgrund seiner bedingungslosen Abhängigkeit von „ PySCF “), daher erfordert dieses Gate das zusätzliche ffsim „(pip install "qiskit-fermions[ffsim]")“ und ist dort nicht verfügbar. Verwenden Sie WSL unter Windows.

Vorsicht

Dies ist ein früher Entwicklungsprototyp. Bitte beachten Sie, dass es während der Entwicklungsphase vor der Veröffentlichung dieses Pakets ohne Vorankündigung zu Änderungen an der Benutzeroberfläche kommen kann.

>>> import ffsim
>>> from qiskit_fermions.circuit.library import UCJ
>>> ucj_op = ffsim.random.random_ucj_op_spin_balanced(3, n_reps=1, seed=1234)
>>> gate = UCJ(ucj_op)
>>> gate.norb, gate.num_modes, gate.n_reps
(3, 6, 1)

Die Initialisierung einer Instanz dieses Gatters kann mit dem unten aufgeführten Argument erfolgen.

Parameter

ucj_op (Any) – den ffsim-UCJ-Operator, aus dem die Schaltung aufgebaut werden soll: entweder UCJOpSpinBalanced, oder UCJOpSpinUnbalanced UCJOpSpinless. Sein Typ bestimmt die Spin-Variante und die Anzahl der Moden, auf die dieses Gatter wirkt (siehe die Docstring der Klasse).

Erhöhungen

  • MissingOptionalLibraryError – falls nicht installiert ffsim ist.
  • TypeError – wenn nicht zu den drei UCJ-Operatortypen von ffsim gehört ucj_op .

Attribute

n_reps

Die Anzahl der Wiederholungen des Ansatzes.

norb

Die Anzahl der Raumorbitale.

ucj_op

Der ffsim-UCJ-Operator, auf dem die Schaltung dieses Gatters basiert.

Protokollmethoden

_apply_unitary_placed_

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

Wendet den Ansatz an, nachdem dessen Moden auf die globalen Moden des Vektors abgebildet wurden.

Dadurch wird die Definition des Gatters erstellt (die Orbitalrotationen pro Wiederholung und die diagonalen Coulomb-Entwicklungen) und auf angewendet vec, wobei die Definitionsschaltung auf die globalen Moden gelegt wird ( freg_indices jede ihrer Anweisungen wird auf die entsprechenden absoluten Moden umbenannt). Die genaue Gate-Sequenz finden Sie _define() unter.

Parameter

  • vec (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 spinfreies System oder ein Ganzzahlpaar, das die Anzahlen der Alpha- und Beta-Spin-Fermionen angibt.
  • 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 Gitters abgebildet werden.

Rückgabe

Der transformierte Vektor.

Rückgabetyp

ndarray

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