SuzukiTrotter
class qiskit.synthesis.SuzukiTrotter(order=2, reps=1, insert_barriers=False, cx_structure='chain', atomic_evolution=None, wrap=False, preserve_order=True, *, atomic_evolution_sparse_observable=False)
Bases: ProductFormula
La fórmula (de orden superior) del producto Suzuki-Trotter.
Las fórmulas de Suzuki-Trotter mejoran el error de la aproximación de Lie-Trotter. Por ejemplo, la descomposición de segundo orden es
Las descomposiciones de orden superior se basan en recursiones, véase la Ref. [1] para más detalles.
En esta implementación, los operadores se proporcionan como términos de suma de un operador de Pauli. Por ejemplo, en la descomposición de segundo orden de Suzuki-Trotter aproximamos
Referencias
[1] : D. Berry, G. Ahokas, R. Cleve y B. Sanders, "Efficient quantum algorithms for simulating sparse Hamiltonians" (2006). arXiv:quant-ph/0508139 [2] : N. Hatano y M. Suzuki, "Finding Exponential Product Formulas of Higher Orders" (2005). arXiv:math-ph/0506007
Parámetros
- order (int) – El orden de la fórmula del producto.
- reps (int) – El número de pasos temporales.
- insert_barriers (bool) – Si se insertan barreras entre las evoluciones atómicas.
- cx_structure (str) – La forma de disponer las compuertas CX para las evoluciones Pauli, puede ser
"chain", donde se utilizan conexiones de vecino próximo, o"fountain", donde todos los qubits están conectados a uno. Esto sólo tiene efecto cuandoatomic_evolution is None. - atomic_evolution (Callable[[QuantumCircuit, qiskit.quantum_info.Pauli |SparsePauliOp, float], None] | None) – Una función para aplicar la evolución de un
PaulioSparsePauliOpde sólo términos conmutativos, a un circuito. La función recibe tres argumentos: el circuito al que añadir la evolución, el operador Pauli a evolucionar y el tiempo de evolución. Por defecto, una sola evolución Pauli se descompone en una cadena de puertasCXy una sola puertaRZ. - wrap (bool) – Si envolver las evoluciones atómicas en objetos de puerta personalizados. Esto sólo tiene efecto cuando
atomic_evolution is None. - preserve_order (bool) – Si
False, permite reordenar los términos del operador para obtener potencialmente un circuito de evolución menos profundo. No es relevante cuando se sintetiza el operador con un solo término. - atomic_evolution_sparse_observable (bool) – Si se pasa un
atomic_evolutionpersonalizado que aún no admiteSparseObservables como entrada, establezca este argumento enFalsepara aplicar automáticamente una conversión aSparsePauliOp. Este argumento se admite hasta Qiskit 2.2, momento en el que todas las evoluciones atómicas deberán admitirSparseObservables como entrada.
Eleva
ValueError - Si la orden ni siquiera
Atributos
settings
Devuelve la configuración en un diccionario, que puede utilizarse para reconstruir el objeto.
Devuelve
Un diccionario que contiene los ajustes de esta fórmula de producto.
Eleva
NotImplementedError - Si se establece una evolución atómica personalizada, que no se puede serializar.
Métodos
expand
expand(evolution)
Expandir el Hamiltoniano en una secuencia Suzuki-Trotter de puertas dispersas.
Por ejemplo, el Hamiltoniano H = IX + ZZ para un tiempo de evolución t y 1 repetición para una fórmula de orden 2 se descompondría en una lista de 3 tuplas que contienen (pauli, indices, rz_rotation_angle), es decir:
("X", [0], t), ("ZZ", [0, 1], 2t), ("X", [0], t)Tenga en cuenta que el ángulo de rotación contiene un factor de 2, de modo que la evolución de un e e de Pauli a lo largo del tiempo , que es , se representa mediante (P, indices, 2 * t).
Para N repeticiones, esta secuencia se repetiría N veces y los coeficientes se dividirían por N.
Parámetros
evolution (PauliEvolutionGate) – La puerta de la evolución para expandirse.
Devuelve
La red Pauli implementando la expansión Trotter.
Tipo de retorno
synthesize
synthesize(evolution)
Sintetizar a PauliEvolutionGate.
Parámetros
evolution (PauliEvolutionGate) – La puerta de la evolución para sintetizar.
Devuelve
Un circuito que pone en práctica la evolución.
Tipo de retorno