Skip to main content
IBM Quantum Platform

Fermion

qiskit_addon_sqd.fermion

Funktionen für die Untersuchung von fermionischen Systemen.

SCIState

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

GitHub

Basen: object

Die Amplituden und Determinanten, die einen Quantenzustand beschreiben.

Parameter

amplitudes

Typ: ndarray

Ein Array M×NM \times N mit M=M = len(ci_strs_a) und NN = len(ci_strs_b). amplitudes[i][j] ist die Amplitude des Determinantenpaares (ci_strs_a[i], ci_strs_b[j]).

ci_strs_a

Typ: ndarray

Die Alpha-Determinanten.

ci_strs_b

Typ: ndarray

Die Beta-Determinanten.

load

classmethod load(filename)

GitHub

Laden eines SCIState-Objekts aus einer.npz-Datei.

nelec

Typ: tuple[int, int]

Die Anzahl der Alpha- und Beta-Elektronen.

norb

Typ: int

Die Anzahl der räumlichen Orbitale.

orbital_occupancies

orbital_occupancies()

GitHub

Durchschnittliche Orbitalbesetzungen.

Rückgabetyp

tupel [*ndarray*, ndarray ]

rdm

rdm(rank=1, spin_summed=False)

GitHub

Berechnung der reduzierten Dichtematrix.

Parameter

Rückgabetyp

ndarray

save

save(filename)

GitHub

Speichern Sie das SCIState-Objekt in einer.npz-Datei.

spin_square

spin_square()

GitHub

Rücklaufspin im Quadrat.

Rückgabetyp

Gleitkomma

bitstring_matrix_to_ci_strs

bitstring_matrix_to_ci_strs(bitstring_matrix, open_shell=False)

GitHub

Konvertiert Bitstrings (Zeilen) in einer bitstring_matrix in ganzzahlige Darstellungen von Determinanten.

Diese Funktion teilt jeden Bitstring in bitstring_matrix in zwei Hälften, übersetzt sie in ganzzahlige Darstellungen und fügt sie schließlich an ihre jeweiligen (Spin-up- oder Spin-down-) Listen an. Diese Listen werden sortiert und von dieser Funktion ausgegeben.

Parameter

  • bitstring_matrix (ndarray) – Ein 2D Array mit bool Darstellungen von Bit-Werten, wobei jede Zeile eine einzelne Bit-Zeichenkette darstellt
  • open_shell (bool) – Ein Flag, das angibt, ob eindeutige Konfigurationen aus der linken und rechten Hälfte der Bitstrings getrennt gehalten werden sollen. Bei False werden die Konfigurationen aus der linken und der rechten Hälfte der Bitstrings zu einem einzigen Satz von eindeutigen Konfigurationen kombiniert. Diese kombinierte Menge wird sowohl für die linke als auch für die rechte Bitfolge zurückgegeben.

Rückgabe

Ein length-2 Tupel von Determinantenlisten, die die rechte (spin-up) bzw. linke (spin-down) Hälfte der Bitstrings darstellen.

Rückgabetyp

