Skip to main content
IBM Quantum Platform

TeNPy Back-end TEBD

qiskit_addon_mpf.backends.tenpy_tebd

A tenpy-com base no backend TEBD.

Cuidado

A dependência opcional TeNPy foi oferecida anteriormente sob uma licença GPLv3. Desde o lançamento do v1.0.4 em 2 de outubro de 2024, ele foi oferecido sob a licença Apache v2. A licença deste pacote é compatível apenas com as versões licenciadas do Apache do TeNPy.

Aviso

Esse backend só estará disponível se as dependências opcionais tiverem sido instaladas:

pip install "qiskit-addon-mpf[tenpy]"
TEBDEvolverUm algoritmo TEBD para a evolução de um MPO interno.
MPOStateUma classe mediadora para fazer com que o TeNPy's MPO corresponda à State interface.
MPS_neel_stateConstrói o estado Néel como um MPS.

Método subjacente

Esse módulo fornece um backend de evolução temporal para calcular coeficientes MPF dinâmicos com base no algoritmo [1] de decimação de bloco com evolução temporal (TEBD) implementado na tenpy biblioteca de rede de tensores.

As classes fornecidas por esse módulo têm duas finalidades:

  1. Conectando tenpyà interface definida por qiskit_addon_mpf.backends.
  2. Extensão da implementação do tenpypara lidar com um estado MPO interno (em vez de MPS) (consulte também State para obter mais detalhes).

No sentido mais simples, esse módulo fornece uma extensão direta do algoritmo TEBD para desenvolver um estado MPO interno. Portanto, se você quiser usar esse backend para seu algoritmo MPF dinâmico, deverá codificar o Hamiltoniano que deseja evoluir no tempo, em uma tenpy-forma nativa. Para ser mais concreto, a classe TEBDEvolver (que é uma subclasse de tenpy.algorithms.tebd.TEBDEngine) trabalha com um Hamiltoniano na forma de um Model. TeNPy fornece vários métodos convenientes para a construção de tais Hamiltonianos em seu módulo tenpy.models módulo. Se nenhuma dessas opções atender às suas necessidades, você pode considerar o uso da classe LayerModel que implementa alguns métodos de conversão de objetos nativos do Qiskit.


Exemplo de código

Esta seção mostra um exemplo simples para que você comece a usar esse backend. O exemplo mostra como criar as três funções de fábrica necessárias para a função setup_dynamic_lse().

Em primeiro lugar, definimos o Hamiltoniano que gostaríamos de fazer evoluir no tempo. Aqui, simplesmente escolhemos um dos métodos de conveniência do tenpyde sua empresa.

>>> from tenpy.models import XXZChain2
>>> hamil = XXZChain2(
...     {
...         "L": 10,
...         "Jz": 0.8,
...         "Jxx": 0.7,
...         "hz": 0.3,
...         "bc_MPS": "finite",
...         "sort_charge": False,
...     }
... )

Em seguida, podemos criar o site identity_factory , que deve corresponder ao IdentityStateFactory protocolo. Fazemos isso usando o método de conveniência initialize_from_lattice() que usa a rede subjacente ao Hamiltoniano que acabamos de definir como sua única entrada.

>>> from functools import partial
>>> from qiskit_addon_mpf.backends.tenpy_tebd import MPOState
>>> identity_factory = partial(MPOState.initialize_from_lattice, hamil.lat),

Agora podemos construir o ExactEvolverFactory e ApproxEvolverFactory fábricas de instâncias de evolução temporal. Para fazer isso, podemos simplesmente vincular os valores predefinidos do TEBDEvolver reduzindo-o à interface correta, conforme esperado pelos respectivos protocolos de função.

>>> from qiskit_addon_mpf.backends.tenpy_tebd import TEBDEvolver
>>> exact_evolver_factory = partial(
...     TEBDEvolver,
...     model=hamil,
...     dt=0.05,
...     options={
...         "order": 4,
...         "preserve_norm": False,
...     },
... )

Observe como fixamos o valor de dt em uma pequena etapa de tempo e usamos uma decomposição Suzuki-Trotter de ordem superior para imitar a evolução exata do tempo acima.

Abaixo, não fixamos o valor dt e usamos apenas uma fórmula Suzuki-Trotter de segunda ordem para a evolução aproximada do tempo. Além disso, também especificamos algumas configurações de truncamento.

>>> approx_evolver_factory = partial(
...     TEBDEvolver,
...     model=hamil,
...     options={
...         "order": 2,
...         "preserve_norm": False,
...         "trunc_params": {
...             "chi_max": 10,
...             "svd_min": 1e-5,
...             "trunc_cut": None,
...         },
...     },
... )

Obviamente, você não está limitado aos exemplos mostrados aqui, e recomendamos que você brinque com as outras configurações fornecidas pela implementação TeNPy’s TEBDEngine implementação.


Limitações

Por fim, apontamos algumas limitações conhecidas sobre os tipos de Hamiltonianos que podem ser tratados por esse backend:

  • todas as interações devem ser unidimensionais
  • as interações devem usar condições de limite finito

Recursos

[1]: https://en.wikipedia.org/wiki/Time-evolving _block_decimation

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