Skip to main content
IBM Quantum Platform

TeNPy Backend TEBD

qiskit_addon_mpf.backends.tenpy_tebd

A tenpy-basado en TEBD.

Precaución

La dependencia opcional TeNPy se ofrecía anteriormente bajo una licencia GPLv3. A partir de la publicación de v1.0.4 el 2 de octubre de 2024, se ha ofrecido bajo la licencia Apache v2. La licencia de este paquete sólo es compatible con las versiones con licencia de Apache de TeNPy.

Aviso

Este backend sólo está disponible si se han instalado las dependencias opcionales:

pip install "qiskit-addon-mpf[tenpy]"
TEBDEvolverUn algoritmo TEBD para evolucionar un MPO interno.
MPOStateUna clase mediadora para hacer que TeNPy's MPO coincida con la State interfaz.
MPS_neel_stateConstruye el estado Néel como un MPS.

Método subyacente

Este módulo proporciona un backend de evolución temporal para calcular coeficientes MPF dinámicos basados en el algoritmo de decimación en bloque con evolución temporal (TEBD) [1] implementado en la biblioteca de redes tensoriales tenpy biblioteca de redes tensoriales.

Las clases que proporciona este módulo tienen dos finalidades:

  1. Conectando tenpya la interfaz establecida por qiskit_addon_mpf.backends.
  2. Ampliación de tenpypara manejar un estado MPO interno (en lugar de MPS) (véase también State para más detalles).

En el sentido más simple, este módulo proporciona una extensión directa del algoritmo TEBD para evolucionar un estado MPO interno. Por lo tanto, si desea utilizar este backend para su algoritmo MPF dinámico, debe codificar el Hamiltoniano que desea evolucionar en el tiempo, en una forma nativa tenpy-forma nativa. Para ser más concretos, la clase TEBDEvolver (que es una subclase de tenpy.algorithms.tebd.TEBDEngine) trabaja con un Hamiltoniano en forma de Model. TeNPy proporciona una serie de métodos prácticos para construir dichos Hamiltonianos en su módulo tenpy.models módulo. Si ninguno de ellos satisface tus necesidades, puedes considerar el uso de la clase LayerModel que implementa algunos métodos de conversión de objetos nativos de Qiskit.


Ejemplo de código

Esta sección muestra un ejemplo sencillo para empezar a utilizar este backend. El ejemplo muestra cómo crear las tres funciones de fábrica necesarias para la función setup_dynamic_lse().

En primer lugar, definimos el hamiltoniano que queremos hacer evolucionar en el tiempo. En este caso, simplemente elegimos uno de los métodos tenpy.

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

A continuación, podemos crear el identity_factory que tiene que coincidir con el IdentityStateFactory protocolo. Para ello utilizamos el método de conveniencia initialize_from_lattice() que toma como única entrada la red subyacente al Hamiltoniano que acabamos de definir.

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

Ahora podemos construir el ExactEvolverFactory y ApproxEvolverFactory fábricas de instancias de evolución temporal. Para ello, podemos simplemente vincular los valores predefinidos del TEBDEvolver inicializador, reduciéndolo a la interfaz correcta esperada por los respectivos protocolos de función.

>>> 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,
...     },
... )

Obsérvese cómo hemos fijado el valor dt en un paso de tiempo pequeño y hemos utilizado una descomposición Suzuki-Trotter de orden superior para imitar la evolución temporal exacta anterior.

A continuación, no fijamos el valor de dt y sólo utilizamos una fórmula de Suzuki-Trotter de segundo orden para la evolución temporal aproximada. Además, también especificamos algunos ajustes de truncamiento.

>>> 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,
...         },
...     },
... )

Por supuesto, usted no está limitado a los ejemplos que se muestran aquí, y le animamos a jugar con los otros ajustes proporcionados por TeNPy’s TEBDEngine implementación.


Limitaciones

Por último, señalamos algunas limitaciones conocidas sobre qué tipo de Hamiltonianos pueden ser tratados por este backend:

  • todas las interacciones deben ser unidimensionales
  • las interacciones deben utilizar condiciones de contorno finitas

Recursos

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

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