Skip to main content
IBM Quantum Platform

Fermión

qiskit_addon_sqd.fermion

Funciones para el estudio de sistemas fermiónicos.

SCIState

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

GitHub

Bases: object

Las amplitudes y determinantes que describen un estado cuántico.

Parámetros

amplitudes

Tipo: ndarray

Una matriz M×NM \times N donde M=M = len(ci_strs_a) y NN = len(ci_strs_b). amplitudes[i][j] es la amplitud del par de determinantes (ci_strs_a[i], ci_strs_b[j]).

ci_strs_a

Tipo: ndarray

Los determinantes alfa.

ci_strs_b

Tipo: ndarray

Los determinantes beta.

load

classmethod load(filename)

GitHub

Carga un objeto SCIState desde un archivo.npz.

nelec

Tipo: tuple[int, int]

El número de electrones alfa y beta.

norb

Tipo: int

El número de orbitales espaciales.

orbital_occupancies

orbital_occupancies()

GitHub

Ocupaciones orbitales medias.

Tipo de retorno

tuple [*ndarray*, ndarray ]

rdm

rdm(rank=1, spin_summed=False)

GitHub

Calcula la matriz de densidad reducida.

Parámetros

Tipo de retorno

ndarray

save

save(filename)

GitHub

Guarda el objeto SCIState en un archivo.npz.

spin_square

spin_square()

GitHub

Giro de retorno al cuadrado.

Tipo de retorno

Float

bitstring_matrix_to_ci_strs

bitstring_matrix_to_ci_strs(bitstring_matrix, open_shell=False)

GitHub

Convierte las cadenas de bits (filas) de bitstring_matrix en representaciones enteras de los determinantes.

Esta función separa cada cadena de bits en bitstring_matrix por la mitad, las traduce a representaciones de enteros y, finalmente, las añade a sus respectivas listas (spin-up o spin-down). Estas listas se ordenan y se emiten desde esta función.

Parámetros

  • bitstring_matrix (ndarray) – Una matriz 2D de representaciones bool de valores de bits, de forma que cada fila representa una única cadena de bits
  • open_shell (bool) – Bandera que especifica si las configuraciones únicas de las mitades izquierda y derecha de las cadenas de bits deben mantenerse separadas. Si False, las configuraciones de las mitades izquierda y derecha de las cadenas de bits se combinan en un único conjunto de configuraciones únicas. Ese conjunto combinado se devolverá tanto para la cadena de bits izquierda como para la derecha.

Devuelve

Una tupla length-2 de listas de determinantes que representan las mitades derecha (spin-up) e izquierda (spin-down) de las cadenas de bits, respectivamente.

Tipo de retorno

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

Ejecuta el algoritmo de diagonalización cuántica basado en muestras (SQD).

