Skip to main content
IBM Quantum Platform

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)

GitHub

Bases: ProductFormula

A fórmula do produto Suzuki-Trotter (de ordem superior).

As fórmulas de Suzuki-Trotter melhoram o erro da aproximação de Lie-Trotter. Por exemplo, a decomposição de segunda ordem é

eA+BeB/2eAeB/2.e^{A + B} \approx e^{B/2} e^{A} e^{B/2}.

As decomposições de ordem superior são baseadas em recursões, consulte a Ref. [1] para obter mais detalhes.

Nessa implementação, os operadores são fornecidos como termos de soma de um operador Pauli. Por exemplo, na decomposição de Suzuki-Trotter de segunda ordem, aproximamos

eit(XI+ZZ)=eit/2XIeitZZeit/2XI+O(t3).e^{-it(XI + ZZ)} = e^{-it/2 XI}e^{-it ZZ}e^{-it/2 XI} + \mathcal{O}(t^3).

Referências

[1] : D. Berry, G. Ahokas, R. Cleve e B. Sanders, "Efficient quantum algorithms for simulating sparse Hamiltonians" (Algoritmos quânticos eficientes para simular hamiltonianos esparsos) (2006). arXiv:quant-ph/0508139 [2] : N. Hatano e M. Suzuki, "Finding Exponential Product Formulas of Higher Orders" (2005). arXiv:math-ph/0506007

Parâmetros

  • order (int) – A ordem da fórmula do produto.
  • reps (int) – O número de etapas de tempo.
  • insert_barriers (bool) – Se deve inserir barreiras entre as evoluções atômicas.
  • cx_structure (str) – O modo de organizar as portas CX para as evoluções de Pauli pode ser "chain", em que são usadas as conexões do próximo vizinho, ou "fountain", em que todos os qubits são conectados a um. Isso só tem efeito quando atomic_evolution is None.
  • atomic_evolution (Callable[[QuantumCircuit, qiskit.quantum_info.Pauli |SparsePauliOp, float], None] | None) – Uma função para aplicar a evolução de um único Pauliou SparsePauliOp de apenas termos comutáveis, a um circuito. A função recebe três argumentos: o circuito ao qual anexar a evolução, o operador Pauli a ser evoluído e o tempo de evolução. Por padrão, uma única evolução de Pauli é decomposta em uma cadeia de portas CX e uma única porta RZ .
  • wrap (bool) – Se deve envolver as evoluções atômicas em objetos de porta personalizados. Isso só tem efeito quando atomic_evolution is None.
  • preserve_order (bool) – Se False, permite reordenar os termos do operador para potencialmente produzir um circuito de evolução mais raso. Não é relevante ao sintetizar o operador com um único termo.
  • atomic_evolution_sparse_observable (bool) – Se for passado um atomic_evolution personalizado, que ainda não oferece suporte a SparseObservables como entrada, defina esse argumento como False para aplicar automaticamente uma conversão para SparsePauliOp. Esse argumento é suportado até o Qiskit 2.2, momento em que todas as evoluções atômicas são obrigadas a suportar SparseObservables como entrada.

Aumentos

ValueError - Se o pedido não for uniforme


Atributos

settings

Retorna as configurações em um dicionário, que pode ser usado para reconstruir o objeto.

Retorna

Um dicionário que contém as configurações dessa fórmula de produto.

Aumentos

NotImplementedError - Se for definida uma evolução atômica personalizada, que não pode ser serializada.


Métodos

expand

expand(evolution)

GitHub

Expanda o Hamiltoniano em uma sequência Suzuki-Trotter de portas esparsas.

Por exemplo, o hamiltoniano H = IX + ZZ para um tempo de evolução t e 1 repetição para uma fórmula de ordem 2 seria decomposto em uma lista de 3 tuplas contendo (pauli, indices, rz_rotation_angle), ou seja:

("X", [0], t), ("ZZ", [0, 1], 2t), ("X", [0], t)

Observe que o ângulo de rotação contém um fator de 2, de modo que a evolução de um estado de Pauli PP ao longo do tempo tt, que é eitPe^{itP}, é representada por (P, indices, 2 * t).

Para N repetições, essa sequência seria repetida N vezes e os coeficientes divididos por N.

Parâmetros

evolution (PauliEvolutionGate) – O portão de evolução para expandir.

Retorna

A rede Pauli implementando a expansão de Trotter.

Tipo de retorno

list[ tuple[ str, list[ int ], ParameterValueType ]]

synthesize

synthesize(evolution)

GitHub

Sintetizar a PauliEvolutionGate.

Parâmetros

evolution (PauliEvolutionGate) – A porta de evolução para sintetizar.

Retorna

Um circuito que implementa a evolução.

Tipo de retorno

QuantumCircuit

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