tupel [*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

Führen Sie den stichprobenbasierten Quantendiagonalisierungsalgorithmus (SQD) aus.

Parameter

  • one_body_tensor (ndarray) – Der Ein-Körper-Tensor des Hamiltonianers.

  • two_body_tensor (ndarray) – Der Zweikörper-Tensor des Hamiltonianers.

  • bit_array (BitArray) – Array mit gesampelten Bitstrings. Jeder Bitstring sollte sowohl den Alpha-Teil als auch den Beta-Teil enthalten, wobei der Alpha-Teil auf der rechten Seite konkateniert wird, etwa so: [b_N, ..., b_0, a_N, ..., a_0].

  • samples_per_batch (int) – Die Anzahl der Bitstrings, die in jede Teilstapelung von Bitstrings aufgenommen werden.

  • norb (int) – Die Anzahl der räumlichen Orbitale.

  • nelec (tuple[int, int]) – Die Anzahl der Alpha- und Beta-Elektronen.

  • num_batches (int) – Die Anzahl der Chargen, die in jeder Wiederherstellungsiteration der Konfiguration zu unterproben sind. Dieses Argument steuert indirekt die Dimensionen der Diagonalisierungsunterräume. Ein höherer Wert führt zu größeren Unterraumdimensionen.

  • energy_tol (float) – Numerische Toleranz für die Konvergenz der Energie. Wenn die Energieänderung zwischen den Iterationen kleiner als dieser Wert ist, wird die Konfigurationswiederherstellungsschleife beendet, wenn die Belegungen ebenfalls konvergiert haben (siehe das Argument occupancies_tol ).

  • occupancies_tol (float) – Numerische Toleranz für die Konvergenz der durchschnittlichen Orbitalbesetzungen. Wenn die maximale Änderung des absoluten Wertes der durchschnittlichen Besetzung eines Orbitals zwischen den Iterationen kleiner als dieser Wert ist, wird die Konfigurationswiederherstellungsschleife beendet, wenn auch die Energie konvergiert hat (siehe das Argument energy_tol ).

  • max_iterations (int) – Begrenzung der Anzahl der Konfigurationswiederherstellungsiterationen.

  • sci_solver (Callable[[list[tuple[ndarray, ndarray]], ndarray, ndarray, int, tuple[int, int]], list[SCIResult]] | None) –

    Ausgewählte Funktion des Konfigurationsinteraktionslösers.

    Eingaben:

    • Liste von Paaren (strings_a, strings_b) von Arrays von Spin-Alpha-CI-Strings und Spin-Beta-CI-Strings, deren kartesisches Produkt die Basis des Unterraums bildet, in dem eine Diagonalisierung durchgeführt werden soll. Es wird eine Liste übergeben, damit die Solver-Funktion die Diagonalisierungen parallel durchführen kann.
    • Ein-Körper-Tensor des Hamiltonianers.
    • Zweikörper-Tensor des Hamiltonianers.
    • Die Anzahl der räumlichen Orbitale.
    • Ein Paar (n_alpha, n_beta), das die Anzahl der Alpha- und Beta-Elektronen angibt.

    Ausgabe: Liste von Tripletts (Energie, Sci-Zustand, Belegungen), wobei jedes Triplett das Ergebnis der entsprechenden Diagonalisierung enthält.

  • symmetrize_spin (bool) – Ob die CI-Ketten spin-alpha und spin-beta immer in einer einzigen Liste zusammengeführt werden sollen, so dass der Diagonalisierungsunterraum in Bezug auf den Austausch von spin alpha mit spin beta invariant ist.

  • max_dim (int |tuple[int, int] | None) –

    Grenzwert für die Dimension der Spinsektoren des SCI-Unterraums. Das kann beides sein:

    • Ein Tupel (max_dim_a, max_dim_b) aus ganzen Zahlen, die getrennte Grenzwerte für den Spin-Alpha- und den Spin-Beta-Sektor angeben. In diesem Fall wird die Dimension des SCI-Unterraums max_dim_a * max_dim_b nicht überschreiten.
    • Eine einzelne ganze Zahl, die einen Grenzwert angibt, der sowohl für den Spin-Alpha- als auch für den Spin-Beta-Sektor verwendet wird. In diesem Fall wird die Dimension des SCI-Unterraums max_dim**2 nicht überschreiten.
    • Nonein diesem Fall wird keine Grenze gesetzt.

    Man beachte, dass die Dimensionsgrenze auf den/die Spin-Sektor(en) festgelegt ist, während die volle Dimension des SCI-Unterraums das Produkt der Dimensionen der einzelnen Spin-Sektoren ist.

  • include_configurations (list[int] | tuple[list[int], list[int]] | ndarray | None) – Konfigurationen, die immer in den Diagonalisierungsunterraum aufzunehmen sind. Sie können entweder eine einzelne Liste von Einzelspin-Strings angeben, die für beide Spin-Sektoren verwendet wird, oder ein Paar (alpha_strings, beta_strings) von Listen mit Einzelspin-Strings, eine für jeden Spin.

  • initial_occupancies (tuple[ndarray, ndarray] | None) – Erste Schätzung für die durchschnittlichen Besetzungen der Orbitale.

  • carryover_threshold (float) – Schwellenwert für die Übertragung von Bitstrings mit großem CI-Gewicht von einer Iteration der Konfigurationswiederherstellung zur nächsten. Alle Single-Spin-CI-Strings, die mit Konfigurationen assoziiert sind, deren Koeffizient einen absoluten Wert größer als dieser Schwellenwert hat, werden in den Diagonalisierungsunterraum für die nächste Iteration aufgenommen. Bei einem kleineren Schwellenwert werden mehr Konfigurationen beibehalten, was zu einem größeren Unterraum und somit zu einer kostspieligeren Diagonalisierung führt.

  • callback (Callable[[list[SCIResult]], None] | None) – Eine Callback-Funktion, die nach jeder Iteration der Konfigurationswiederherstellung aufgerufen wird. Der Funktion wird die Ausgabe der Funktion sci_solver übergeben, d. h. eine Liste von Tripletts (Energie, sci_state, Belegungen), wobei jedes Triplett das Ergebnis einer Diagonalisierung enthält.

  • seed (int |Generator | None) – Ein Startwert für den Pseudozufallszahlengenerator.

Rückgabe

Die Schätzung der Energie und des SCI-Zustands mit dieser Energie.

Rückgabetyp

SCIResult

Anmerkung

Diese Funktion unterstützt die kollektive Ausführung in mehreren Prozessen (SPMD) unter Verwendung von MPI, wobei jeder Prozess (MPI_THREAD_FUNNELED oder weniger) von einem einzelnen Thread gesteuert wird. Wenn die Funktion von allen Prozessen gemeinsam aufgerufen wird, müssen die Argumente prozessübergreifend übereinstimmen, und es gelten die folgenden Semantiken:

  • Dieser Schritt sci_solver ist die einzige kollektive Operation: Alle Prozesse sind daran beteiligt, sodass eine sci_solver Implementierung die Arbeit auf alle Prozesse verteilen kann. Die übrigen Schritte des Konfigurations-Wiederherstellungszyklus (Vorbereitung der CI-Zeichenfolgen, Verarbeitung der Diagonalisierungsergebnisse und Überprüfung der Konvergenz) werden nicht verteilt implementiert und ausschließlich im Steuerungsprozess ausgeführt.
  • Die Funktion callback(sofern vorhanden) wird ausschließlich im Steuerungsprozess aufgerufen.
  • Der Rückgabewert ist in jedem Prozess derselbe: Das Endergebnis wird vom Steuerprozess an alle Ranks weitergeleitet.

Ob das aufrufende Programm unter MPI gestartet werden soll, hängt von der verwendeten sci_solver Version ab. Ein Kollektiv sci_solver, wie oben beschrieben, erwartet, dass das Programm kollektiv über alle Prozesse hinweg ausgeführt wird. Bei anderen Implementierungen muss das aufrufende Programm als einzelner Prozess außerhalb einer MPI-/SPMD-Umgebung ausgeführt werden. Einige dieser Implementierungen verwalten ihre Parallelität möglicherweise intern, beispielsweise indem sie sich selbst mpirun starten. Der Standardwert sci_solver wird nicht verteilt und fällt in die letztgenannte Kategorie.

Eine kollektive Implementierung sci_solver ist nicht verpflichtet, bei Auftreten eines Fehlers in einem einzelnen Prozess eine Ausnahme auszulösen; stattdessen kann sie für den gesamten Ausführungskontext eine „Fail-Stop“-Semantik befolgen und alle Prozesse gemeinsam abbrechen. (Hier wird beschrieben, was eine solche Implementierung tun darf, nicht das Verhalten der Standardimplementierung sci_solver.)

enlarge_batch_from_transitions

enlarge_batch_from_transitions(bitstring_matrix, transition_operators)

GitHub

Wenden Sie die Menge der Übergangsoperatoren auf die in bitstring_matrix dargestellten Konfigurationen an.

Parameter

  • bitstring_matrix (ndarray) – Ein 2D Array mit bool Darstellungen von Bitwerten, wobei jede Zeile einen einzelnen Bitstring darstellt.
  • transition_operators (ndarray) – Ein 1D oder 2D Array I, +, - und n Strings, die die Wirkung der Identitäts-, Schöpfungs-, Annihilations- oder Zahlenoperatoren darstellen. Jede Zeile steht für einen Übergangsoperator.

Rückgabe

Bitstring-Matrix, die den erweiterten Satz von elektronischen Konfigurationen nach Anwendung der Anregungsoperatoren darstellt.

Rückgabetyp

ndarray

solve_fermion

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

GitHub

Annäherung an den Grundzustand bei gegebenen molekularen Integralen und einer Reihe von elektronischen Konfigurationen.

Parameter

  • bitstring_matrix (tuple[ndarray, ndarray] | ndarray) –

    Eine Menge von Konfigurationen, die den Unterraum definieren, auf den der Hamiltonian projiziert und diagonalisiert wird.

    Dies kann auf zwei Arten angegeben werden:

    • Bitstring-Matrix: Eine 2D numpy.ndarray von bool Werten, bei der jede Zeile einen Bitstring darstellt. Die Spin-up-Konfigurationen sollten die Spaltenindizes (N, N/2] und die Spin-down-Konfigurationen die Spaltenindizes (N/2, 0] belegen, wobei N die Anzahl der Qubits angibt.
    • CI-Strings: Ein Tupel aus zwei Sequenzen mit ganzzahligen Darstellungen der Spin-up- bzw. Spin-down-Determinanten. Das erwartete Format ist ([a_str_0, ..., a_str_N], [b_str_0, ..., b_str_M]).
  • hcore (ndarray) – Kern-Hamilton-Matrix, die Einzelelektronenintegrale darstellt

  • eri (ndarray) – Elektronische Abstoßungsintegrale, die Zwei-Elektronen-Integrale darstellen

  • open_shell (bool) – Ein Flag, das angibt, ob Konfigurationen aus der linken und rechten Hälfte der Bitstrings getrennt gehalten werden sollen. Wenn False, werden die CI-Strings aus der linken und rechten Hälfte der Bitstrings zu einem einzigen Satz eindeutiger Konfigurationen kombiniert und sowohl für den Alpha- als auch den Beta-Unterraum verwendet.

  • spin_sq (float | None) – Zielwert für den Gesamtspin im Quadrat für den Grundzustand, S2=s(s+1)S^2 = s(s + 1). Wenn None, wird kein Spin vorgeschrieben.

  • shift (float) – Niveauverschiebung für Zustände, die einen unterschiedlichen Spin haben. (H+shift∗S2)∣ψ>=E∣ψ>(H + shift * S^2)|ψ> = E|ψ>

  • **kwargs - Schlüsselwortargumente zur Übergabe an pyscf.fci.selected_ci.kernel_fixed_space

Rückgabe

  • Minimale Energie aus der SCI-Berechnung
  • Der SCI-Grundzustand
  • Tupel mit Orbitalbesetzungen für Spin-up- und Spin-down-Orbitale. Formatiert als: (array([occ_a_0, ..., occ_a_N]), array([occ_b_0, ..., occ_b_N]))
  • Erwartungswert des Spin-Quadrats

Rückgabetyp

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)

