LieTrotter
class qiskit.synthesis.LieTrotter(reps=1, insert_barriers=False, cx_structure='chain', atomic_evolution=None, wrap=False, preserve_order=True, *, atomic_evolution_sparse_observable=False)
Basi: SuzukiTrotter
La formula del prodotto di Lie-Trotter.
La formula di Lie-Trotter approssima l'esponenziale di due operatori non commutativi con i prodotti dei loro esponenziali fino a un errore del secondo ordine:
In questa implementazione, gli operatori sono forniti come termini di somma di un operatore di Pauli. Ad esempio, 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
- 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, permette 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 quel punto tutte le evoluzioni atomiche devono supportareSparseObservables come input.
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