Fermion
qiskit_addon_sqd.fermion
Fonctions pour l'étude des systèmes fermioniques.
SCIState
class SCIState(amplitudes, ci_strs_a, ci_strs_b, norb, nelec)
Bases : object
Les amplitudes et les déterminants décrivant un état quantique.
Paramètres
amplitudes
Type : ndarray
Un tableau où len(ci_strs_a) et = len(ci_strs_b). amplitudes[i][j] est l'amplitude de la paire de déterminants (ci_strs_a[i], ci_strs_b[j]).
ci_strs_a
Type : ndarray
Les déterminants alpha.
ci_strs_b
Type : ndarray
Les déterminants du bêta.
load
nelec
norb
Type : int
Le nombre d'orbitales spatiales.
orbital_occupancies
rdm
save
spin_square
bitstring_matrix_to_ci_strs
bitstring_matrix_to_ci_strs(bitstring_matrix, open_shell=False)
Convertit les chaînes de bits (lignes) d'un site bitstring_matrix en représentations entières des déterminants.
Cette fonction sépare en deux chaque chaîne de bits dans bitstring_matrix , les traduit en représentations entières et les ajoute finalement à leurs listes respectives (spin-up ou spin-down). Ces listes sont triées et éditées par cette fonction.
Paramètres
- bitstring_matrix (ndarray) – Un tableau 2D de représentations
boolde valeurs de bits, chaque ligne représentant une chaîne de bits unique - open_shell (bool) – Un drapeau indiquant si les configurations uniques des moitiés gauche et droite des chaînes de bits doivent être séparées. Si
False, les configurations des moitiés gauche et droite des chaînes de bits sont combinées en un seul ensemble de configurations uniques. Cet ensemble combiné sera renvoyé pour les chaînes de bits de gauche et de droite.
Retours
Un tuple length-2 de listes de déterminants représentant les moitiés droite (spin-up) et gauche (spin-down) des chaînes de bits, respectivement.
Type de retour
diagonalize_fermionic_hamiltonian
diagonalize_fermionic_hamiltonian(one_body_tensor, two_body_tensor, bit_array, samples_per_batch, norb, nelec, *, num_batches=1, energy_tol=1e-08, occupancies_tol=1e-05, max_iterations=100, sci_solver=None, symmetrize_spin=False, max_dim=None, include_configurations=None, initial_occupancies=None, carryover_threshold=0.0001, callback=None, seed=None)
Exécuter l'algorithme de diagonalisation quantique basée sur l'échantillon (SQD).
Paramètres
-
one_body_tensor (ndarray) – Le tenseur à un corps de l'hamiltonien.
-
two_body_tensor (ndarray) – Le tenseur à deux corps de l'hamiltonien.
-
bit_array (BitArray) – Tableau de chaînes de bits échantillonnées. Chaque chaîne de bits doit comporter la partie alpha et la partie bêta concaténées ensemble, la partie alpha étant concaténée du côté droit, comme suit :
[b_N, ..., b_0, a_N, ..., a_0]. -
samples_per_batch (int) – Le nombre de chaînes de bits à inclure dans chaque lot de chaînes de bits sous-échantillonné.
-
norb (int) – Le nombre d'orbitales spatiales.
-
nelec (tuple[int, int]) – Le nombre d'électrons alpha et bêta.
-
num_batches (int) – Le nombre de lots à sous-échantillonner dans chaque itération de récupération de la configuration. Cet argument contrôle indirectement les dimensions des sous-espaces de diagonalisation. Une valeur plus élevée permet d'obtenir un sous-espace de plus grande dimension.
-
energy_tol (float) – Tolérance numérique pour la convergence de l'énergie. Si le changement d'énergie entre les itérations est inférieur à cette valeur, la boucle de récupération de la configuration se termine, si les occupations ont également convergé (voir l'argument
occupancies_tol). -
occupancies_tol (float) – Tolérance numérique pour la convergence des occupations orbitales moyennes. Si la variation maximale en valeur absolue de l'occupation moyenne d'une orbitale entre les itérations est inférieure à cette valeur, la boucle de récupération de la configuration se termine, si l'énergie a également convergé (voir l'argument
energy_tol). -
max_iterations (int) – Limite du nombre d'itérations de récupération de la configuration.
-
sci_solver (Callable[[list[tuple[ndarray, ndarray]], ndarray, ndarray, int, tuple[int, int]], list[SCIResult]] | None) –
Fonction de résolution de l'interaction de la configuration sélectionnée.
Entrées :
- Liste de paires (strings_a, strings_b) de tableaux de chaînes CI de spin-alpha et de chaînes CI de spin-bêta dont le produit cartésien donne la base du sous-espace dans lequel effectuer une diagonalisation. Une liste est transmise pour permettre à la fonction de résolution d'effectuer les diagonalisations en parallèle.
- Tenseur à un corps de l'hamiltonien.
- Tenseur à deux corps de l'hamiltonien.
- Le nombre d'orbitales spatiales.
- Une paire (n_alpha, n_beta) indiquant le nombre d'électrons alpha et bêta.
Résultat : Liste de triplets (énergie, sci_état, occupations), où chaque triplet contient le résultat de la diagonalisation correspondante.
-
symmetrize_spin (bool) – Indique s'il faut toujours fusionner les chaînes de CI de spin alpha et de spin bêta en une seule liste, de sorte que le sous-espace de diagonalisation soit invariant par rapport à l'échange du spin alpha avec le spin bêta.
-
max_dim (int |tuple[int, int] | None) –
Limite de la dimension des secteurs de spin du sous-espace SCI. Il peut s'agir de l'un ou l'autre :
- Un tuple
(max_dim_a, max_dim_b)d'entiers donnant des limites distinctes pour les secteurs spin-alpha et spin-bêta. Dans ce cas, la dimension du sous-espace SCI ne dépassera pasmax_dim_a * max_dim_b. - Un seul entier spécifiant une limite qui sera utilisée pour les secteurs spin-alpha et spin-bêta. Dans ce cas, la dimension du sous-espace SCI ne dépassera pas
max_dim**2. Nonedans ce cas, aucune limite n'est fixée.
Notez que la limite de dimension est fixée sur le(s) secteur(s) de spin, tandis que la dimension totale du sous-espace SCI est le produit des dimensions des secteurs de spin individuels.
- Un tuple
-
include_configurations (list[int] | tuple[list[int], list[int]] | ndarray | None) – Configurations à toujours inclure dans le sous-espace de diagonalisation. Vous pouvez spécifier soit une liste unique de chaînes à spin unique à utiliser pour les deux secteurs de spin, soit une paire (alpha_strings, beta_strings) de listes de chaînes à spin unique, une pour chaque spin.
-
initial_occupancies (tuple[ndarray, ndarray] | None) – Estimation initiale de l'occupation moyenne des orbitales.
-
carryover_threshold (float) – Seuil de report des chaînes de bits ayant un poids important dans l'IC d'une itération de récupération de la configuration à l'autre. Toutes les chaînes de CI à un seul spin associées aux configurations dont le coefficient a une valeur absolue supérieure à ce seuil seront incluses dans le sous-espace de diagonalisation pour l'itération suivante. Un seuil plus petit retiendra plus de configurations, ce qui conduira à un sous-espace plus grand et donc à une diagonalisation plus coûteuse.
-
callback (Callable[[list[SCIResult]], None] | None) – Une fonction de rappel à appeler après chaque itération de récupération de la configuration. La fonction reçoit la sortie de la fonction sci\solver, qui est une liste de triplets (énergie, sci_état, occupations), où chaque triplet contient le résultat d'une diagonalisation.
-
seed (int |Generator | None) – Une graine pour le générateur de nombres pseudo-aléatoires.
Retours
L'estimation de l'énergie et l'état de la SCI avec cette énergie.
Type de retour
SCIRésultat
Cette fonction prend en charge l'exécution collective multiprocessus (SPMD) via MPI, chaque processus étant contrôlé par un seul thread (MPI_THREAD_FUNNELED ou moins). Lorsqu'elle est appelée conjointement par tous les processus, les arguments doivent être identiques d'un processus à l'autre, et la sémantique suivante s'applique :
- Cette étape
sci_solverest la seule opération collective : tous les processus y participent, ce qui permet à une implémentationsci_solverde répartir la charge de travail entre tous les processus. Les étapes restantes de la boucle de configuration-récupération (préparation des chaînes CI, traitement des résultats de diagonalisation et vérification de la convergence) ne font pas l'objet d'une implémentation distribuée et sont effectuées uniquement par le processus de contrôle. - La fonction
callback, si elle est fournie, n'est appelée que sur le processus de contrôle. - La valeur renvoyée est la même dans chaque processus : le résultat final est diffusé depuis le processus de contrôle vers tous les rangs.
Le fait que le programme appelant doive être lancé sous MPI dépend de la version sci_solver utilisée. Un « collectif » sci_solver, tel que décrit ci-dessus, suppose que le programme s'exécute de manière collective sur l'ensemble des processus. D'autres implémentations exigent que le programme appelant s'exécute en tant que processus unique, en dehors de tout environnement MPI/SPMD. Certaines de ces implémentations peuvent gérer leur propre parallélisme en interne, par exemple en se lançant elles-mêmes mpirun . La valeur par défaut n'est sci_solver pas distribuée et relève de cette dernière catégorie.
Une implémentation sci_solver collective n'est pas tenue de déclencher une exception au niveau d'un seul processus lorsqu'elle rencontre une erreur; elle peut au contraire suivre une sémantique « fail-stop » pour l'ensemble du contexte d'exécution, en interrompant collectivement tous les processus. (Ceci décrit ce qu'une telle implémentation est autorisée à faire, et non le comportement par défaut sci_solver.)
enlarge_batch_from_transitions
enlarge_batch_from_transitions(bitstring_matrix, transition_operators)
Appliquer l'ensemble des opérateurs de transition aux configurations représentées dans bitstring_matrix.
Paramètres
- bitstring_matrix (ndarray) – Un tableau 2D de représentations
boolde valeurs binaires, de sorte que chaque ligne représente une chaîne de bits unique. - transition_operators (ndarray) – Un tableau 1D ou 2D
I,+,-, etnreprésentant l'action des opérateurs d'identité, de création, d'annihilation ou de nombre. Chaque ligne représente un opérateur de transition.
Retours
Matrice de bitstring représentant l'ensemble augmenté des configurations électroniques après application des opérateurs d'excitation.
Type de retour
solve_fermion
solve_fermion(bitstring_matrix, /, hcore, eri, *, open_shell=False, spin_sq=None, shift=0.1, **kwargs)
Approximation de l'état fondamental à partir d'intégrales moléculaires et d'un ensemble de configurations électroniques.
Paramètres
-
bitstring_matrix (tuple[ndarray, ndarray] | ndarray) –
Un ensemble de configurations définissant le sous-espace sur lequel l'hamiltonien sera projeté et diagonalisé.
Elle peut être spécifiée de deux manières :
- Matrice de chaînes de bits : Une matrice 2D
numpy.ndarrayde valeursbool, où chaque ligne représente une chaîne de bits. Les configurations de spin-up doivent occuper les indices de colonne(N, N/2], et les configurations de spin-down doivent occuper les indices de colonne(N/2, 0], oùNest le nombre de qubits. - Chaînes CI : Un tuple de deux séquences contenant des représentations entières des déterminants de spin-up et de spin-down, respectivement. Le format attendu est
([a_str_0, ..., a_str_N], [b_str_0, ..., b_str_M]).
- Matrice de chaînes de bits : Une matrice 2D
-
hcore (ndarray) – Matrice de l'hamiltonien central représentant les intégrales d'un seul électron
-
eri (ndarray) – Intégrales de répulsion électronique représentant des intégrales à deux électrons
-
open_shell (bool) – Un drapeau indiquant si les configurations des moitiés gauche et droite des chaînes de bits doivent être séparées. Si
False, les chaînes CI des moitiés gauche et droite des chaînes de bits sont combinées en un seul ensemble de configurations uniques et utilisées pour les sous-espaces alpha et bêta. -
spin_sq (float | None) – Valeur cible du spin total au carré pour l'état fondamental, . Si
None, aucun spin ne sera imposé. -
shift (float) – Changement de niveau pour les états ayant un spin différent.
-
**kwargs - Arguments de mot-clé à passer à pyscf.fci.selected_ci.kernel_fixed_space
Retours
- Énergie minimale issue du calcul de l'ICS
- L'état fondamental du SCI
- Tuple contenant l'occupation des orbitales pour les orbitales de spin-up et de spin-down. Formaté comme :
(array([occ_a_0, ..., occ_a_N]), array([occ_b_0, ..., occ_b_N])) - Valeur d'espérance du spin-carré
Type de retour
tuple[ float, SCIState, tuple [*ndarray*, ndarray ], float ]
solve_sci
solve_sci(ci_strings, one_body_tensor, two_body_tensor, norb, nelec, *, spin_sq=None, **kwargs)
Diagonaliser l'hamiltonien dans le sous-espace défini par les chaînes CI.
Paramètres
-
ci_strings (tuple[ndarray, ndarray]) – Paire (strings_a, strings_b) de tableaux de chaînes CI de spin-alpha et de chaînes CI de spin-bêta dont le produit cartésien donne la base du sous-espace dans lequel effectuer une diagonalisation.
-
one_body_tensor (ndarray) – Le tenseur à un corps de l'hamiltonien.
-
two_body_tensor (ndarray) – Le tenseur à deux corps de l'hamiltonien.
-
norb (int) – Le nombre d'orbitales spatiales.
-
nelec (tuple[int, int]) – Le nombre d'électrons alpha et bêta.
-
spin_sq (float | None) – Valeur cible du spin total au carré pour l'état fondamental. Si
None, aucun essorage ne sera imposé. -
**kwargs -
Arguments du mot-clé à transmettre à pyscf.fci.selected_ci.kernel_fixed_space
Retours
Le résultat de la diagonalisation.
Type de retour
SCIRésultat
solve_sci_batch
solve_sci_batch(ci_strings, one_body_tensor, two_body_tensor, norb, nelec, *, spin_sq=None, **kwargs)
Diagonaliser l'hamiltonien dans des sous-espaces.
Paramètres
-
ci_strings (list[tuple[ndarray, ndarray]]) – Liste de paires (strings_a, strings_b) de tableaux de chaînes CI de spin-alpha et de chaînes CI de spin-bêta dont le produit cartésien donne la base du sous-espace dans lequel effectuer une diagonalisation.
-
one_body_tensor (ndarray) – Le tenseur à un corps de l'hamiltonien.
-
two_body_tensor (ndarray) – Le tenseur à deux corps de l'hamiltonien.
-
norb (int) – Le nombre d'orbitales spatiales.
-
nelec (tuple[int, int]) – Le nombre d'électrons alpha et bêta.
-
spin_sq (float | None) – Valeur cible du spin total au carré pour l'état fondamental. Si
None, aucun essorage ne sera imposé. -
**kwargs -
Arguments du mot-clé à transmettre à pyscf.fci.selected_ci.kernel_fixed_space
Retours
Les résultats des diagonalisations dans les sous-espaces donnés par ci_strings.
Type de retour
liste [SCIResult]
optimize_orbitals
optimize_orbitals(bitstring_matrix, /, hcore, eri, k_flat, *, open_shell=False, spin_sq=0.0, num_iters=10, num_steps_grad=10000, learning_rate=0.01, **kwargs)
Optimiser les orbitales pour produire un état fondamental minimal.
Le processus implique une itération en trois étapes :
Pour num_iters itérations :
- Faites pivoter les intégrales par rapport aux paramètres,
k_flat - Diagonaliser et approximer l'énergie de l'état fondamental et les amplitudes de la fonction d'onde
- Optimiser
k_flaten utilisant la descente de gradient et les amplitudes de la fonction d'onde trouvées à l'étape 2
Voir Sec. II A 4 pour une discussion plus détaillée sur cette technique d'optimisation orbitale.
La fonction qiskit_addon_sqd.fermion.optimize_orbitals() est obsolète depuis la version 0.13.0 de qiskit-addon-sqd. Il ne sera supprimé pas avant le v0.15.0. L'optimisation orbitale est désormais prise en charge par le package ffsim. Consultez la page /addons/qiskit-addon-sqd/guides /opt imize-orbitals pour obtenir des instructions sur la manière d’optimiser la base hamiltonienne avec ffsim.
Paramètres
-
bitstring_matrix (tuple[ndarray, ndarray] | ndarray) –
Un ensemble de configurations définissant le sous-espace sur lequel l'hamiltonien sera projeté et diagonalisé.
Elle peut être spécifiée de deux manières :
- Matrice de chaînes de bits : Une matrice 2D
numpy.ndarrayde valeursbool, où chaque ligne représente une chaîne de bits. Les configurations de spin-up doivent occuper les indices de colonne(N, N/2], et les configurations de spin-down doivent occuper les indices de colonne(N/2, 0], oùNest le nombre de qubits. - Chaînes CI : Un tuple de deux séquences contenant des représentations entières des déterminants de spin-up et de spin-down, respectivement. Le format attendu est
([a_str_0, ..., a_str_N], [b_str_0, ..., b_str_M]).
- Matrice de chaînes de bits : Une matrice 2D
-
hcore (ndarray) – Matrice de l'hamiltonien central représentant les intégrales d'un seul électron
-
eri (ndarray) – Intégrales de répulsion électronique représentant des intégrales à deux électrons
-
k_flat (ndarray) – 1D définissant la transformation orbitale,
K. Le tableau doit spécifier le triangle supérieur de l'opérateur de la transformation antisymétrique dans l'ordre des lignes majeures, à l'exclusion de la diagonale. -
open_shell (bool) – Un drapeau indiquant si les configurations des moitiés gauche et droite des chaînes de bits doivent être séparées. Si
False, les chaînes CI des moitiés gauche et droite des chaînes de bits sont combinées en un seul ensemble de configurations uniques et utilisées pour les sous-espaces alpha et bêta. -
spin_sq (float) – Valeur cible du spin total au carré pour l'état fondamental
-
num_iters (int) – Le nombre d'itérations de l'optimisation orbitale à effectuer
-
num_steps_grad (int) – Le nombre de pas de descente de gradient à effectuer lors de chaque itération d'optimisation
-
learning_rate (float) – Le taux d'apprentissage à utiliser lors de la descente de gradient
-
**kwargs -
Arguments du mot-clé à transmettre à pyscf.fci.selected_ci.kernel_fixed_space
Retours
- L'énergie de l'état fondamental trouvée lors de la dernière itération d'optimisation
- Un réseau optimisé 1D définissant la transformation orbitale
- Tuple contenant l'occupation des orbitales pour les orbitales de spin-up et de spin-down. Formaté comme :
(array([occ_a_0, ..., occ_a_N]), array([occ_b_0, ..., occ_b_N]))
Type de retour
rotate_integrals
rotate_integrals(hcore, eri, k_flat)
Effectuez une transformation de similitude sur les intégrales.
La transformation est décrite comme suit :
Pour plus d'informations sur la façon dont et sont générés à partir de k_flat et appliqués aux intégrales à un et deux corps, voir Sec. II A 4.
La fonction qiskit_addon_sqd.fermion.rotate_integrals() est obsolète depuis la version 0.13.0 de qiskit-addon-sqd. Il ne sera supprimé pas avant le v0.15.0. L'optimisation orbitale est désormais prise en charge par le package ffsim. Consultez la page /addons/qiskit-addon-sqd/guides /opt imize-orbitals pour obtenir des instructions sur la manière d’optimiser la base hamiltonienne avec ffsim.
Paramètres
- hcore (ndarray) – Matrice de l'hamiltonien central représentant les intégrales d'un seul électron
- eri (ndarray) – Intégrales de répulsion électronique représentant des intégrales à deux électrons
- k_flat (ndarray) – 1D définissant la transformation orbitale,
K. Le tableau doit spécifier le triangle supérieur de l'opérateur de la transformation antisymétrique dans l'ordre des lignes majeures, à l'exclusion de la diagonale.
Retours
- La matrice hamiltonienne du noyau tourné
- La matrice ERI tournée
Type de retour