Skip to main content
IBM Quantum Platform

Backend

qiskit_addon_mpf.backends

Backend opzionali per l'algoritmo DynamicMPF algoritmo.


Disponibilità

La possibilità di utilizzare un determinato backend dipende dalla disponibilità della libreria di rete tensoriale sottostante. Questo può essere facilmente affermato in fase di esecuzione utilizzando i seguenti indicatori:

HAS_QUIMB

Indica se la dipendenza opzionale quimb è installata.

HAS_TENPY

Indica se la dipendenza opzionale tenpy è installata.


Backend

A seconda della disponibilità (vedi sopra), sono disponibili i seguenti backend:

quimb_tebdA quimb-basato sul backend TEBD.
quimb_layersUn backend a evoluzione temporale a strati che utilizza quimb.
quimb_circuitUn backend ad evoluzione temporale basato su circuiti che utilizza quimb.
tenpy_tebdA tenpy-basato sul backend TEBD.
tenpy_layersUn backend a evoluzione temporale a strati che utilizza tenpy.

Interfaccia

L'interfaccia implementata da uno qualsiasi di questi backend opzionali è costituita dalle seguenti classi:

Evolver

class Evolver

GitHub

Basi: ABC

L'interfaccia per gli algoritmi di evoluzione temporale utilizzati all'interno di DynamicMPF.

Questa interfaccia di evoluzione temporale è utilizzata dai programmi DynamicMPF.lhs e DynamicMPF.rhs e dovrebbe far evolvere nel tempo un oggetto State sotto il suo cappuccio. Il meccanismo esatto dell'algoritmo è descritto in dettaglio in DynamicMPF, State, e setup_dynamic_lse().

conjugate

abstract property

Tipo: bool

Restituisce se questa istanza di time-evolver agisce sul lato destro.

evolved_time

abstract property

Tipo: float

Restituisce il tempo di evoluzione corrente.

step

abstract step()

GitHub

Eseguire un singolo passo temporale di questo algoritmo di evoluzione temporale.

Questo dovrebbe agire sull'oggetto referenziato internamente State (per il quale questa interfaccia non prescrive alcun nome). Se questa istanza dell'algoritmo di evoluzione temporale debba far evolvere il State dal lato destro o sinistro, dipende dal valore di conjugate.

Tipo di restituzione

Nessuna

Stato

class State

GitHub

Basi: ABC

L'interfaccia per il file DynamicMPF.evolution_state.

Questo stato di evoluzione temporale è condiviso tra le istanze di LHS e RHS Evolver dell'istanza DynamicMPF istanza. Nella maggior parte dei casi in cui un backend concreto che implementa questa interfaccia è basato su reti tensoriali, questo stato sarà un operatore di prodotto matriciale (MPO). Questo perché la maggior parte degli algoritmi di evoluzione temporale normalmente evolve uno stato prodotto da una matrice (MPS), come mostrato nella figura seguente, in cui i blocchi di evoluzione temporale (U#) vengono applicati successivamente a un MPS unidimensionale (S#). In questo caso, la rete tensoriale cresce verso destra con il passare del tempo.

MPS Evolution

S0┄┄┲━━━━┱┄┄┄┄┄┄┄┄┲━━━━┱┄
│   ┃ U1 ┃        ┃ U5 ┃
S1┄┄┺━━━━┹┄┲━━━━┱┄┺━━━━┹┄
│          ┃ U3 ┃
S2┄┄┲━━━━┱┄┺━━━━┹┄┲━━━━┱┄ ...
│   ┃ U2 ┃        ┃ U6 ┃
S3┄┄┺━━━━┹┄┲━━━━┱┄┺━━━━┹┄
│          ┃ U4 ┃
S4┄┄┄┄┄┄┄┄┄┺━━━━┹┄┄┄┄┄┄┄┄

Tuttavia, nel nostro caso, vogliamo che due motori di evoluzione temporale condividano un unico stato. Per ottenere questo risultato, possiamo fare in modo che uno di loro evolva lo stato da destra (proprio come prima, U#), ma che il secondo evolva lo stato da sinistra (V#). Ciò richiede che lo stato abbia anche legami che vanno in quella direzione, rendendolo un MPO bidimensionale (M#) anziché l'MPS unidimensionale di prima.

MPO Evolution

    ┄┲━━━━┱┄┄┄┄┄┄┄┄┲━━━━┱┄┄M0┄┄┲━━━━┱┄┄┄┄┄┄┄┄┲━━━━┱┄
     ┃ V5 ┃        ┃ V1 ┃  │   ┃ U1 ┃        ┃ U5 ┃
    ┄┺━━━━┹┄┲━━━━┱┄┺━━━━┹┄┄M1┄┄┺━━━━┹┄┲━━━━┱┄┺━━━━┹┄
            ┃ V3 ┃         │          ┃ U3 ┃
... ┄┲━━━━┱┄┺━━━━┹┄┲━━━━┱┄┄M2┄┄┲━━━━┱┄┺━━━━┹┄┲━━━━┱┄ ...
     ┃ V6 ┃        ┃ V2 ┃  │   ┃ U2 ┃        ┃ U6 ┃
    ┄┺━━━━┹┄┲━━━━┱┄┺━━━━┹┄┄M3┄┄┺━━━━┹┄┲━━━━┱┄┺━━━━┹┄
            ┃ V4 ┃         │          ┃ U4 ┃
    ┄┄┄┄┄┄┄┄┺━━━━┹┄┄┄┄┄┄┄┄┄M4┄┄┄┄┄┄┄┄┄┺━━━━┹┄┄┄┄┄┄┄┄

overlap

abstract overlap(initial_state)

GitHub

Calcolare la sovrapposizione di questo stato con lo stato iniziale fornito.

Avvertenza

Un'implementazione concreta di questo metodo dovrebbe sollevare un problema TypeError se l'oggetto initial_state fornito non è supportato dal backend che lo implementa.

Parametri

initial_state (Any) – lo stato iniziale con cui calcolare la sovrapposizione.

Aumenti

TypeError - se lo stato iniziale fornito ha un tipo incompatibile.

Risultati

La sovrapposizione di questo stato con quello fornito.

Tipo di restituzione

complesso

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