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

Basi: ProductFormula

La formula del prodotto Suzuki-Trotter (di ordine superiore).

Le formule di Suzuki-Trotter migliorano l'errore dell'approssimazione di Lie-Trotter. Ad esempio, la decomposizione del secondo ordine è

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

Le decomposizioni di ordine superiore si basano su ricorsioni, vedi Rif. [1] per maggiori dettagli.

In questa implementazione, gli operatori sono forniti come termini di somma di un operatore di Pauli. Ad esempio, nella decomposizione di Suzuki-Trotter del secondo ordine approssimiamo

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

Riferimenti

[1] : D. Berry, G. Ahokas, R. Cleve e B. Sanders, "Efficient quantum algorithms for simulating sparse Hamiltonians" (2006). arXiv:quant-ph/0508139 [2] : N. Hatano e M. Suzuki, "Trovare formule di prodotti esponenziali di ordine superiore" (2005). arXiv:math-ph/0506007

Parametri

  • order (int) – L'ordine della formula del prodotto.
  • reps (int) – Il numero di passi temporali.
  • insert_barriers (bool) – Inserire o meno barriere tra le evoluzioni atomiche.
  • cx_structure (str) – La disposizione delle porte CX per le evoluzioni di Pauli può essere "chain", in cui si utilizzano connessioni vicine, oppure "fountain", in cui tutti i qubit sono collegati a uno. Questo ha effetto solo quando atomic_evolution is None.
  • Pauliatomic_evolution (Callable[[QuantumCircuit, qiskit.quantum_info.Pauli |SparsePauliOp, float], None] | None) – Una funzione che applica l'evoluzione di un singolo termine, o SparsePauliOp solo dei termini commutativi, a un circuito. La funzione accetta tre argomenti: il circuito a cui aggiungere l'evoluzione, l'operatore di Pauli da far evolvere e il tempo di evoluzione. Per impostazione predefinita, una singola evoluzione di Pauli viene scomposta in una catena di CX gate e in un singolo RZ gate.
  • wrap (bool) – Se avvolgere le evoluzioni atomiche in oggetti gate personalizzati. Questo ha effetto solo quando atomic_evolution is None.
  • preserve_order (bool) – Se False, consente di riordinare i termini dell'operatore per ottenere potenzialmente un circuito di evoluzione più breve. Non è rilevante quando si sintetizza l'operatore con un singolo termine.
  • atomic_evolution_sparse_observable (bool) – Se viene passato un atomic_evolution personalizzato, che non supporta ancora il formato SparseObservablecome input, impostare questo argomento a False per applicare automaticamente una conversione a SparsePauliOp. Questo argomento è supportato fino a quando Qiskit 2.2, a questo punto tutte le evoluzioni atomiche devono supportare SparseObservables come input.

Aumenti

ValueError - Se l'ordine non è nemmeno


Attributi

settings

Restituisce le impostazioni in un dizionario, che può essere usato per ricostruire l'oggetto.

Risultati

Un dizionario contenente le impostazioni di questa formula di prodotto.

Aumenti

NotImplementedError - Se viene impostata un'evoluzione atomica personalizzata, che non può essere serializzata.


Metodi

expand

expand(evolution)

GitHub

Espandere l'hamiltoniana in una sequenza Suzuki-Trotter di porte rade.

Ad esempio, l'hamiltoniana H = IX + ZZ per un tempo di evoluzione t e 1 ripetizione per una formula di ordine 2 verrebbe decomposta in una lista di 3 tuple contenenti (pauli, indices, rz_rotation_angle), ovvero:

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

Si noti che l'angolo di rotazione contiene un fattore 2, per cui l'evoluzione nel tempo di un' PP e di Pauli tt, che è eitPe^{itP}, è rappresentata da (P, indices, 2 * t).

Per N ripetizioni, questa sequenza viene ripetuta N volte e i coefficienti vengono divisi per N.

Parametri

evolution (PauliEvolutionGate) – Il cancello dell'evoluzione per espandersi.

Risultati

La rete di Pauli che implementa l'espansione di Trotter.

Tipo di restituzione

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

synthesize

synthesize(evolution)

GitHub

Sintetizzare un PauliEvolutionGate.

Parametri

evolution (PauliEvolutionGate) – Il cancello di evoluzione per sintetizzare.

Risultati

Un circuito che implementa l'evoluzione.

Tipo di restituzione

QuantumCircuit

Questa pagina è stata utile?
Segnala un bug, un errore di battitura o richiedi contenuti su GitHub.