GitHub

Diagonalisierung der Hamiltonfunktion im Unterraum, der durch die CI-Strings definiert ist.

Parameter

  • ci_strings (tuple[ndarray, ndarray]) – Paar (strings_a, strings_b) von Anordnungen von Spin-Alpha-CI-Strings und Spin-Beta-CI-Strings, deren kartesisches Produkt die Basis des Unterraums bildet, in dem eine Diagonalisierung durchgeführt werden soll.

  • one_body_tensor (ndarray) – Der Ein-Körper-Tensor des Hamiltonianers.

  • two_body_tensor (ndarray) – Der Zweikörper-Tensor des Hamiltonianers.

  • norb (int) – Die Anzahl der räumlichen Orbitale.

  • nelec (tuple[int, int]) – Die Anzahl der Alpha- und Beta-Elektronen.

  • spin_sq (float | None) – Zielwert für den Gesamtspin im Quadrat für den Grundzustand. Wenn None, wird kein Spin verhängt.

  • **kwargs -

    Schlüsselwortargumente zur Übergabe an pyscf.fci.selected_ci.kernel_fixed_space

Rückgabe

Das Ergebnis der Diagonalisierung.

Rückgabetyp

SCIResult

solve_sci_batch

solve_sci_batch(ci_strings, one_body_tensor, two_body_tensor, norb, nelec, *, spin_sq=None, **kwargs)