Parámetros

  • one_body_tensor (ndarray) – El tensor de un cuerpo del Hamiltoniano.

  • two_body_tensor (ndarray) – El tensor de dos cuerpos del Hamiltoniano.

  • bit_array (BitArray) – Matriz de cadenas de bits muestreadas. Cada cadena de bits debe tener la parte alfa y la parte beta concatenadas, con la parte alfa concatenada a la derecha, así: [b_N, ..., b_0, a_N, ..., a_0].

  • samples_per_batch (int) – El número de cadenas de bits que se incluirán en cada lote submuestreado de cadenas de bits.

  • norb (int) – El número de orbitales espaciales.

  • nelec (tuple[int, int]) – El número de electrones alfa y beta.

  • num_batches (int) – El número de lotes a submuestrear en cada iteración de recuperación de la configuración. Este argumento controla indirectamente las dimensiones de los subespacios de diagonalización. Un valor más alto dará mayores dimensiones al subespacio.

  • energy_tol (float) – Tolerancia numérica para la convergencia de la energía. Si el cambio de energía entre iteraciones es menor que este valor, el bucle de recuperación de la configuración saldrá, si las ocupaciones también han convergido (véase el argumento occupancies_tol ).

  • occupancies_tol (float) – Tolerancia numérica para la convergencia de las ocupaciones orbitales medias. Si el cambio máximo en valor absoluto de la ocupación media de un orbital entre iteraciones es menor que este valor, el bucle de recuperación de configuración saldrá, si la energía también ha convergido (véase el argumento energy_tol ).

  • max_iterations (int) – Límite del número de iteraciones de recuperación de la configuración.

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

    Función del solucionador de interacciones de configuración seleccionada.

    Entradas:

    • Lista de pares (strings_a, strings_b) de matrices de cadenas CI de espín-alfa y cadenas CI de espín-beta cuyo producto cartesiano da la base del subespacio en el que realizar una diagonalización. Se pasa una lista para permitir que la función solver realice las diagonalizaciones en paralelo.
    • Tensor de un cuerpo del Hamiltoniano.
    • Tensor de dos cuerpos del Hamiltoniano.
    • El número de orbitales espaciales.
    • Un par (n_alpha, n_beta) que indica el número de electrones alfa y beta.

    Salida: Lista de tripletas (energía, sci_estado, ocupaciones), donde cada tripleta contiene el resultado de la diagonalización correspondiente.

  • symmetrize_spin (bool) – Si fusionar siempre cadenas CI de espín alfa y espín beta en una sola lista, de modo que el subespacio de diagonalización sea invariante con respecto al intercambio de espín alfa con espín beta.

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

    Límite de la dimensión de los sectores de espín del subespacio SCI. Puede ser cualquiera:

    • Una tupla (max_dim_a, max_dim_b) de enteros que dan límites separados para los sectores de espín-alfa y espín-beta. En este caso, la dimensión del subespacio SCI no superará max_dim_a * max_dim_b.
    • Un único número entero que especifica un límite que se utilizará para los sectores de espín-alfa y espín-beta. En este caso, la dimensión del subespacio SCI no superará max_dim**2.
    • Noneen cuyo caso no se establece ningún límite.

    Obsérvese que el límite de dimensión se establece en el sector o sectores de espín, mientras que la dimensión completa del subespacio SCI es el producto de las dimensiones de los sectores de espín individuales.

  • include_configurations (list[int] | tuple[list[int], list[int]] | ndarray | None) – Configuraciones a incluir siempre en el subespacio de diagonalización. Puede especificar una sola lista de cadenas de un solo espín para utilizar en ambos sectores de espín, o un par (cadenas_alfa, cadenas_beta) de listas de cadenas de un solo espín, una para cada espín.

  • initial_occupancies (tuple[ndarray, ndarray] | None) – Estimación inicial de las ocupaciones medias de los orbitales.

  • carryover_threshold (float) – Umbral para transferir cadenas de bits con gran peso CI de una iteración de recuperación de configuración a la siguiente. Todas las cadenas CI de un solo espín asociadas a configuraciones cuyo coeficiente tenga un valor absoluto superior a este umbral se incluirán en el subespacio de diagonalización para la siguiente iteración. Un umbral más pequeño retendrá más configuraciones, lo que dará lugar a un subespacio más grande y, por tanto, a una diagonalización más costosa.

  • callback (Callable[[list[SCIResult]], None] | None) – Una función de devolución de llamada que se llamará después de cada iteración de recuperación de la configuración. A la función se le pasará la salida de la función sci_solver, que es una lista de tripletas (energía, sci_state, ocupaciones), donde cada tripleta contiene el resultado de una diagonalización.

  • seed (Generator |int | None) – Una semilla para el generador de números pseudoaleatorios.

Devuelve

La estimación de la energía y el estado SCI con esa energía.

Tipo de retorno

SCIResultado

enlarge_batch_from_transitions

enlarge_batch_from_transitions(bitstring_matrix, transition_operators)

GitHub

Aplica el conjunto de operadores de transición a las configuraciones representadas en bitstring_matrix.

Parámetros

  • bitstring_matrix (ndarray) – Una matriz 2D de representaciones bool de valores de bits de forma que cada fila representa una única cadena de bits.
  • transition_operators (ndarray) – Una matriz 1D o 2D I, +, -, y n cadenas que representan la acción de los operadores de identidad, creación, aniquilación o número. Cada fila representa un operador de transición.

Devuelve

Matriz de cadenas de bits que representa el conjunto aumentado de configuraciones electrónicas tras aplicar los operadores de excitación.

Tipo de retorno

ndarray

