Skip to main content
IBM Quantum Platform

Programas de fondo

qiskit_addon_mpf.backends

Backends opcionales para el algoritmo DynamicMPF algoritmo.


Disponibilidad

La posibilidad de utilizar un determinado backend depende de la disponibilidad de la biblioteca de redes tensoriales subyacente. Esto puede afirmarse fácilmente en tiempo de ejecución utilizando los siguientes indicadores:

HAS_QUIMB

Indica si la dependencia opcional quimb está instalada.

HAS_TENPY

Indica si la dependencia opcional tenpy está instalada.


Programas de fondo

Dependiendo de la disponibilidad (véase más arriba), están disponibles los siguientes backends:

quimb_tebdA quimb-basado en TEBD.
quimb_layersUn backend de evolución temporal por capas que utiliza quimb.
quimb_circuitUn backend de evolución temporal basado en circuitos que utiliza quimb.
tenpy_tebdA tenpy-basado en TEBD.
tenpy_layersUn backend de evolución temporal por capas que utiliza tenpy.

Interfaz

La interfaz implementada por cualquiera de estos backends opcionales se compone de las siguientes clases:

Evolucionar

class Evolver

GitHub

Bases: ABC

La interfaz para los algoritmos de evolución temporal utilizados en DynamicMPF.

Esta interfaz de evolución temporal es utilizada por el DynamicMPF.lhs y DynamicMPF.rhs y debe hacer evolucionar en el tiempo un objeto State bajo su capucha. El mecanismo exacto del algoritmo se describe con más detalle en DynamicMPF, Statey setup_dynamic_lse().

conjugate

abstract property

Tipo: bool

Devuelve si esta instancia de evolvente temporal actúa sobre el lado derecho.

evolved_time

abstract property

Tipo: float

Devuelve el tiempo de evolución actual.

step

abstract step()

GitHub

Realiza un único paso temporal de este algoritmo de evolución temporal.

Esto debería actuar sobre el objeto State (para el que esta interfaz no prescribe ningún nombre). Si esta instancia del algoritmo de evolución temporal debe evolucionar el State desde el lado izquierdo o derecho, depende del valor de conjugate.

Tipo de retorno

Ninguna

Estado

class State

GitHub

Bases: ABC

La interfaz para el DynamicMPF.evolution_state.

Este estado de evolución temporal se comparte entre las instancias LHS y RHS Evolver de la instancia DynamicMPF instancia. En la mayoría de los casos en los que un backend concreto que implemente esta interfaz se base en redes tensoriales, este estado será un operador de producto matricial (MPO). Esto se debe a que la mayoría de los algoritmos de evolución temporal normalmente evolucionan un estado producto matricial (MPS) como se muestra pictóricamente a continuación, donde los bloques de evolución temporal (U#) se aplican sucesivamente a un MPS unidimensional (S#). Aquí, la red tensorial crece hacia la derecha a medida que avanza el tiempo.

MPS Evolution

S0┄┄┲━━━━┱┄┄┄┄┄┄┄┄┲━━━━┱┄
│   ┃ U1 ┃        ┃ U5 ┃
S1┄┄┺━━━━┹┄┲━━━━┱┄┺━━━━┹┄
│          ┃ U3 ┃
S2┄┄┲━━━━┱┄┺━━━━┹┄┲━━━━┱┄ ...
│   ┃ U2 ┃        ┃ U6 ┃
S3┄┄┺━━━━┹┄┲━━━━┱┄┺━━━━┹┄
│          ┃ U4 ┃
S4┄┄┄┄┄┄┄┄┄┺━━━━┹┄┄┄┄┄┄┄┄

Sin embargo, en nuestro caso, queremos que dos motores de evolución temporal compartan un mismo estado. Para conseguirlo, podemos hacer que uno de ellos evolucione el estado desde la derecha (igual que antes, U#), pero que el segundo lo haga desde la izquierda (V#). Esto requiere que el estado también tenga enlaces que vayan en esa dirección, convirtiéndolo en un MPO bidimensional (M#) en lugar del MPS unidimensional de antes.

MPO Evolution

    ┄┲━━━━┱┄┄┄┄┄┄┄┄┲━━━━┱┄┄M0┄┄┲━━━━┱┄┄┄┄┄┄┄┄┲━━━━┱┄
     ┃ V5 ┃        ┃ V1 ┃  │   ┃ U1 ┃        ┃ U5 ┃
    ┄┺━━━━┹┄┲━━━━┱┄┺━━━━┹┄┄M1┄┄┺━━━━┹┄┲━━━━┱┄┺━━━━┹┄
            ┃ V3 ┃         │          ┃ U3 ┃
... ┄┲━━━━┱┄┺━━━━┹┄┲━━━━┱┄┄M2┄┄┲━━━━┱┄┺━━━━┹┄┲━━━━┱┄ ...
     ┃ V6 ┃        ┃ V2 ┃  │   ┃ U2 ┃        ┃ U6 ┃
    ┄┺━━━━┹┄┲━━━━┱┄┺━━━━┹┄┄M3┄┄┺━━━━┹┄┲━━━━┱┄┺━━━━┹┄
            ┃ V4 ┃         │          ┃ U4 ┃
    ┄┄┄┄┄┄┄┄┺━━━━┹┄┄┄┄┄┄┄┄┄M4┄┄┄┄┄┄┄┄┄┺━━━━┹┄┄┄┄┄┄┄┄

overlap

abstract overlap(initial_state)

GitHub

Calcula el solapamiento de este estado con el estado inicial proporcionado.

Aviso

Una implementación concreta de este método debería generar un error TypeError si el objeto initial_state proporcionado no está soportado por el backend que lo implementa.

Parámetros

initial_state (Any) – el estado inicial con el que calcular el solapamiento.

Eleva

TypeError - si el estado inicial proporcionado tiene un tipo incompatible.

Devuelve

La superposición de este estado con el proporcionado.

Tipo de retorno

complejo

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