Skip to main content
IBM Quantum Platform

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)

GitHub

Bases: object

As amplitudes e os determinantes que descrevem um estado quântico.

Parâmetros

amplitudes

Tipo: ndarray

Uma matriz M×NM \times N em que M=M = len(ci_strs_a) e NN = 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

classmethod load(filename)

GitHub

Carrega um objeto SCIState de um arquivo.npz.

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

orbital_occupancies()

GitHub

Ocupações orbitais médias.

Tipo de retorno

tupla [*ndarray*, ndarray ]

rdm

rdm(rank=1, spin_summed=False)

GitHub

Calcular a matriz de densidade reduzida.

Parâmetros

Tipo de retorno

ndarray

save

save(filename)

GitHub

Salve o objeto SCIState em um arquivo.npz.

spin_square

spin_square()

GitHub

Retorno do giro ao quadrado.

Tipo de retorno

Valor flutuante

bitstring_matrix_to_ci_strs

bitstring_matrix_to_ci_strs(bitstring_matrix, open_shell=False)

GitHub

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 bool representaçõ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

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

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.

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

GitHub

Aplique o conjunto de operadores de transição às configurações representadas em bitstring_matrix.

Parâmetros

  • bitstring_matrix (ndarray) – Uma matriz 2D de bool representaçõ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, +, - e n strings 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

ndarray

solve_fermion

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

GitHub

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.ndarray de bool valores, 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 que N é 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]).
  • 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, S2=s(s+1)S^2 = s(s + 1). Se for None, nenhum spin será imposto.

  • shift (float) – Mudança de nível para estados que têm spin diferente. (H+shiftS2)ψ>=Eψ>(H + shift * S^2)|ψ> = E|ψ>

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

GitHub

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)

GitHub

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)

GitHub

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_flat usando 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.ndarray de bool valores, 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 que N é 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]).
  • 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

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

rotate_integrals

rotate_integrals(hcore, eri, k_flat)

GitHub

Execute uma transformação de similaridade nas integrais.

A transformação é descrita como:

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

Para obter mais informações sobre como U^\hat{U} e U^\hat{U^{\dagger}} 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

tupla [*ndarray*, ndarray ]

Esta página foi útil?
Relate um bug, erro de digitação ou solicite conteúdo no GitHub.