solve_fermion

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

GitHub

Aproximar el estado básico dadas las integrales moleculares y un conjunto de configuraciones electrónicas.

Parámetros

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

    Conjunto de configuraciones que definen el subespacio en el que se proyectará y diagonalizará el hamiltoniano.

    Puede especificarse de dos maneras:

    • Matriz de cadenas de bits: Una 2D numpy.ndarray de valores bool , donde cada fila representa una cadena de bits. Las configuraciones de spin-up deben ocupar los índices de columna (N, N/2], y las configuraciones de spin-down deben ocupar los índices de columna (N/2, 0], donde N es el número de qubits.
    • Cadenas CI: Una tupla de dos secuencias que contienen representaciones enteras de determinantes de spin-up y spin-down, respectivamente. El formato esperado es ([a_str_0, ..., a_str_N], [b_str_0, ..., b_str_M]).
  • hcore (ndarray) – Matriz hamiltoniana central que representa las integrales de un solo electrón

  • eri (ndarray) – Integrales de repulsión electrónica que representan integrales de dos electrones

  • open_shell (bool) – Bandera que especifica si las configuraciones de las mitades izquierda y derecha de las cadenas de bits deben mantenerse separadas. Si False, las cadenas CI de las mitades izquierda y derecha de las cadenas de bits se combinan en un único conjunto de configuraciones únicas y se utilizan para los subespacios alfa y beta.

  • spin_sq (float | None) – Valor objetivo del espín total al cuadrado para el estado básico, S2=s(s+1)S^2 = s(s + 1). Si None, no se impondrá ningún espín.

  • shift (float) – Desplazamiento de nivel para estados que tienen diferente espín. (H+shiftS2)ψ>=Eψ>(H + shift * S^2)|ψ> = E|ψ>

  • **kwargs - Argumentos de palabra clave para pasar a pyscf.fci.selected_ci.kernel_fixed_space

Devuelve

  • Energía mínima del cálculo SCI
  • El estado básico de SCI
  • Tupla que contiene las ocupaciones orbitales de los orbitales spin-up y spin-down. Formateado como: (array([occ_a_0, ..., occ_a_N]), array([occ_b_0, ..., occ_b_N]))
  • Valor esperado del espín al cuadrado

Tipo de retorno

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

Diagonalizar el Hamiltoniano en el subespacio definido por las cadenas CI.

Parámetros

  • ci_strings (tuple[ndarray, ndarray]) – Par (cadenas_a, cadenas_b) de matrices de cadenas CI de espín-alfa y cadenas CI de espín-beta cuyo producto cartesiano da la base del subespacio en el que realizar una diagonalización.

  • one_body_tensor (ndarray) – El tensor de un cuerpo del Hamiltoniano.

  • two_body_tensor (ndarray) – El tensor de dos cuerpos del Hamiltoniano.

  • norb (int) – El número de orbitales espaciales.

  • nelec (tuple[int, int]) – El número de electrones alfa y beta.

  • spin_sq (float | None) – Valor objetivo del espín total al cuadrado para el estado básico. Si None, no se impondrá ningún giro.

  • **...de las cargas.

    Argumentos de palabra clave para pasar a pyscf.fci.selected_ci.kernel_fixed_space

Devuelve

El resultado de la diagonalización.

Tipo de retorno

SCIResultado

solve_sci_batch

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

GitHub

Diagonalizar el Hamiltoniano en subespacios.

Parámetros

  • ci_strings (list[tuple[ndarray, ndarray]]) – Lista de pares (strings_a, strings_b) de matrices de cadenas CI de espín-alfa y cadenas CI de espín-beta cuyo producto cartesiano da la base del subespacio en el que realizar una diagonalización.

  • one_body_tensor (ndarray) – El tensor de un cuerpo del Hamiltoniano.

  • two_body_tensor (ndarray) – El tensor de dos cuerpos del Hamiltoniano.

  • norb (int) – El número de orbitales espaciales.

  • nelec (tuple[int, int]) – El número de electrones alfa y beta.

  • spin_sq (float | None) – Valor objetivo del espín total al cuadrado para el estado básico. Si None, no se impondrá ningún giro.

  • **...de las cargas.

    Argumentos de palabra clave para pasar a pyscf.fci.selected_ci.kernel_fixed_space

