Skip to main content
IBM Quantum Platform

UCJ

class UCJ(ucj_op)

Bases : FermionicGate

Met en œuvre l'approche du cluster unitaire (local) de Jastrow ((L)UCJ).

Un opérateur de Jastrow de type « cluster unitaire » se présente sous la forme suivante :

(∏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}

où chaque Uk\mathcal{U}_k est un OrbitalRotation, et chaque Jk\mathcal{J}_k est un opérateur de Coulomb diagonal

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

et Ufinal\mathcal{U}_\text{final} correspond à une rotation orbitale finale facultative. Le nombre de termes LL correspond au nombre de répétitions de l'ansatz.

L'opérateur lui-même est généré par ffsim, et cette porte le transforme en un FermionicCircuit. Cette répartition des tâches est délibérée : ffsim gère les aspects mathématiques de l’ansatz (double factorisation des amplitudes d’ t2t_2, variante compressée, regroupement des vecteurs de paramètres piloté par un optimiseur variationnel), tandis que cette porte exprime le résultat sous forme de modes fermioniques afin que le transpileur puisse le convertir via n’importe quel codage « fermion-vers-qubit ». C'est le fait de transmettre un opérateur ffsim tel quel qui garantit la cohérence entre les deux; voir le guide des relations ffsim.

Accepte l'un des trois opérateurs UCJ de ffsim, dont le type détermine la variante de spin et le nombre de modes sur lesquels cette porte agit :

  • UCJOpSpinBalanced agit sur les modes de spin 2 * norb par blocs, avec une rotation orbitale commune aux deux secteurs de spin et des matrices de Coulomb diagonales [alpha-alpha, alpha-beta] (bêta-bêta réutilise alpha-alpha, bêta-alpha réutilise alpha-bêta).
  • UCJOpSpinUnbalanced agit sur les modes de spin 2 * norb en bloc, avec des rotations [alpha, beta] et des matrices [alpha-alpha, alpha-beta, beta-beta] indépendantes.
  • UCJOpSpinless agit sur les modes sans norb spin.
Remarque

La théorie de ffsim UCJOpSpinless s’applique également à un secteur à spin, où ses tenseurs agissent sur les deux secteurs de spin sans terme de spin croisé. La largeur d'une porte doit être définie lors de sa conception; c'est pourquoi cette porte interprète toujours ce type comme un registre à norbmode unique. Construisez la lecture à deux registres sous la forme d'un UCJOpSpinBalanced dont le bloc alpha-bêta est égal à zéro, ce qui revient au même opérateur.

Remarque

ffsim ne prend pas en charge Windows (en raison de sa dépendance inconditionnelle à l' PySCF ), ce qui rend l'option « extra ffsim (pip install "qiskit-fermions[ffsim]") » obligatoire pour cette configuration et la rend indisponible sous Windows. Utilisez WSL sous Windows.

Attention

Il s'agit d'un prototype de développement précoce. Attention aux modifications de l'interface pouvant survenir sans préavis pendant la phase de développement préliminaire de ce logiciel.

>>> 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)

L'initialisation d'une instance de cette porte peut être effectuée à l'aide de l'argument indiqué ci-dessous.

Paramètres

ucj_op (Any) – l'opérateur UCJ de ffsim à partir duquel construire le circuit : soit, soit UCJOpSpinBalanced, UCJOpSpinUnbalanced soit UCJOpSpinless. Son type détermine la variante de spin et le nombre de modes sur lesquels cette porte agit (voir la chaîne de documentation de la classe).

Augmentations

  • MissingOptionalLibraryError – si n'est ffsim pas installé.
  • TypeError – si n'est ucj_op pas l'un des trois types d'opérateurs UCJ de ffsim.

Attributs

n_reps

Le nombre de répétitions de l'ansatz.

norb

Le nombre d'orbitales spatiales.

ucj_op

L'opérateur UCJ de ffsim à partir duquel cette porte construit son circuit.

Méthodes protocolaires

_apply_unitary_placed_

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

Applique l'ansatz après avoir superposé ses modes aux modes globaux du vecteur.

Cela permet de construire la définition de la porte (les rotations orbitales par répétition et les évolutions de Coulomb diagonales) et de l'appliquer à vec, le circuit de définition étant placé sur les modes globaux freg_indices (chacune de ses instructions étant réétiquetée sur les modes absolus correspondants). Voir _define() pour connaître la séquence exacte des portes.

Paramètres

  • vec (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 spin bêta.
  • 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.

Retours

Le vecteur transformé.

Type de retour

ndarray

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