Fermion
qiskit_addon_sqd.fermion
Funções para o estudo de sistemas fermiônicos.
SCIState
class SCIState(amplitudes, ci_strs_a, ci_strs_b, norb, nelec)
Bases: object
As amplitudes e os determinantes que descrevem um estado quântico.
Parâmetros
amplitudes
Tipo: ndarray
Uma matriz em que len(ci_strs_a) e = len(ci_strs_b). amplitudes[i][j] é a amplitude do par determinante (ci_strs_a[i], ci_strs_b[j]).
ci_strs_a
Tipo: ndarray
Os determinantes alfa.
ci_strs_b
Tipo: ndarray
Os determinantes do beta.
load
nelec
Tipo: tuple[int, int]
O número de elétrons alfa e beta.
norb
Tipo: int
O número de orbitais espaciais.
orbital_occupancies
rdm
rdm(rank=1, spin_summed=False)
Calcular a matriz de densidade reduzida.
Parâmetros
Tipo de retorno
save
spin_square
bitstring_matrix_to_ci_strs
bitstring_matrix_to_ci_strs(bitstring_matrix, open_shell=False)
Converta cadeias de bits (linhas) em um bitstring_matrix em representações inteiras de determinantes.
Essa função separa cada bitstring em bitstring_matrix pela metade, converte-os em representações inteiras e, finalmente, anexa-os às suas respectivas listas (spin-up ou spin-down). Essas listas são classificadas e geradas por essa função.
Parâmetros
- bitstring_matrix (ndarray) – Uma matriz 2D de
boolrepresentações de valores de bits, de modo que cada linha representa uma única cadeia de bits - open_shell (bool) – Um sinalizador que especifica se as configurações exclusivas das metades esquerda e direita das cadeias de bits devem ser mantidas separadas. Se
False, as configurações das metades esquerda e direita das cadeias de bits são combinadas em um único conjunto de configurações exclusivas. Esse conjunto combinado será retornado para as cadeias de bits esquerda e direita.
Retorna
Uma length-2 tupla de listas de determinantes que representam as metades direita (spin-up) e esquerda (spin-down) das cadeias de bits, respectivamente.
Tipo de retorno
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)
Execute o algoritmo de diagonalização quântica baseada em amostra (SQD).
Parâmetros
-
one_body_tensor (ndarray) – O tensor de um corpo do Hamiltoniano.
-
two_body_tensor (ndarray) – O tensor de dois corpos do Hamiltoniano.
-
bit_array (BitArray) – Matriz de cadeias de bits amostradas. Cada bitstring deve ter a parte alfa e a parte beta concatenadas juntas, com a parte alfa concatenada no lado direito, da seguinte forma:
[b_N, ..., b_0, a_N, ..., a_0]. -
samples_per_batch (int) – O número de cadeias de bits a serem incluídas em cada lote de cadeias de bits com subamostragem.
-
norb (int) – O número de orbitais espaciais.
-
nelec (tuple[int, int]) – Os números de elétrons alfa e beta.
-
num_batches (int) – O número de lotes para subamostragem em cada iteração de recuperação de configuração. Esse argumento controla indiretamente as dimensões dos subespaços de diagonalização. Um valor mais alto produzirá dimensões de subespaço maiores.
-
energy_tol (float) – Tolerância numérica para convergência da energia. Se a alteração na energia entre as iterações for menor que esse valor, o loop de recuperação da configuração será encerrado se as ocupações também tiverem convergido (consulte o argumento
occupancies_tol). -
occupancies_tol (float) – Tolerância numérica para convergência das ocupações orbitais médias. Se a alteração máxima no valor absoluto da ocupação média de um orbital entre as iterações for menor que esse valor, o loop de recuperação de configuração será encerrado se a energia também tiver convergido (consulte o argumento
energy_tol). -
max_iterations (int) – Limite do número de iterações de recuperação de configuração.
-
sci_solver (Callable[[list[tuple[ndarray, ndarray]], ndarray, ndarray, int, tuple[int, int]], list[SCIResult]] | None) –
Função do solucionador de interação de configuração selecionada.
Entradas:
- Lista de pares (strings_a, strings_b) de matrizes de cadeias de caracteres CI spin-alfa e cadeias de caracteres CI spin-beta cujo produto cartesiano fornece a base do subespaço no qual será realizada uma diagonalização. Uma lista é passada para permitir que a função do solucionador execute as diagonalizações em paralelo.
- Tensor de um corpo do Hamiltoniano.
- Tensor de dois corpos do Hamiltoniano.
- O número de orbitais espaciais.
- Um par (n_alpha, n_beta) indicando os números de elétrons alfa e beta.
Saída: Lista de tripletos (energia, sci_state, ocupações), em que cada tripleto contém o resultado da diagonalização correspondente.
-
symmetrize_spin (bool) – Se deve sempre mesclar as cadeias de caracteres CI spin-alfa e spin-beta em uma única lista, de modo que o subespaço de diagonalização seja invariante em relação à troca de spin alfa por spin beta.
-
max_dim (int |tuple[int, int] | None) –
Limite da dimensão dos setores de spin do subespaço SCI. Pode ser qualquer um:
- Uma tupla
(max_dim_a, max_dim_b)de números inteiros que fornecem limites separados para os setores de spin-alfa e spin-beta. Nesse caso, a dimensão do subespaço SCI não excederámax_dim_a * max_dim_b. - Um único número inteiro que especifica um limite que será usado para os setores spin-alfa e spin-beta. Nesse caso, a dimensão do subespaço SCI não excederá
max_dim**2. Nonee, nesse caso, nenhum limite é definido.
Observe que o limite de dimensão é definido no(s) setor(es) de spin, enquanto a dimensão total do subespaço SCI é o produto das dimensões dos setores de spin individuais.
- Uma tupla
-
include_configurations (list[int] | tuple[list[int], list[int]] | ndarray | None) – Configurações a serem sempre incluídas no subespaço de diagonalização. Você pode especificar uma única lista de cadeias de caracteres de spin único a ser usada para ambos os setores de spin ou um par (alpha_strings, beta_strings) de listas de cadeias de caracteres de spin único, uma para cada spin.
-
initial_occupancies (tuple[ndarray, ndarray] | None) – Suposição inicial para as ocupações médias dos orbitais.
-
carryover_threshold (float) – Limite para transportar bitstrings com grande peso de CI de uma iteração de recuperação de configuração para a próxima. Todas as cadeias de CI de spin único associadas a configurações cujo coeficiente tem valor absoluto maior que esse limite serão incluídas no subespaço de diagonalização para a próxima iteração. Um limite menor reterá mais configurações, resultando em um subespaço maior e, portanto, em uma diagonalização mais cara.
-
callback (Callable[[list[SCIResult]], None] | None) – Uma função de retorno de chamada a ser chamada após cada iteração de recuperação de configuração. A função receberá a saída da função sci_solver, que é uma lista de tripletos (energia, sci_state, ocupações), em que cada tripleto contém o resultado de uma diagonalização.
-
seed (Generator |int | None) – Uma semente para o gerador de números pseudo-aleatórios.
Retorna
A estimativa da energia e o estado SCI com essa energia.
Tipo de retorno
Resultado SCI
enlarge_batch_from_transitions
enlarge_batch_from_transitions(bitstring_matrix, transition_operators)
Aplique o conjunto de operadores de transição às configurações representadas em bitstring_matrix.
Parâmetros
- bitstring_matrix (ndarray) – Uma matriz 2D de
boolrepresentações de valores de bits, de modo que cada linha representa uma única cadeia de bits. - transition_operators (ndarray) – Uma matriz 1D ou 2D
I,+,-enstrings que representam a ação dos operadores de identidade, criação, aniquilação ou número. Cada linha representa um operador de transição.
Retorna
Matriz de bitstring que representa o conjunto aumentado de configurações eletrônicas após a aplicação dos operadores de excitação.
Tipo de retorno
solve_fermion
solve_fermion(bitstring_matrix, /, hcore, eri, *, open_shell=False, spin_sq=None, shift=0.1, **kwargs)
Aproxime o estado fundamental com base em integrais moleculares e um conjunto de configurações eletrônicas.
Parâmetros
-
bitstring_matrix (tuple[ndarray, ndarray] | ndarray) –
Um conjunto de configurações que define o subespaço no qual o Hamiltoniano será projetado e diagonalizado.
Isso pode ser especificado de duas maneiras:
- Matriz de bitstring: Um 2D
numpy.ndarraydeboolvalores, em que cada linha representa uma bitstring. As configurações de spin-up devem ocupar os índices de coluna(N, N/2], e as configurações de spin-down devem ocupar os índices de coluna(N/2, 0], em queNé o número de qubits. - Cadeias de caracteres CI: Uma tupla de duas sequências contendo representações inteiras de determinantes de spin-up e spin-down, respectivamente. O formato esperado é
([a_str_0, ..., a_str_N], [b_str_0, ..., b_str_M]).
- Matriz de bitstring: Um 2D
-
hcore (ndarray) – Matriz hamiltoniana central que representa integrais de elétrons únicos
-
eri (ndarray) – Integrais de repulsão eletrônica representando integrais de dois elétrons
-
open_shell (bool) – Um sinalizador que especifica se as configurações das metades esquerda e direita das cadeias de bits devem ser mantidas separadas. Se
False, as cadeias de caracteres CI das metades esquerda e direita das cadeias de bits são combinadas em um único conjunto de configurações exclusivas e usadas para os subespaços alfa e beta. -
spin_sq (float | None) – Valor-alvo do spin total ao quadrado para o estado fundamental, . Se for
None, nenhum spin será imposto. -
shift (float) – Mudança de nível para estados que têm spin diferente.
-
**kwargs - Argumentos de palavra-chave para passar para pyscf.fci.selected_ci.kernel_fixed_space
Retorna
- Energia mínima do cálculo SCI
- O estado fundamental da SCI
- Tupla contendo ocupações orbitais para orbitais de spin-up e spin-down. Formatado como:
(array([occ_a_0, ..., occ_a_N]), array([occ_b_0, ..., occ_b_N])) - Valor de expectativa do spin-quadrado
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)
Diagonalize o Hamiltoniano no subespaço definido pelas cadeias de CI.
Parâmetros
-
ci_strings (tuple[ndarray, ndarray]) – Par (strings_a, strings_b) de matrizes de cadeias de CI spin-alfa e cadeias de CI spin-beta cujo produto cartesiano fornece a base do subespaço no qual será realizada uma diagonalização.
-
one_body_tensor (ndarray) – O tensor de um corpo do Hamiltoniano.
-
two_body_tensor (ndarray) – O tensor de dois corpos do Hamiltoniano.
-
norb (int) – O número de orbitais espaciais.
-
nelec (tuple[int, int]) – Os números de elétrons alfa e beta.
-
spin_sq (float | None) – Valor-alvo do spin total ao quadrado para o estado fundamental. Se
None, nenhum giro será imposto. -
**kwargs -
Argumentos de palavras-chave para passar para pyscf.fci.selected_ci.kernel_fixed_space
Retorna
O resultado da diagonalização.
Tipo de retorno
Resultado SCI
solve_sci_batch
solve_sci_batch(ci_strings, one_body_tensor, two_body_tensor, norb, nelec, *, spin_sq=None, **kwargs)
Diagonalize o Hamiltoniano em subespaços.
Parâmetros
-
ci_strings (list[tuple[ndarray, ndarray]]) – Lista de pares (strings_a, strings_b) de matrizes de cadeias de caracteres CI spin-alfa e cadeias de caracteres CI spin-beta cujo produto cartesiano fornece a base do subespaço no qual será realizada uma diagonalização.
-
one_body_tensor (ndarray) – O tensor de um corpo do Hamiltoniano.
-
two_body_tensor (ndarray) – O tensor de dois corpos do Hamiltoniano.
-
norb (int) – O número de orbitais espaciais.
-
nelec (tuple[int, int]) – Os números de elétrons alfa e beta.
-
spin_sq (float | None) – Valor-alvo do spin total ao quadrado para o estado fundamental. Se
None, nenhum giro será imposto. -
**kwargs -
Argumentos de palavras-chave para passar para pyscf.fci.selected_ci.kernel_fixed_space
Retorna
Os resultados das diagonalizações nos subespaços 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)
Otimize os orbitais para produzir um estado fundamental mínimo.
O processo envolve a iteração em três etapas:
Para num_iters iterações:
- Gire as integrais com relação aos parâmetros,
k_flat - Diagonalize e aproxime a energia do estado fundamental e as amplitudes da função de onda
- Otimize o site
k_flatusando a descida do gradiente e as amplitudes da função de onda encontradas na Etapa 2
Consulte Sec. II A 4 para uma discussão mais detalhada sobre essa técnica de otimização orbital.
Parâmetros
-
bitstring_matrix (tuple[ndarray, ndarray] | ndarray) –
Um conjunto de configurações que define o subespaço no qual o Hamiltoniano será projetado e diagonalizado.
Isso pode ser especificado de duas maneiras:
- Matriz de bitstring: Um 2D
numpy.ndarraydeboolvalores, em que cada linha representa uma bitstring. As configurações de spin-up devem ocupar os índices de coluna(N, N/2], e as configurações de spin-down devem ocupar os índices de coluna(N/2, 0], em queNé o número de qubits. - Cadeias de caracteres CI: Uma tupla de duas sequências contendo representações inteiras de determinantes de spin-up e spin-down, respectivamente. O formato esperado é
([a_str_0, ..., a_str_N], [b_str_0, ..., b_str_M]).
- Matriz de bitstring: Um 2D
-
hcore (ndarray) – Matriz hamiltoniana central que representa integrais de elétrons únicos
-
eri (ndarray) – Integrais de repulsão eletrônica representando integrais de dois elétrons
-
k_flat (ndarray) – 1D matriz que define a transformação orbital,
K. A matriz deve especificar o triângulo superior do operador de transformação antissimétrica na ordem principal da linha, excluindo a diagonal. -
open_shell (bool) – Um sinalizador que especifica se as configurações das metades esquerda e direita das cadeias de bits devem ser mantidas separadas. Se
False, as cadeias de caracteres CI das metades esquerda e direita das cadeias de bits são combinadas em um único conjunto de configurações exclusivas e usadas para os subespaços alfa e beta. -
spin_sq (float) – Valor-alvo do spin total ao quadrado para o estado fundamental
-
num_iters (int) – O número de iterações da otimização orbital a ser realizada
-
num_steps_grad (int) – O número de etapas de descida de gradiente a serem executadas durante cada iteração de otimização
-
learning_rate (float) – A taxa de aprendizado a ser usada durante a descida do gradiente
-
**kwargs -
Argumentos de palavras-chave para passar para pyscf.fci.selected_ci.kernel_fixed_space
Retorna
- A energia do estado fundamental encontrada durante a última iteração de otimização
- Uma matriz 1D otimizada que define a transformação orbital
- Tupla contendo ocupações orbitais para orbitais de spin-up e spin-down. Formatado como:
(array([occ_a_0, ..., occ_a_N]), array([occ_b_0, ..., occ_b_N]))
Tipo de retorno
rotate_integrals
rotate_integrals(hcore, eri, k_flat)
Execute uma transformação de similaridade nas integrais.
A transformação é descrita como:
Para obter mais informações sobre como e são gerados a partir de k_flat e aplicados às integrais de um e dois corpos, consulte Seção. II A 4.
Parâmetros
- hcore (ndarray) – Matriz hamiltoniana central que representa integrais de elétrons únicos
- eri (ndarray) – Integrais de repulsão eletrônica representando integrais de dois elétrons
- k_flat (ndarray) – 1D matriz que define a transformação orbital,
K. A matriz deve especificar o triângulo superior do operador de transformação antissimétrica na ordem principal da linha, excluindo a diagonal.
Retorna
- A matriz Hamiltoniana do núcleo rotacionado
- A matriz ERI rotacionada
Tipo de retorno