Devuelve

Los resultados de las diagonalizaciones en los subespacios dados por ci_strings.

Tipo de retorno

lista [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

Optimizar los orbitales para producir un estado fundamental mínimo.

El proceso consiste en iterar 3 pasos:

Para num_iters iteraciones:

  • Gira las integrales con respecto a los parámetros, k_flat
  • Diagonalizar y aproximar la energía del estado base y las amplitudes de la función de onda
  • Optimizar k_flat utilizando el descenso de gradiente y las amplitudes de la función de onda encontradas en el paso 2

Consulte Sec. II A 4 para una discusión más detallada sobre esta técnica de optimización orbital.

Parámetros

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

    Conjunto de configuraciones que definen el subespacio en el que se proyectará y diagonalizará el hamiltoniano.

    Puede especificarse de dos maneras:

    • Matriz de cadenas de bits: Una 2D numpy.ndarray de valores bool , donde cada fila representa una cadena de bits. Las configuraciones de spin-up deben ocupar los índices de columna (N, N/2], y las configuraciones de spin-down deben ocupar los índices de columna (N/2, 0], donde N es el número de qubits.
    • Cadenas CI: Una tupla de dos secuencias que contienen representaciones enteras de determinantes de spin-up y spin-down, respectivamente. El formato esperado es ([a_str_0, ..., a_str_N], [b_str_0, ..., b_str_M]).
  • hcore (ndarray) – Matriz hamiltoniana central que representa las integrales de un solo electrón

  • eri (ndarray) – Integrales de repulsión electrónica que representan integrales de dos electrones

  • k_flat (ndarray) – 1D matriz que define la transformada orbital, K. La matriz debe especificar el triángulo superior del operador de transformación antisimétrica en orden fila-mayor, excluyendo la diagonal.

  • open_shell (bool) – Bandera que especifica si las configuraciones de las mitades izquierda y derecha de las cadenas de bits deben mantenerse separadas. Si False, las cadenas CI de las mitades izquierda y derecha de las cadenas de bits se combinan en un único conjunto de configuraciones únicas y se utilizan para los subespacios alfa y beta.

  • spin_sq (float) – Valor objetivo del espín total al cuadrado para el estado básico

  • num_iters (int) – El número de iteraciones de optimización orbital a realizar

  • num_steps_grad (int) – El número de pasos de descenso de gradiente a realizar durante cada iteración de optimización

  • learning_rate (float) – La tasa de aprendizaje que se utilizará durante el descenso gradiente

  • **...de las cargas.

    Argumentos de palabra clave para pasar a pyscf.fci.selected_ci.kernel_fixed_space

Devuelve

  • La energía del estado base encontrada durante la última iteración de optimización
  • Una matriz optimizada 1D que define la transformada orbital
  • Tupla que contiene las ocupaciones orbitales de los orbitales spin-up y spin-down. Formateado como: (array([occ_a_0, ..., occ_a_N]), array([occ_b_0, ..., occ_b_N]))

Tipo de retorno

tupla [ flotador, ndarray, tupla [ ndarray, ndarray ]]

rotate_integrals

rotate_integrals(hcore, eri, k_flat)

GitHub

Realiza una transformada de semejanza sobre las integrales.

La transformación se describe como:

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

Para más información sobre cómo U^\hat{U} y U^\hat{U^{\dagger}} se generan a partir de k_flat y se aplican a las integrales de uno y dos cuerpos, consulte Sec. II A 4.

Parámetros

  • hcore (ndarray) – Matriz hamiltoniana central que representa las integrales de un solo electrón
  • eri (ndarray) – Integrales de repulsión electrónica que representan integrales de dos electrones
  • k_flat (ndarray) – 1D matriz que define la transformada orbital, K. La matriz debe especificar el triángulo superior del operador de transformación antisimétrica en orden fila-mayor, excluyendo la diagonal.

Devuelve

  • La matriz hamiltoniana del núcleo rotada
  • La matriz ERI rotada

Tipo de retorno

tuple [*ndarray*, ndarray ]

¿Le ha resultado útil esta página?
Informe de un error, de una errata o solicite contenido en GitHub.