Skip to main content
IBM Quantum Platform

Evolución

class Evolution(num_modes, operator, time=1.0, *, synthesis=None, atomic=False)

Bases: FermionicGate

Implementa la evolución en el tiempo de un operador.

Dado un HH fermiónico operator y una evolución tttime , esta puerta implementa el operador unitario

U=e−itH.U = e^{-i t H}.

Para que UU sea unitario, HH debe ser hermitiano. Esto es responsabilidad de quien llama y no se verifica; is_hermitian() puedes comprobarlo.

Nota

Descomponer esta puerta en el espacio fermiónico (en un circuito de puertas Evolution más pequeñas) es opcional, y es precisamente lo que regula el synthesis atributo. La puerta también puede pasarse directamente a la etapa de conversión de fermiones a qubits, que la mapea y la sintetiza en su totalidad, independientemente del número de términos que operator contenga. Véase synthesis.

Cuando se descompone (por ejemplo decompose(), mediante ), decide synthesis cómo hacerlo. El valor por defecto es FermionicLieTrotter, lo que divide la evolución grupo por grupo cuando se operator ha groups asignado (véase «Términos del operador de grupo: uso de la estructura del operador ») y, en caso contrario, término por término (exacto solo cuando los factores individuales conmutan entre sí). El proceso de transpilación puede alterar aún más la descomposición; por ejemplo QDriftTrotterization, sustituye la evolución por una muestra aleatoria de sus términos. Las puertas que emite son atomic, por lo que ya no synthesis se aplica a ellas.

Nota

La trayectoria de simulación del vector de estado no pasa por synthesis: eleva a potencia todo el conjunto exactamente operator . Por lo tanto, la simulación de esta puerta no da lugar a ningún error de Trotter, mientras que un circuito descompuesto sí lo hace, por lo general.

La inicialización de una instancia de esta puerta se puede realizar con los argumentos que se indican a continuación.

Parámetros

  • num_modes (int) – el número de modos fermiónicos sobre los que actúa esta puerta.
  • operator (OperatorTrait) – el operador hermitiano HH bajo el cual se realiza la evolución temporal de los modos fermiónicos sobre los que se actúa.
  • time (float) – El tiempo de evolución tt al introducir el exponente de e−itHe^{-i t H}. Un valor negativo hace que la evolución se realice hacia atrás en el tiempo.
  • synthesis (F2FSynthesisPlugin | None) – el método de síntesis de fermión a fermión con el que se descompone esta puerta, si es que llega a descomponerse. Si ( None por defecto), se utiliza una instancia FermionicLieTrotter .
  • atomic (bool) – si esta puerta es un factor totalmente descompuesto que no debe desglosarse más en el espacio fermiónico. Consulte FermionicGate.atomic.

Atributos

operator

El operador bajo el cual deben evolucionar en el tiempo los modos fermiónicos sobre los que se actúa.


Métodos

inverse

inverse(annotated=False)

Devuelve la inversa de esta puerta, e+itHe^{+i t H}.

Parámetros

annotated (bool) – ignorado. La inversa de esta puerta es otra Evolution, por lo que nunca tiene por qué ser una AnnotatedOperation.

Devuelve

Una Evolution puerta que genera el mismo operador durante el tiempo negado.

Tipo de retorno

Evolución


Métodos del protocolo

_apply_unitary_placed_

_apply_unitary_placed_(vec, norb, nelec, copy, freg_indices)

Se aplica exp(-i * time * operator) tras reasignar el operador a los modos globales.

El operador se reetiqueta según sus modos globales, se convierte a un y ffsim.FermionOperator se pasa a ffsim.linear_operator(), para luego aplicarse al vector mediante scipy.sparse.linalg.expm_multiply(). Un operador que aún no sea un FermionOperator se convierte primero mediante el protocolo SupportsFermionOperator , de modo que cualquier tipo de operador de este paquete pueda evolucionar.

Parámetros

  • vec (np.ndarray) – el vector de estado sobre el que actuar.
  • norb (int) – el número de orbitales espaciales del vector de estado global.
  • nelec (int |tuple[int, int]) – o bien un único número entero para un sistema sin espín, o bien un par de números enteros que representan el número de fermiones de espín alfa y de espín beta. Un número entero indica la interpretación del modo sin espín (los modos norb del operador son orbitales alfa); un par indica la (orb, spin) interpretación del modo con espín de los modos 2 * norb del operador.
  • copy (bool) – si hay que copiar el vector antes de realizar operaciones con él.
  • freg_indices (list[int]) – los índices de los modos absolutos (globales) a los que se asignan los modos locales de esta puerta. El operador se reetiqueta, pasando de sus modos locales a estos modos globales, antes de aplicarse, lo que refleja la pasada de síntesis del transpilador.

Devuelve

El vector transformado.

Subidas

  • MissingOptionalLibraryError – si ffsim no está instalado.
  • ValueError – si el operador no conserva el sector (norb, nelec) . La evolución bajo solo exp(-i * time * operator) da como resultado un operador unitario cuando operator mapea el sector sobre sí mismo, por lo que ffsim rechaza cualquier operador que no conserve ni el número de partículas ni la componente z del espín.

Tipo de retorno

np.ndarray

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