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)
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 è
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
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 quandoatomic_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, oSparsePauliOpsolo 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 diCXgate e in un singoloRZgate.- 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_evolutionpersonalizzato, che non supporta ancora il formatoSparseObservablecome input, impostare questo argomento aFalseper applicare automaticamente una conversione aSparsePauliOp. Questo argomento è supportato fino a quando Qiskit 2.2, a questo punto tutte le evoluzioni atomiche devono supportareSparseObservables 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)
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' e di Pauli , che è , è 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
synthesize
synthesize(evolution)
Sintetizzare un PauliEvolutionGate.
Parametri
evolution (PauliEvolutionGate) – Il cancello di evoluzione per sintetizzare.
Risultati
Un circuito che implementa l'evoluzione.
Tipo di restituzione