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 :
où chaque est un OrbitalRotation, et chaque est un opérateur de Coulomb diagonal
et correspond à une rotation orbitale finale facultative. Le nombre de termes 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’ , 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 :
UCJOpSpinBalancedagit sur les modes de spin2 * norbpar 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).UCJOpSpinUnbalancedagit sur les modes de spin2 * norben bloc, avec des rotations[alpha, beta]et des matrices[alpha-alpha, alpha-beta, beta-beta]indépendantes.UCJOpSpinlessagit sur les modes sansnorbspin.
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.
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.
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
ffsimpas installé. - TypeError – si n'est
ucj_oppas 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