GitHub

Hamiltonian in Unterräumen diagonalisieren.

Parameter

  • ci_strings (list[tuple[ndarray, ndarray]]) – Liste von Paaren (strings_a, strings_b) von Arrays von Spin-Alpha-CI-Strings und Spin-Beta-CI-Strings, deren kartesisches Produkt die Basis des Unterraums bildet, in dem eine Diagonalisierung durchgeführt werden soll.

  • one_body_tensor (ndarray) – Der Ein-Körper-Tensor des Hamiltonianers.

  • two_body_tensor (ndarray) – Der Zweikörper-Tensor des Hamiltonianers.

  • norb (int) – Die Anzahl der räumlichen Orbitale.

  • nelec (tuple[int, int]) – Die Anzahl der Alpha- und Beta-Elektronen.

  • spin_sq (float | None) – Zielwert für den Gesamtspin im Quadrat für den Grundzustand. Wenn None, wird kein Spin verhängt.

  • **kwargs -

    Schlüsselwortargumente zur Übergabe an pyscf.fci.selected_ci.kernel_fixed_space

Rückgabe

Die Ergebnisse der Diagonalisierung in den durch ci_strings gegebenen Unterräumen.

Rückgabetyp

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)

GitHub

Optimieren Sie die Orbitale, um einen minimalen Grundzustand zu erzeugen.

