Skip to main content
IBM Quantum Platform

Fermione

qiskit_addon_sqd.fermion

Funzioni per lo studio dei sistemi fermionici.

SCIStato

class SCIState(amplitudes, ci_strs_a, ci_strs_b, norb, nelec)

GitHub

Basi: object

Le ampiezze e i determinanti che descrivono uno stato quantistico.

Parametri

amplitudes

Tipo: ndarray

Una matrice M×NM \times N dove M=M = len(ci_strs_a) e NN = 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

classmethod load(filename)

GitHub

Carica un oggetto SCIState da un file.npz.

nelec

Tipo: tuple[int, int]

Il numero di elettroni alfa e beta.

norb

Tipo: int

Il numero di orbitali spaziali.

orbital_occupancies

orbital_occupancies()

GitHub

Occupazioni orbitali medie.

Tipo di restituzione

tupla [*ndarray*, ndarray ]

rdm

rdm(rank=1, spin_summed=False)

GitHub

Calcolo della matrice di densità ridotta.

Parametri

Tipo di restituzione

ndarray

save

save(filename)

GitHub

Salva l'oggetto SCIState in un file.npz.

spin_square

spin_square()

GitHub

Ritorno al quadrato.

Tipo di restituzione

mobile

bitstring_matrix_to_ci_strs

bitstring_matrix_to_ci_strs(bitstring_matrix, open_shell=False)

GitHub

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 bool di 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

tupla [*ndarray*, ndarray ]

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)

GitHub

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.

  • 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

Nota

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’implementazione sci_solver può 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)

GitHub

Applicare l'insieme degli operatori di transizione alle configurazioni rappresentate in bitstring_matrix.

Parametri

  • bitstring_matrix (ndarray) – Un array 2D di rappresentazioni bool di 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, +, - e n che 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

ndarray

solve_fermion

solve_fermion(bitstring_matrix, /, hcore, eri, *, open_shell=False, spin_sq=None, shift=0.1, **kwargs)

GitHub

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.ndarray di bool valori, 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], dove N è 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]).
  • 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, S2=s(s+1)S^2 = s(s + 1). Se None, non verrà imposto alcuno spin.

  • shift (float) – Spostamento di livello per stati con spin diversi. (H+shiftS2)ψ>=Eψ>(H + shift * S^2)|ψ> = E|ψ>

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

GitHub

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)

GitHub

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)

GitHub

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_flat utilizzando 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.

Obsoleto a partire dalla versione 0.13.0

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.ndarray di bool valori, 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], dove N è 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]).
  • 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

tupla[ float, ndarray, tupla [*ndarray*, ndarray ]]

rotate_integrals

rotate_integrals(hcore, eri, k_flat)

GitHub

Eseguire una trasformata di similitudine sugli integrali.

La trasformazione è descritta come:

H~^=U^(k)H^U^(k)\hat{\widetilde{H}} = \hat{U^{\dagger}}(k)\hat{H}\hat{U}(k)

Per maggiori informazioni su come U^\hat{U} e U^\hat{U^{\dagger}} vengono generati da k_flat e applicati agli integrali a uno e due corpi, consultare . II A 4.

Obsoleto a partire dalla versione 0.13.0

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

tupla [*ndarray*, ndarray ]

Questa pagina è stata utile?
Segnala un bug, un errore di battitura o richiedi contenuti su GitHub.