Skip to main content
IBM Quantum Platform

Backend Quimb TEBD

qiskit_addon_mpf.backends.quimb_tebd

A quimb-basato sul backend TEBD.

Avvertenza

Questo backend è disponibile solo se le dipendenze opzionali sono state installate:

pip install "qiskit-addon-mpf[quimb]"
TEBDEvolverUn algoritmo TEBD per l'evoluzione di un MPO interno.
MPOStateUn MPO che applica il calibro Vidal.

Metodo sottostante

Questo modulo fornisce un backend a evoluzione temporale per il calcolo dei coefficienti MPF dinamici basato sull'algoritmo di decimazione a blocchi a evoluzione temporale (TEBD) [1] implementato nella libreria di reti tensoriali quimb libreria di reti tensoriali.

Le classi fornite da questo modulo hanno due scopi:

  1. Collegando quimball'interfaccia definita da qiskit_addon_mpf.backends.
  2. Estendere l'implementazione quimbl'implementazione di TEBD per gestire uno stato interno MPO (piuttosto che MPS) (si veda anche State per maggiori dettagli).

Nel senso più semplice, questo modulo fornisce un'estensione semplice dell'algoritmo TEBD per far evolvere uno stato interno di MPO. Pertanto, se si desidera utilizzare questo backend per il proprio algoritmo MPF dinamico, è necessario codificare l'hamiltoniana che si desidera far evolvere nel tempo, in forma quimb-forma nativa. Per essere più concreti, la classe TEBDEvolver (che è una sottoclasse di quimb.tensor.TEBD) lavora con un'Hamiltoniana nella forma di un quimb.tensor.LocalHam1D. Quimb fornisce una serie di metodi di convenienza per la costruzione di tali hamiltoniani nel suo modulo quimb.tensor.tensor_builder modulo. Se nessuna di queste soddisfa le vostre esigenze, potete considerare l'utilizzo della classe LayerModel che implementa alcuni metodi di conversione da oggetti nativi di Qiskit.


Esempio di codice

Questa sezione mostra un semplice esempio per iniziare a usare questo backend. L'esempio mostra come creare le tre funzioni di fabbrica necessarie per il file setup_dynamic_lse().

Per prima cosa, creiamo il sito identity_factory che deve corrispondere al IdentityStateFactory protocollo. Lo facciamo semplicemente utilizzando la funzione quimb.tensor.MPO_identity() e avvolgendo il risultato quimb.tensor.MatrixProductOperator con la nostra interfaccia MPOState personalizzata.

>>> from qiskit_addon_mpf.backends.quimb_tebd import MPOState
>>> from quimb.tensor import MPO_identity
>>> num_qubits = 10
>>> identity_factory = lambda: MPOState(MPO_identity(num_qubits))

Quindi, prima di poter definire i parametri ExactEvolverFactory e ApproxEvolverFactory dobbiamo definire l'hamiltoniana che vogliamo far evolvere nel tempo. In questo caso, si sceglie semplicemente uno dei metodi quimbdi uno dei metodi di convenienza.

>>> from quimb.tensor import ham_1d_heis
>>> hamil = ham_1d_heis(num_qubits, 0.8, 0.3, cyclic=False)

Possiamo ora costruire le fabbriche di istanze di evoluzione temporale esatta e approssimata. Per farlo, si può semplicemente usare functools.partial() per vincolare i valori predefiniti dell'inizializzatore TEBDEvolver riducendolo all'interfaccia corretta, come previsto dai metodi ExactEvolverFactory e ApproxEvolverFactory rispettivamente.

>>> from functools import partial
>>> from qiskit_addon_mpf.backends.quimb_tebd import TEBDEvolver
>>> exact_evolver_factory = partial(
...     TEBDEvolver,
...     H=hamil,
...     dt=0.05,
...     order=4,
... )

Si noti come abbiamo fissato il valore di dt a un piccolo passo temporale e abbiamo utilizzato una decomposizione Suzuki-Trotter di ordine superiore per imitare l'esatta evoluzione temporale di cui sopra.

Di seguito, non fissiamo il valore di dt e utilizziamo solo una formula di Suzuki-Trotter del secondo ordine per l'evoluzione temporale approssimata. Inoltre, specifichiamo anche alcune impostazioni di troncamento.

>>> approx_evolver_factory = partial(
...     TEBDEvolver,
...     H=hamil,
...     order=2,
...     split_opts={"max_bond": 10, "cutoff": 1e-5},
... )

Naturalmente, non ci si limita agli esempi qui illustrati e si invita a giocare con le altre impostazioni fornite dall'applicazione quimb.tensor.TEBD dell'implementazione.


Limitazioni

Infine, segnaliamo alcune limitazioni note sul tipo di hamiltoniani che possono essere trattati da questo backend:

  • tutte le interazioni devono essere unidimensionali
  • le interazioni devono essere aciliche

Risorse

[1]: https://en.wikipedia.org/wiki/Time-evolving _block_decimazione

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