Der Prozess besteht aus 3 Schritten, die sich wiederholen:

Für num_iters Iterationen:

  • Drehen Sie die Integrale in Bezug auf die Parameter, k_flat
  • Diagonalisierung und Annäherung an die Grundzustandsenergie und die Amplituden der Wellenfunktion
  • Optimierung von k_flat unter Verwendung des Gradientenabstiegs und der in Schritt 2 gefundenen Wellenfunktionsamplituden

Siehe Sec. II A 4 für eine ausführlichere Diskussion über diese Technik der Orbitaloptimierung.

Seit Version 0.13.0 veraltet

Die Funktion qiskit_addon_sqd.fermion.optimize_orbitals() ist ab qiskit-addon-sqd 0.13.0 veraltet. Es wird frühestens am v0.15.0 entfernt. Die Orbitaloptimierung wird nun vom ffsim-Paket unterstützt. Eine Anleitung zur Optimierung der Hamilton-Basis mit ffsim finden Sie unter /addons/qiskit-addon-sqd/guides /opt imize-orbitals.

Parameter

  • bitstring_matrix (tuple[ndarray, ndarray] | ndarray) –

    Eine Menge von Konfigurationen, die den Unterraum definieren, auf den der Hamiltonian projiziert und diagonalisiert wird.

    Dies kann auf zwei Arten angegeben werden:

    • Bitstring-Matrix: Eine 2D numpy.ndarray von bool Werten, bei der jede Zeile einen Bitstring darstellt. Die Spin-up-Konfigurationen sollten die Spaltenindizes (N, N/2] und die Spin-down-Konfigurationen die Spaltenindizes (N/2, 0] belegen, wobei N die Anzahl der Qubits angibt.
    • CI-Strings: Ein Tupel aus zwei Sequenzen mit ganzzahligen Darstellungen der Spin-up- bzw. Spin-down-Determinanten. Das erwartete Format ist ([a_str_0, ..., a_str_N], [b_str_0, ..., b_str_M]).
  • hcore (ndarray) – Kern-Hamilton-Matrix, die Einzelelektronenintegrale darstellt

  • eri (ndarray) – Elektronische Abstoßungsintegrale, die Zwei-Elektronen-Integrale darstellen

  • k_flat (ndarray) – 1D array, das die Orbital-Transformation definiert, K. Das Array sollte das obere Dreieck des antisymmetrischen Transformationsoperators in Zeilen-Dur-Reihenfolge angeben, ohne die Diagonale.

  • open_shell (bool) – Ein Flag, das angibt, ob Konfigurationen aus der linken und rechten Hälfte der Bitstrings getrennt gehalten werden sollen. Wenn False, werden die CI-Strings aus der linken und rechten Hälfte der Bitstrings zu einem einzigen Satz eindeutiger Konfigurationen kombiniert und sowohl für den Alpha- als auch den Beta-Unterraum verwendet.

  • spin_sq (float) – Zielwert für den Gesamtspin im Quadrat für den Grundzustand

  • num_iters (int) – Die Anzahl der durchzuführenden Iterationen der Orbitaloptimierung

  • num_steps_grad (int) – Die Anzahl der Schritte des Gradientenabstiegs, die bei jeder Optimierungsiteration durchgeführt werden

  • learning_rate (float) – Die beim Gradientenabstieg zu verwendende Lernrate

  • **kwargs -

    Schlüsselwortargumente zur Übergabe an pyscf.fci.selected_ci.kernel_fixed_space

