Fermione
qiskit_addon_sqd.fermion
Funzioni per lo studio dei sistemi fermionici.
SCIStato
class SCIState(amplitudes, ci_strs_a, ci_strs_b, norb, nelec)
Basi: object
Le ampiezze e i determinanti che descrivono uno stato quantistico.
Parametri
amplitudes
Tipo: ndarray
Una matrice dove len(ci_strs_a) e = len(ci_strs_b). amplitudes[i][j] è l'ampiezza della coppia di determinanti (ci_strs_a[i], ci_strs_b[j]).
ci_strs_a
Tipo: ndarray
I determinanti alfa.
ci_strs_b
Tipo: ndarray
I determinanti beta.
load
nelec
norb
Tipo: int
Il numero di orbitali spaziali.
orbital_occupancies
rdm
rdm(rank=1, spin_summed=False)
Calcolo della matrice di densità ridotta.
Parametri
Tipo di restituzione
save
spin_square
bitstring_matrix_to_ci_strs
bitstring_matrix_to_ci_strs(bitstring_matrix, open_shell=False)
Converte le stringhe di bit (righe) di bitstring_matrix in rappresentazioni intere dei determinanti.
Questa funzione separa a metà ogni bitstring in bitstring_matrix , li traduce in rappresentazioni intere e infine li aggiunge alle rispettive liste (spin-up o spin-down). Questi elenchi vengono ordinati e inviati da questa funzione.
Parametri
- bitstring_matrix (ndarray) – Un array 2D di rappresentazioni
booldi valori di bit, in modo che ogni riga rappresenti una singola stringa di bit - open_shell (bool) – Un flag che specifica se le configurazioni uniche delle metà sinistra e destra delle bitstring devono essere tenute separate. Se
False, le configurazioni delle metà sinistra e destra delle stringhe di bit vengono combinate in un unico insieme di configurazioni. L'insieme combinato verrà restituito sia per le bitstringhe di sinistra che per quelle di destra.
Risultati
Una tupla length-2 di liste di determinanti che rappresentano rispettivamente le metà destra (spin-up) e sinistra (spin-down) delle stringhe di bit.
Tipo di restituzione
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)
Eseguire l'algoritmo di diagonalizzazione quantistica basata su campioni (SQD).
Parametri
-
one_body_tensor (ndarray) – Il tensore unicorporeo dell'Hamiltoniana.
-
two_body_tensor (ndarray) – Il tensore a due corpi dell'hamiltoniana.
-
bit_array (BitArray) – Array di bitstringhe campionate. Ogni bitstring dovrebbe avere sia la parte alfa che la parte beta concatenate insieme, con la parte alfa concatenata sul lato destro, in questo modo:
[b_N, ..., b_0, a_N, ..., a_0]. -
samples_per_batch (int) – Il numero di bitstring da includere in ogni lotto di bitstring sottocampionato.
-
norb (int) – Il numero di orbitali spaziali.
-
nelec (tuple[int, int]) – Il numero di elettroni alfa e beta.
-
num_batches (int) – Il numero di lotti da sotto-campionare in ogni iterazione di recupero della configurazione. Questo argomento controlla indirettamente le dimensioni dei sottospazi di diagonalizzazione. Un valore più alto produce dimensioni del sottospazio maggiori.
-
energy_tol (float) – Tolleranza numerica per la convergenza dell'energia. Se la variazione di energia tra un'iterazione e l'altra è inferiore a questo valore, il ciclo di recupero della configurazione uscirà, se anche le occupazioni sono convergenti (si veda l'argomento
occupancies_tol). -
occupancies_tol (float) – Tolleranza numerica per la convergenza delle occupazioni orbitali medie. Se la variazione massima in valore assoluto dell'occupazione media di un orbitale tra un'iterazione e l'altra è inferiore a questo valore, il ciclo di recupero della configurazione uscirà, se anche l'energia è convergente (si veda l'argomento
energy_tol). -
max_iterations (int) – Limite al numero di iterazioni di ripristino della configurazione.
-
sci_solver (Callable[[list[tuple[ndarray, ndarray]], ndarray, ndarray, int, tuple[int, int]], list[SCIResult]] | None) –
Funzione del solutore di interazione della configurazione selezionata.
inputs:
- Elenco di coppie (stringhe_a, stringhe_b) di array di stringhe CI di spin-alfa e stringhe CI di spin-beta il cui prodotto cartesiano fornisce la base del sottospazio in cui eseguire la diagonalizzazione. Viene passato un elenco per consentire alla funzione solutore di eseguire le diagonalizzazioni in parallelo.
- Tensore unicorporeo dell'hamiltoniana.
- Tensore a due corpi dell'Hamiltoniana.
- Il numero di orbitali spaziali.
- Una coppia (n_alfa, n_beta) che indica il numero di elettroni alfa e beta.
Output: Elenco di triplette (energia, stato sciistico, occupazioni), dove ogni triplette contiene il risultato della diagonalizzazione corrispondente.
-
symmetrize_spin (bool) – Se unire sempre le stringhe CI spin-alfa e spin-beta in un'unica lista, in modo che il sottospazio di diagonalizzazione sia invariante rispetto allo scambio di spin alfa con spin beta.
-
max_dim (int |tuple[int, int] | None) –
Limite sulla dimensione dei settori di spin del sottospazio SCI. Può essere una delle due cose:
- Una tupla
(max_dim_a, max_dim_b)di numeri interi che danno limiti separati per i settori spin-alfa e spin-beta. In questo caso, la dimensione del sottospazio SCI non supereràmax_dim_a * max_dim_b. - Un singolo numero intero che specifica un limite da utilizzare per i settori spin-alfa e spin-beta. In questo caso, la dimensione del sottospazio SCI non supererà
max_dim**2. None, nel qual caso non viene fissato alcun limite.
Si noti che il limite di dimensione è fissato sui settori di spin, mentre la dimensione completa del sottospazio SCI è il prodotto delle dimensioni dei singoli settori di spin.
- Una tupla
-
include_configurations (list[int] | tuple[list[int], list[int]] | ndarray | None) – Configurazioni da includere sempre nel sottospazio di diagonalizzazione. È possibile specificare un singolo elenco di stringhe a spin singolo da utilizzare per entrambi i settori di spin, oppure una coppia (alpha_strings, beta_strings) di elenchi di stringhe a spin singolo, uno per ogni spin.
-
initial_occupancies (tuple[ndarray, ndarray] | None) – Ipotesi iniziale per le occupazioni medie degli orbitali.
-
carryover_threshold (float) – Soglia per il riporto di bitstring con peso CI elevato da un'iterazione di recupero della configurazione alla successiva. Tutte le stringhe CI single-spin associate a configurazioni il cui coefficiente ha un valore assoluto superiore a questa soglia saranno incluse nel sottospazio di diagonalizzazione per l'iterazione successiva. Una soglia più piccola manterrà un maggior numero di configurazioni, determinando un sottospazio più ampio e quindi una diagonalizzazione più costosa.
-
callback (Callable[[list[SCIResult]], None] | None) – Una funzione di callback da richiamare dopo ogni iterazione di recupero della configurazione. Alla funzione verrà passato l'output della funzione sci_solver, che è un elenco di triplette (energia, sci_stato, occupazioni), dove ogni triplette contiene il risultato di una diagonalizzazione.
-
seed (int |Generator | None) – Un seme per il generatore di numeri pseudocasuali.
Risultati
La stima dell'energia e lo stato del SIC con tale energia.
Tipo di restituzione
SCIResultato
Questa funzione supporta l'esecuzione collettiva multiprocesso (SPMD) tramite MPI, con un singolo thread che controlla ciascun processo (MPI_THREAD_FUNNELED o un numero inferiore). Quando viene richiamata collettivamente da tutti i processi, gli argomenti devono coincidere tra i vari processi e si applicano le seguenti regole semantiche:
- Il passo
sci_solverè l’unica operazione collettiva: tutti i processi vi partecipano, quindi un’implementazionesci_solverpuò distribuire il lavoro tra tutti i processi. Le fasi restanti del ciclo di configurazione-recupero (preparazione delle stringhe CI, elaborazione dei risultati della diagonalizzazione e verifica della convergenza) non hanno un'implementazione distribuita e vengono eseguite esclusivamente dal processo di controllo. - Il
callback, se presente, viene richiamato solo sul processo di controllo. - Il valore restituito è lo stesso in ogni processo: il risultato finale viene trasmesso dal processo di controllo a tutti i rank.
Il fatto che il programma chiamante debba essere avviato in ambiente MPI dipende dall’ambiente in sci_solver uso. Un collettivo sci_solver, come descritto sopra, prevede che il programma venga eseguito collettivamente su tutti i processi. Altre implementazioni richiedono che il programma chiamante venga eseguito come singolo processo, al di fuori di qualsiasi ambiente MPI/SPMD. Alcune di queste implementazioni potrebbero gestire internamente il proprio parallelismo, ad esempio avviandosi autonomamente mpirun . Il valore predefinito non sci_solver è distribuito e rientra in quest'ultima categoria.
Un'implementazione sci_solver collettiva non è tenuta a generare un'eccezione su un singolo processo quando si verifica un errore; può invece seguire la semantica "fail-stop" per il contesto di esecuzione nel suo complesso, interrompendo collettivamente tutti i processi. (Questo descrive ciò che un'implementazione di questo tipo è autorizzata a fare, non il comportamento predefinito sci_solver.)
enlarge_batch_from_transitions
enlarge_batch_from_transitions(bitstring_matrix, transition_operators)
Applicare l'insieme degli operatori di transizione alle configurazioni rappresentate in bitstring_matrix.
Parametri
- bitstring_matrix (ndarray) – Un array 2D di rappresentazioni
booldi valori di bit, in modo che ogni riga rappresenti una singola stringa di bit. - transition_operators (ndarray) – Una serie 1D o 2D di stringhe
I,+,-enche rappresentano l'azione degli operatori di identità, creazione, annichilazione o numero. Ogni riga rappresenta un operatore di transizione.
Risultati
Matrice di bitstringhe che rappresenta l'insieme aumentato delle configurazioni elettroniche dopo l'applicazione degli operatori di eccitazione.
Tipo di restituzione
solve_fermion
solve_fermion(bitstring_matrix, /, hcore, eri, *, open_shell=False, spin_sq=None, shift=0.1, **kwargs)
Approssimare lo stato fondamentale dati gli integrali molecolari e un insieme di configurazioni elettroniche.
Parametri
-
bitstring_matrix (tuple[ndarray, ndarray] | ndarray) –
Un insieme di configurazioni che definiscono il sottospazio su cui proiettare e diagonalizzare l'Hamiltoniana.
Questo può essere specificato in due modi:
- Matrice di bitstringhe: Una 2D
numpy.ndarraydiboolvalori, dove ogni riga rappresenta una bitstring. Le configurazioni di spin-up devono occupare gli indici di colonna(N, N/2], e le configurazioni di spin-down devono occupare gli indici di colonna(N/2, 0], doveNè il numero di qubit. - Stringhe CI: Una tupla di due sequenze contenenti le rappresentazioni intere dei determinanti di spin-up e spin-down, rispettivamente. Il formato previsto è
([a_str_0, ..., a_str_N], [b_str_0, ..., b_str_M]).
- Matrice di bitstringhe: Una 2D
-
hcore (ndarray) – Matrice hamiltoniana di base che rappresenta gli integrali di un singolo elettrone
-
eri (ndarray) – Integrali di repulsione elettronica che rappresentano gli integrali di due elettroni
-
open_shell (bool) – Un flag che specifica se le configurazioni delle metà sinistra e destra delle bitstring devono essere tenute separate. Se
False, le stringhe CI delle metà sinistra e destra delle stringhe di bit vengono combinate in un unico insieme di configurazioni uniche e utilizzate per entrambi i sottospazi alfa e beta. -
spin_sq (float | None) – Valore target per lo spin totale al quadrato per lo stato fondamentale, . Se
None, non verrà imposto alcuno spin. -
shift (float) – Spostamento di livello per stati con spin diversi.
-
**kwargs - Argomenti delle parole chiave da passare a pyscf.fci.selected_ci.kernel_fixed_space
Risultati
- Energia minima dal calcolo del SIC
- Lo stato di massa del SIC
- Tupla contenente le occupazioni orbitali per gli orbitali di spin-up e spin-down. Formattato come:
(array([occ_a_0, ..., occ_a_N]), array([occ_b_0, ..., occ_b_N])) - Valore atteso del quadrato di spin
Tipo di restituzione
tupla[ float, SCIState, tupla [*ndarray*, ndarray ], float ]
solve_sci
solve_sci(ci_strings, one_body_tensor, two_body_tensor, norb, nelec, *, spin_sq=None, **kwargs)
Diagonalizzare l'hamiltoniana nel sottospazio definito dalle stringhe CI.
Parametri
-
ci_strings (tuple[ndarray, ndarray]) – Coppia (stringhe_a, stringhe_b) di array di stringhe CI di spin-alfa e stringhe CI di spin-beta il cui prodotto cartesiano fornisce la base del sottospazio in cui eseguire la diagonalizzazione.
-
one_body_tensor (ndarray) – Il tensore unicorporeo dell'Hamiltoniana.
-
two_body_tensor (ndarray) – Il tensore a due corpi dell'hamiltoniana.
-
norb (int) – Il numero di orbitali spaziali.
-
nelec (tuple[int, int]) – Il numero di elettroni alfa e beta.
-
spin_sq (float | None) – Valore target per lo spin totale al quadrato per lo stato fondamentale. Se
None, non verrà imposta alcuna rotazione. -
**kwargs -
Argomenti delle parole chiave da passare a pyscf.fci.selected_ci.kernel_fixed_space
Risultati
Il risultato della diagonalizzazione.
Tipo di restituzione
SCIResultato
solve_sci_batch
solve_sci_batch(ci_strings, one_body_tensor, two_body_tensor, norb, nelec, *, spin_sq=None, **kwargs)
Diagonalizzare l'hamiltoniana in sottospazi.
Parametri
-
ci_strings (list[tuple[ndarray, ndarray]]) – Elenco di coppie (stringhe_a, stringhe_b) di array di stringhe CI di spin-alfa e stringhe CI di spin-beta il cui prodotto cartesiano fornisce la base del sottospazio in cui eseguire la diagonalizzazione.
-
one_body_tensor (ndarray) – Il tensore unicorporeo dell'Hamiltoniana.
-
two_body_tensor (ndarray) – Il tensore a due corpi dell'hamiltoniana.
-
norb (int) – Il numero di orbitali spaziali.
-
nelec (tuple[int, int]) – Il numero di elettroni alfa e beta.
-
spin_sq (float | None) – Valore target per lo spin totale al quadrato per lo stato fondamentale. Se
None, non verrà imposta alcuna rotazione. -
**kwargs -
Argomenti delle parole chiave da passare a pyscf.fci.selected_ci.kernel_fixed_space
Risultati
I risultati delle diagonalizzazioni nei sottospazi dati da ci_strings.
Tipo di restituzione
elenco [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)
Ottimizzare gli orbitali per produrre uno stato fondamentale minimo.
Il processo prevede l'iterazione di 3 fasi:
Per num_iters iterazioni:
- Ruotare gli integrali rispetto ai parametri,
k_flat - Diagonalizzare e approssimare l'energia del groundstate e le ampiezze della funzione d'onda
- Ottimizzare
k_flatutilizzando la discesa del gradiente e le ampiezze delle funzioni d'onda trovate al punto 2
Fare riferimento a Sez. II A 4 per una discussione più dettagliata su questa tecnica di ottimizzazione orbitale.
La funzione qiskit_addon_sqd.fermion.optimize_orbitals() è stata deprecata a partire dalla versione qiskit-addon-sqd 0.13.0. Verrà rimosso non prima dell’ v0.15.0 L'ottimizzazione orbitale è ora supportata dal pacchetto ffsim. Per una guida su come ottimizzare la base hamiltoniana con ffsim, consultare /addons/qiskit-addon-sqd/guides /opt imize-orbitals.
Parametri
-
bitstring_matrix (tuple[ndarray, ndarray] | ndarray) –
Un insieme di configurazioni che definiscono il sottospazio su cui proiettare e diagonalizzare l'Hamiltoniana.
Questo può essere specificato in due modi:
- Matrice di bitstringhe: Una 2D
numpy.ndarraydiboolvalori, dove ogni riga rappresenta una bitstring. Le configurazioni di spin-up devono occupare gli indici di colonna(N, N/2], e le configurazioni di spin-down devono occupare gli indici di colonna(N/2, 0], doveNè il numero di qubit. - Stringhe CI: Una tupla di due sequenze contenenti le rappresentazioni intere dei determinanti di spin-up e spin-down, rispettivamente. Il formato previsto è
([a_str_0, ..., a_str_N], [b_str_0, ..., b_str_M]).
- Matrice di bitstringhe: Una 2D
-
hcore (ndarray) – Matrice hamiltoniana di base che rappresenta gli integrali di un singolo elettrone
-
eri (ndarray) – Integrali di repulsione elettronica che rappresentano gli integrali di due elettroni
-
k_flat (ndarray) – 1D che definisce la trasformata orbitale,
K. La matrice deve specificare il triangolo superiore dell'operatore di trasformazione antisimmetrica in ordine di riga maggiore, escludendo la diagonale. -
open_shell (bool) – Un flag che specifica se le configurazioni delle metà sinistra e destra delle bitstring devono essere tenute separate. Se
False, le stringhe CI delle metà sinistra e destra delle stringhe di bit vengono combinate in un unico insieme di configurazioni uniche e utilizzate per entrambi i sottospazi alfa e beta. -
spin_sq (float) – Valore obiettivo per lo spin totale al quadrato per lo stato fondamentale
-
num_iters (int) – Il numero di iterazioni dell'ottimizzazione orbitale da effettuare
-
num_steps_grad (int) – Il numero di passi di discesa del gradiente da eseguire durante ogni iterazione di ottimizzazione
-
learning_rate (float) – Il tasso di apprendimento da utilizzare durante la discesa del gradiente
-
**kwargs -
Argomenti delle parole chiave da passare a pyscf.fci.selected_ci.kernel_fixed_space
Risultati
- L'energia del groundstate trovata durante l'ultima iterazione di ottimizzazione
- Una matrice ottimizzata 1D che definisce la trasformata orbitale
- Tupla contenente le occupazioni orbitali per gli orbitali di spin-up e spin-down. Formattato come:
(array([occ_a_0, ..., occ_a_N]), array([occ_b_0, ..., occ_b_N]))
Tipo di restituzione
rotate_integrals
rotate_integrals(hcore, eri, k_flat)
Eseguire una trasformata di similitudine sugli integrali.
La trasformazione è descritta come:
Per maggiori informazioni su come e vengono generati da k_flat e applicati agli integrali a uno e due corpi, consultare . II A 4.
La funzione qiskit_addon_sqd.fermion.rotate_integrals() è stata deprecata a partire dalla versione qiskit-addon-sqd 0.13.0. Verrà rimosso non prima dell’ v0.15.0 L'ottimizzazione orbitale è ora supportata dal pacchetto ffsim. Per una guida su come ottimizzare la base hamiltoniana con ffsim, consultare /addons/qiskit-addon-sqd/guides /opt imize-orbitals.
Parametri
- hcore (ndarray) – Matrice hamiltoniana di base che rappresenta gli integrali di un singolo elettrone
- eri (ndarray) – Integrali di repulsione elettronica che rappresentano gli integrali di due elettroni
- k_flat (ndarray) – 1D che definisce la trasformata orbitale,
K. La matrice deve specificare il triangolo superiore dell'operatore di trasformazione antisimmetrica in ordine di riga maggiore, escludendo la diagonale.
Risultati
- La matrice hamiltoniana del nucleo ruotata
- La matrice ERI ruotata
Tipo di restituzione