Rückgabe

  • Die bei der letzten Optimierungsiteration gefundene Grundzustandsenergie
  • Ein optimiertes 1D Array, das die Orbital-Transformation definiert
  • Tupel mit Orbitalbesetzungen für Spin-up- und Spin-down-Orbitale. Formatiert als: (array([occ_a_0, ..., occ_a_N]), array([occ_b_0, ..., occ_b_N]))

Rückgabetyp

tuple[ float, ndarray, tuple [*ndarray*, ndarray ]]

rotate_integrals

rotate_integrals(hcore, eri, k_flat)

GitHub

Führen Sie eine Ähnlichkeitstransformation an den Integralen durch.

Die Transformation wird wie folgt beschrieben:

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

Weitere Informationen darüber, wie U^\hat{U} und U†^\hat{U^{\dagger}} aus k_flat erzeugt und auf die Ein- und Zweikörperintegrale angewendet werden, finden Sie unter . II A 4.

Seit Version 0.13.0 veraltet

Die Funktion qiskit_addon_sqd.fermion.rotate_integrals() ist ab qiskit-addon-sqd 0.13.0 veraltet. Es wird frühestens am v0.15.0 entfernt. Die Orbitaloptimierung wird nun vom ffsim-Paket unterstützt. Eine Anleitung zur Optimierung der Hamilton-Basis mit ffsim finden Sie unter /addons/qiskit-addon-sqd/guides /opt imize-orbitals.

Parameter

  • hcore (ndarray) – Kern-Hamilton-Matrix, die Einzelelektronenintegrale darstellt
  • eri (ndarray) – Elektronische Abstoßungsintegrale, die Zwei-Elektronen-Integrale darstellen
  • k_flat (ndarray) – 1D array, das die Orbital-Transformation definiert, K. Das Array sollte das obere Dreieck des antisymmetrischen Transformationsoperators in Zeilen-Dur-Reihenfolge angeben, ohne die Diagonale.

Rückgabe

  • Die gedrehte Kern-Hamiltonsche Matrix
  • Die gedrehte ERI-Matrix

Rückgabetyp

tupel [*ndarray*, ndarray ]

War diese Seite hilfreich?
Melden Sie auf GitHub einen Fehler, einen Tippfehler oder fordern Sie Inhalte an.