Vai al contenuto principale

Simulare la natura

Guarda questo video di Olivia Lanes sulla simulazione della natura con i computer quantistici, oppure aprilo in una finestra separata su YouTube.

Questa lezione utilizza i contenuti del seguente tutorial:

Tutorial sulla mitigazione degli errori a scala utility con amplificazione probabilistica degli errori

Introduzione

Una delle applicazioni più promettenti dei computer quantistici è la loro capacità di simulare fenomeni naturali. In questa lezione esploreremo come i computer quantistici vengono utilizzati per risolvere problemi di dinamica quantistica — in particolare, come ci aiutano a capire l'evoluzione temporale di un sistema quantistico.

Prima faremo una panoramica generale dei passi coinvolti in queste simulazioni. Poi esamineremo un esempio concreto: l'esperimento presentato da IBM nel 2023, che ha introdotto il concetto di quantum utility. Questo esperimento costituisce un ottimo caso di studio per comprendere i passi pratici e le implicazioni della simulazione della dinamica quantistica su hardware quantistico reale. Al termine, avrai un quadro più chiaro di come i ricercatori affrontano queste sfide e perché la simulazione quantistica è così promettente per far avanzare la nostra comprensione del mondo naturale.

Richard Feynman tenne una conferenza molto influente al Caltech nel 1959. Il titolo, ormai famoso, era "There's Plenty of Room at the Bottom" — un giocoso riferimento alle vaste possibilità inesplorate alla scala microscopica. Feynman sosteneva che gran parte della fisica a livello atomico e subatomico era ancora tutta da scoprire.

Il significato di quella conferenza crebbe negli anni '80, con il progresso tecnologico. In quel periodo, Feynman tornò su quelle idee in un'altra importante conferenza al Caltech, presentando un articolo intitolato "Simulating Nature with Computers". Lì pose una domanda audace: i computer potrebbero essere usati per eseguire simulazioni esatte che replicano il comportamento della natura a livello quantistico? Feynman suggerì che, invece di affidarci ad approssimazioni grossolane per modellare i processi atomici, potremmo usare computer che sfruttano le leggi stesse della meccanica quantistica — non solo per modellare la natura, ma per emularla.

È proprio questo tipo di simulazione fisica che esamineremo in questa lezione.

Ricorda questo grafico temporale introdotto in un episodio precedente. A un'estremità dello spettro troviamo i problemi semplici da risolvere, che non richiedono la velocità aggiuntiva che potrebbe offrire il calcolo quantistico.

Un diagramma che mostra lo spettro dei possibili problemi, da quelli facili a quelli difficili, da quelli che non richiedono un computer quantistico a quelli che richiedono una macchina fault-tolerant, indicando che ci concentriamo sui problemi nel mezzo.

All'estremità opposta si trovano problemi estremamente difficili, che richiedono macchine quantistiche completamente fault-tolerant — una tecnologia non ancora disponibile. Fortunatamente, si ritiene che molti problemi di simulazione si collochino a metà di questo spettro, all'interno del range in cui i computer quantistici di oggi possono già essere applicati efficacemente. Ci sono molte ragioni per essere entusiasti e incuriositi da questa prospettiva, poiché simulare la natura è alla base di un'ampia gamma di applicazioni promettenti.

Le informazioni seguenti coprono il flusso di lavoro generale nelle simulazioni di sistemi naturali e poi un'istanza specifica del flusso, per replicare i risultati di uno studio ben noto.

Flusso di lavoro generale

Prima di poter applicare il calcolo quantistico a questi ambiti entusiasmanti, è importante comprendere i passaggi fondamentali di un tipico flusso di lavoro di simulazione:

  1. Identificare l'Hamiltoniano del sistema
  2. Codifica dell'Hamiltoniano
  3. Preparazione dello stato
  4. Evoluzione temporale dello stato
  5. Ottimizzazione del circuito
  6. Esecuzione del circuito
  7. Post-elaborazione

Il processo inizia con l'identificazione di un sistema quantistico di interesse. Questo aiuta a determinare l'Hamiltoniano che ne governa l'evoluzione temporale, nonché una descrizione significativa delle sue proprietà iniziali, ovvero il suo stato. Successivamente, occorre selezionare un metodo appropriato per implementare l'evoluzione temporale di questo stato. Nota che i primi quattro passi di questo flusso fanno tutti parte del passo Mapping nel framework di Qiskit patterns.

Dopo aver impostato il circuito di evoluzione temporale, le fasi successive riguardano l'esecuzione vera e propria dell'esperimento. Questo include tipicamente l'ottimizzazione del circuito quantistico che implementa l'algoritmo di evoluzione temporale, l'esecuzione del circuito su hardware quantistico e la post-elaborazione dei risultati. Questi corrispondono agli ultimi tre passi del framework di Qiskit patterns.

Discuteremo il significato di ciascuno di questi passi prima di passare alla scrittura del codice.

1. Identificare l'Hamiltoniano del sistema

Il primo passo essenziale per eseguire un esperimento di simulazione è identificare l'Hamiltoniano che descrive il sistema. In molti casi, l'Hamiltoniano è ben noto. Tuttavia, spesso lo costruiamo sommando i contributi energetici delle parti più piccole del sistema. Questo si esprime tipicamente come una somma di termini:

H=iNHiH=\sum_i^N {H_i}

dove ogni termine HiH_i agisce su uno degli NN sottosistemi locali (come una singola particella o un piccolo gruppo di particelle) dell'Hamiltoniano totale HH. Nel caso di particelle elementari indistinguibili, è importante determinare se il sistema riguarda fermioni o bosoni: i fermioni obbediscono al Principio di Esclusione di Pauli, il che significa che due fermioni identici non possono occupare lo stesso stato quantistico (come gli elettroni). A differenza dei fermioni, più bosoni possono esistere nello stesso stato quantistico; questa differenza influenza la statistica del sistema e il modo in cui deve essere modellato.

In pratica, le persone sono spesso interessate a sistemi fisici in cui si assume che gli elementi siano ben separati o etichettati, e quindi distinguibili, come gli spin su un reticolo.

Un reticolo con spin e una molecola legata usando elettroni, che sono fermioni.

Questo sistema è composto da spin di dipoli magnetici disposti su un reticolo, trattati come particelle distinguibili identificandole tramite la loro posizione. Il sistema è descritto dal Modello di Ising a Campo Trasverso, e il suo Hamiltoniano è costruito come somma di due parti:

H=iNHi=J<i,j>ZiZj+hi=0NXiH = \sum_i^N {H_i} = J \sum_{<i,j>}Z_iZ_j + h\sum_{i=0}^N X_i

Dove il primo termine rappresenta l'energia di interazione tra spin vicini. Qui <i,j><i,j> indica che sommiamo su tutte le coppie di spin direttamente connesse nel reticolo, ZiZ_i e ZjZ_j sono le matrici di Pauli-Z, che rappresentano lo stato degli spin nei siti ii e jj, e JJ è la costante di accoppiamento, che definisce la forza di questa interazione. Il secondo termine rappresenta l'influenza di un campo magnetico esterno applicato all'intero sistema. Qui XiX_i è la matrice di Pauli-X che agisce sullo spin individuale nel sito ii, e hh indica l'intensità di questo campo esterno.

2. Codifica dell'Hamiltoniano

Il passo successivo è tradurre l'Hamiltoniano in una forma che un computer quantistico possa elaborare: questa operazione si chiama codifica. Il processo di codifica dipende in modo critico dal tipo di particelle nel sistema: distinguibili o indistinguibili, e fermioni o bosoni nel caso di particelle indistinguibili.

Un diagramma di flusso che mostra diversi tipi possibili di mapping per diversi tipi di sistemi, inclusi bosoni, fermioni e particelle distinguibili come gli spin su un reticolo.

Se hai un sistema con particelle distinguibili, come spin 1/21/2 fissati su un reticolo (che abbiamo visto brevemente sopra), l'Hamiltoniano è spesso già scritto in un linguaggio compatibile con i qubit. L'operatore di Pauli-Z, ad esempio, descrive naturalmente lo spin su o giù, e non è necessaria alcuna codifica speciale.

Quando si simulano particelle indistinguibili (fermioni o bosoni), è necessario applicare una trasformazione di codifica. Queste particelle vengono descritte all'interno di un particolare framework matematico chiamato seconda quantizzazione, che traccia il numero di occupazione di ciascuno stato quantistico introducendo operatori di creazione e annichilazione: l'operatore di creazione a^i\hat{a}_i^\dagger aggiunge una particella allo stato ii mentre l'operatore di annichilazione a^i\hat{a}_i rimuove una particella dallo stato ii. Basandosi su questo framework di seconda quantizzazione, i fermioni possono essere trasformati con i metodi di Bravyi-Kitaev e Jordan-Wigner. La trasformazione di Jordan-Wigner definisce l'operatore fermionico di creazione f^j=(k<j(Zk))(Xj+iYj2)\hat{f}_j^\dagger = \Bigl( \prod\limits_{k \lt j}{(-Z_k)} \Bigr)\Bigl( \frac{X_j + i Y_j}{2} \Bigr) che riempie il jj-esimo stato quantistico con un fermione, e l'operatore fermionico di annichilazione f^j=(k<j(Zk))(XjiYj2)\hat{f}_j= \Bigl( \prod\limits_{k \lt j}{(-Z_k)} \Bigr)\Bigl( \frac{X_j - i Y_j}{2} \Bigr) che svuota un fermione dal jj-esimo stato. Puoi trovare maggiori dettagli sulla trasformazione di Jordan-Wigner nel nostro Quantum Computing in Practice, episodio 5 - Mapping. Analogamente, anche i bosoni richiedono i propri metodi di codifica, come la trasformazione di Holstein-Primakoff, per essere rappresentati da qubit.

In definitiva, che il percorso sia diretto o richieda una traduzione, l'obiettivo è lo stesso: esprimere l'Hamiltoniano del sistema nella forma di operatori di spin di Pauli che un computer quantistico possa comprendere ed eseguire.

3. Preparazione dello stato

Dopo aver codificato l'Hamiltoniano desiderato nel set di gate del computer quantistico, il passo successivo fondamentale è selezionare uno stato quantistico iniziale appropriato da cui partire per la simulazione. La scelta dello stato iniziale influenza non solo la convergenza degli algoritmi variazionali come il Variational Quantum Eigensolver (VQE), ma incide anche sull'accuratezza e sull'efficienza dell'evoluzione temporale e del campionamento. In sostanza, lo stato iniziale serve come punto di partenza per il calcolo, gettando le basi per estrarre osservabili utili dal sistema quantistico modellato. Idealmente, questo stato dovrebbe rappresentare una configurazione fisicamente significativa del sistema in esame.

Per molte simulazioni di chimica quantistica, lo stato di Hartree-Fock può essere un buon punto di partenza. Nel linguaggio della seconda quantizzazione, lo stato di Hartree-Fock (ϕHF|\phi\rangle_{HF}) viene creato applicando gli operatori di creazione (a^i\hat{a}_i^\dagger) per ciascuno degli orbitali a più bassa energia allo stato vuoto (vac=01...0k...0N=0N|vac\rangle = |0_1 ... 0_k ... 0_N\rangle = |0\rangle ^{\otimes N}), uno stato senza elettroni.

ϕHF=i=1ka^i0N=a^1...a^k01...0k...0N|\phi\rangle_{HF} = \prod\limits_{i=1}^k \hat{a}_i^\dagger |0\rangle ^{\otimes N} = \hat{a}_1^\dagger ... \hat{a}_k^\dagger |0_1 ... 0_k ... 0_N\rangle

Inoltre, un ansatz facilmente preparabile con una sovrapposizione significativa con il vero stato fondamentale può servire come buono stato iniziale per problemi di chimica, come trovare l'energia dello stato fondamentale.

Più in generale, possiamo scrivere un arbitrario stato a nn qubit come sovrapposizione di stati della base computazionale ci∣c_i\rangle con coefficienti aia_i, soddisfacendo le condizioni di normalizzazione. Preparare tale stato può essere generalmente affrontato applicando un operatore specifico O^\hat{O} allo stato iniziale, che per convenzione è tipicamente lo stato della base standard tutto-zero.

ψ=i=02n1aici=O^0nwithi=02n1ai2=1|\psi\rangle = \sum_{i=0}^{2^n-1}{a_i |c_i\rangle}=\hat{O}|0\rangle^{\otimes n}\\ \text{with} \qquad \sum_{i=0}^{2^n-1}{|a_i^2|}=1

Tuttavia, questo processo richiede spesso un numero esponenziale di gate CNOT, rendendolo in generale molto costoso in termini di risorse. Ci concentriamo spesso sulla preparazione di stati iniziali per i quali le risorse di implementazione richieste sono più modeste. Per questo motivo, preferiamo spesso stati iniziali meno complessi. Una scelta comune e pratica è lo stato prodotto, in cui i qubit non sono entangled e può essere preparato usando solo operazioni a singolo qubit, riducendo significativamente le esigenze di risorse della preparazione dello stato e la complessità. 4. Evoluzione temporale dello stato

Ora che lo stato iniziale è impostato, possiamo finalmente iniziare la simulazione vera e propria — esaminare come lo stato del sistema ϕ(t=0)|\phi(t=0)\rangle si trasforma in ϕ(t)|\phi(t)\rangle dopo un certo tempo tt. In meccanica quantistica, questa evoluzione è descritta da un'unica operazione matematica chiamata operatore di evoluzione temporale:

U(t)=eiHtU(t) = e^{-iHt}

dove abbiamo posto =1\hbar=1 per convenzione. Applicando questo operatore al nostro stato iniziale otteniamo lo stato finale: ϕ(t)=eiHtϕ(t=0)|\phi(t)\rangle = e^{-iHt}|\phi(t=0)\rangle

Tuttavia, costruire un circuito quantistico che implementi direttamente l'operatore completo eiHte^{-iHt} è tipicamente impossibile quando il nostro Hamiltoniano è una somma di parti diverse. È quindi necessaria la Trotterizzazione.

In termini semplici, la Trotterizzazione è una tecnica per approssimare l'esponenziale di una matrice (in questo caso l'Hamiltoniano HH), specialmente quando l'esponente contiene operatori non commutanti ([HA,HB]0[H_A, H_B] \neq 0). Spesso l'Hamiltoniano HH è composto da più operatori che non commutano. In questo caso, non è possibile separare i loro esponenziali:

ei(HA+HB)teiHAteiHBte^{-i(H_A + H_B)t} \neq e^{-iH_A t}e^{-iH_B t}

Un approccio utile è applicare alternativamente i loro esponenziali di evoluzione temporale su piccoli intervalli t/nt/n, per un totale di nn volte. Nel caso di questi due contributi non commutanti, scriveremo

eiHt(eiHAt/neiHBt/n)ne^{−i H t}\approx \left(e^{−i H_A t/n}e^{−i H_B t/n}\right)^n

Un circuito quantistico che mostra operatori di evoluzione temporale Trotterizzati: operatori suddivisi in piccoli pezzi.

L'errore introdotto da questa approssimazione si chiama errore di Trotter. Possiamo ridurre questo errore aumentando nn, ma questo ha un costo. Esistono anche formule più avanzate di ordine superiore (del secondo ordine e altre varianti). Ad esempio, la formula del secondo ordine offre una migliore precisione applicando i passi in uno schema simmetrico.

First order:eiHt(jeiHit/n)nSecond order:eiHt(j=1NeiHjt/2n)n(k=N1eiHkt/2n)n\begin{aligned} \text{First order:} & \qquad e^{-iHt}\approx \left(\prod_j{e^{-iH_i t/n}}\right)^n\\ \text{Second order:} & \qquad e^{-iHt}\approx \left(\prod_{j=1}^N{e^{-iH_j t/2n}}\right)^n\left(\prod_{k=N}^1{e^{-iH_k t/2n}}\right)^n \end{aligned}

Qui NN è il numero di termini non commutanti HjH_j nell'Hamiltoniano da suddividere in questo modo, e nn è il numero di piccoli passi temporali in cui questa evoluzione viene spezzata. Nota l'ordine inverso degli operatori nel secondo prodotto nel trattamento del secondo ordine.

Consulta la sezione sulla Trotterizzazione nel corso Quantum Diagonalization Algorithms per maggiori dettagli. 5. Ottimizzazione del Circuit

Dopo aver generato il circuito Trotterizzato, il passo di mapping è completo e possiamo procedere all'ottimizzazione del circuito. Questo processo comprende diversi compiti chiave:

  • Stabilire un layout di Qubit che mappa i qubit astratti del circuito ai qubit fisici sull'hardware. Questo passo è necessario perché l'architettura hardware ha spesso vincoli di connettività specifici, mentre i progetti di circuiti quantistici assumono tipicamente che qualsiasi qubit possa interagire con qualsiasi altro.
  • Inserire gate di swap ove necessario per abilitare le interazioni tra qubit che non sono direttamente connessi sul dispositivo.
  • Tradurre i gate del circuito in istruzioni ISA (Instruction Set Architecture) che l'hardware può eseguire direttamente.
  • Eseguire ottimizzazioni del Circuit per ridurre la profondità del circuito e il numero di gate. Questa ottimizzazione può essere applicata anche prima, sul circuito virtuale, prima che i qubit siano assegnati a connessioni hardware specifiche.

È importante notare che gran parte di questo processo di ottimizzazione è gestita automaticamente dagli strumenti di Qiskit. Esploreremo esattamente come funziona più avanti in questa lezione.

6. Esecuzione del Circuit

Dopo aver completato il passo di ottimizzazione, siamo pronti a eseguire il circuito usando una primitiva. Stiamo considerando un esperimento di simulazione in cui l'obiettivo è capire come certe proprietà del sistema cambiano nel tempo. A questo scopo, la primitiva Estimator è la scelta più appropriata, poiché consente di misurare i valori di aspettazione degli osservabili corrispondenti a queste proprietà.

Successivamente, utilizziamo opzioni che includono tecniche di soppressione e mitigazione degli errori, per migliorare la precisione dell'Estimator. Infine, eseguiamo l'esperimento per raccogliere i risultati.

7. Post-elaborazione

L'ultimo passo consiste nel post-elaborare i dati raccolti. Questo comporta l'estrazione dei valori di aspettazione misurati o, se è stata usata la primitiva Sampler, la distribuzione di probabilità campionata nella base computazionale. Quando sono necessari solo i valori di aspettazione degli osservabili rilevanti, questi possono essere ottenuti direttamente dalla primitiva Estimator, disponibili sia come risultati grezzi sia con la mitigazione degli errori applicata. Spesso, questi valori di aspettazione misurati servono come punto di partenza per ulteriori calcoli che coinvolgono altre quantità di interesse. Tali calcoli aggiuntivi tipicamente non richiedono calcolo quantistico e possono essere eseguiti in modo efficiente su un computer classico.

Replicare il paper sulla "Utility"

nota

Questa parte è una guida di alto livello al tutorial Mitigazione degli errori a scala utility con amplificazione probabilistica degli errori, che replica i risultati del paper Evidence for the Utility of Quantum Computing Before Fault Tolerance. Ti suggeriamo vivamente di aprire il tutorial di riferimento insieme a questa sessione.

Esamineremo ora un esempio concreto tratto da un paper molto influente pubblicato da IBM nel 2023, intitolato Evidence for the Utility of Quantum Computing Before Fault Tolerance, spesso chiamato "Utility paper".

La copertina dell&#39;articolo che chiamiamo utility paper, pubblicato sulla rivista Nature.

Alla sua pubblicazione, questo lavoro è diventato rapidamente uno studio di riferimento nella comunità del calcolo quantistico. La sua tesi centrale è che un computer quantistico rumoroso, che utilizza 127 qubit e 2.880 gate, può produrre valori di aspettazione accurati per circuiti quantistici che vanno oltre la portata dei metodi di simulazione classica a forza bruta, i quali tentano la simulazione esatta degli stessi circuito.

Questo studio è stato particolarmente significativo perché ha dimostrato che i computer quantistici possono essere usati per verificare o confrontare risultati con metodi di simulazione classica approssimati, come gli algoritmi di tensor network — specialmente in scenari in cui la soluzione esatta non è nota in anticipo.

Un altro aspetto notevole di questo lavoro è che è stato ampiamente riprodotto: ricercatori e utenti hanno ora la possibilità di replicare e verificare l'esperimento usando i sistemi quantistici accessibili via cloud di IBM e il framework software Qiskit. Di seguito ti guideremo attraverso i passi per eseguire questa replica, esaminando il tutorial di IBM passo dopo passo.

In questa lezione discutiamo i passi specifici necessari per tradurre il problema in input che un dispositivo quantistico possa elaborare. Ci concentriamo sulla simulazione della dinamica della magnetizzazione totale in un sistema di spin di dipoli magnetici disposti su un reticolo, soggetti a un campo magnetico esterno. Questo sistema può essere descritto da un modello di Ising con campo magnetico trasversale. Lo rappresentiamo usando un circuito quantistico parametrizzato, dove i parametri corrispondono ai valori regolabili delle interazioni spin-spin (ZZZZ) e alla forza del campo magnetico trasversale esterno (BxB_x, parametrizzato usando XX).

Spin su un reticolo che puntano verso l&#39;alto o verso il basso.

Poiché questa serie si intitola Quantum Computing in Practice, copriremo ulteriori dettagli delle tecniche sperimentali usate per migliorare la qualità dei risultati. Una procedura importante riguarda l'identificazione e la rimozione dei qubit "cattivi" — quelli con basse fedeltà di gate o brevi tempi di decoerenza — che potrebbero influire significativamente sull'esito dell'esperimento. Tali qubit problematici possono derivare da una cattiva calibrazione o da interazioni con sistemi a due livelli (TLS). La loro rimozione altera la topologia nativa dell'hardware, modificando di fatto il reticolo su cui viene simulato il sistema.

Discuteremo inoltre come costruire il circuito quantistico parametrizzato che implementa l'evoluzione temporale del sistema usando la Trotterizzazione. Una parte fondamentale di questo processo è l'identificazione dei layer di entanglement all'interno del circuito, che svolgono un ruolo cruciale nella principale tecnica di mitigazione degli errori.

Passo 1 di Qiskit patterns: Map

Il tutorial esegue il passo di mapping in modo simile all'approccio generale descritto sopra. Specificamente per questo problema, il tutorial:

  • Crea un circuito del modello di Ising parametrizzato
  • Crea layer di entanglement e rimuove i qubit cattivi
  • Genera una versione Trotterizzata del circuito

Nel tutorial, iniziamo creando una serie di funzioni di supporto all'inizio del notebook. Queste funzioni sono progettate per semplificare il processo man mano che procediamo. Non sono una parte obbligatoria della procedura, ma è una buona pratica comune quando si lavora su esperimenti simili: suddividere il problema in componenti gestibili. Le funzioni includono

  • Rimozione degli accoppiamenti di qubit
  • Definizione degli accoppiamenti di qubit
  • Costruzione degli accoppiamenti di layer
  • Costruzione del layer di entanglement
  • Definizione del circuito Trotterizzato

Approfondiamo ora alcuni argomenti correlati a queste funzioni. Accoppiamenti di layer

Gli accoppiamenti di layer definiscono come i qubit interagiscono con i loro vicini durante la simulazione. I nostri dispositivi quantistici utilizzano un layout heavy-hexagonal, uno schema distintivo per connettere i qubit. All'interno di questo layout, le connessioni tra qubit — note come "archi" — possono essere divise in tre insiemi distinti. È importante che non ci siano due connessioni nello stesso insieme che condividano un qubit. Questa organizzazione risponde a un vincolo hardware fondamentale: su un computer quantistico reale, un qubit può partecipare a un solo gate a due qubit in qualsiasi momento.

Una mappa con codice colore che mostra i layer degli accoppiamenti. Si enfatizza che i gate a due qubit possono essere eseguiti su tutto il computer quantistico, anche se su un dato qubit può essere eseguito un solo gate a due qubit alla volta.

Strutturando tutte le connessioni in tre layer separati, i gate a due qubit possono essere applicati all'intero dispositivo in tre turni successivi. Questo garantisce che nessun qubit sia coinvolto in più di un gate per layer. Questi gate implementano l'interazione ZZ nel modello di Ising e vengono ripetuti a ogni passo temporale della simulazione (ogni passo di Trotter).

Inoltre, viene impiegata una tecnica chiamata twirling per modificare le caratteristiche del rumore nel dispositivo. Il twirling trasforma il rumore in modo tale che anche semplici modelli di rumore diventino rappresentazioni più accurate degli errori fisici. Questo raffinamento consente una caratterizzazione più precisa del rumore, che può poi essere sfruttata per migliorare le strategie di mitigazione degli errori. Rimozione dei qubit "cattivi"

Il passo successivo consiste nel rimuovere i qubit "cattivi" dall'elenco dei qubit fisici disponibili per l'esperimento. Un qubit può diventare "cattivo" per vari motivi. A volte è semplicemente una questione di calibrazione scadente, che può essere corretta ricalibrando. In altri casi, il problema è più complesso e legato a quello che è noto come un difetto di sistema a due livelli (TLS). Questi difetti TLS causano fluttuazioni nei parametri del qubit e nel rilassamento. Risolvere questo problema richiede spesso di riscaldare l'intero sistema e poi raffreddarlo di nuovo — un processo che richiede tempo e non è praticabile quando si accede all'hardware quantistico da remoto via cloud.

Per ora, l'approccio più semplice è escludere questi qubit problematici dal pool di qubit fisici che verranno utilizzati nell'esperimento. IBM Quantum Platform® rende facile identificare quali qubit stanno sottoperformando su una QPU. Puoi aprire la QPU e visualizzarne le caratteristiche direttamente sulla piattaforma, oppure scaricare i dati dalla piattaforma come file CSV. Successivamente, crea un elenco di qubit da escludere e rimuovili dall'insieme totale di qubit fisici sul dispositivo.

Il layout di un computer quantistico con un qubit poco performante indicato in rosa.

Rimuovere i qubit inaffidabili garantisce che il comportamento del sistema sia più prevedibile, migliorando la precisione dell'esperimento. Consente inoltre una migliore modellazione del rumore, essenziale per implementare strategie efficaci di mitigazione degli errori. Circuit Trotterizzato

È ora il momento di costruire il nostro circuito Trotterizzato. Come discusso in precedenza, la Trotterizzazione suddivide l'evoluzione temporale in passi discreti, quindi dobbiamo scegliere quanti passi usare. Per questo esempio, utilizzeremo sei passi. In generale, l'approccio consiste nel bilanciare l'errore di Trotter — un errore di approssimazione introdotto dall'algoritmo — con gli errori causati dalla decoerenza. Aumentare il numero di passi di Trotter riduce l'errore di approssimazione ma richiede circuiti quantistici più profondi, che sono più suscettibili al rumore da decoerenza.

Il circuito sarà definito usando diversi parametri: il parametro theta che rappresenta la forza del campo magnetico esterno, gli accoppiamenti tra i layer, il numero di passi, il numero di qubit e, naturalmente, la scelta del Backend del dispositivo. Poiché la magnetizzazione del sistema dipende dalla forza del campo magnetico esterno, è utile eseguire la simulazione per diversi valori del campo magnetico. Questa variazione corrisponde a diversi angoli di rotazione per il gate RX nel circuito.

from qiskit.circuit import Parameter

num_steps = 6 #Trotter steps
theta = Parameter("theta")
circuit = trotter_circuit(
theta, layer_couplings, num_steps, qubits = good_qubits, backend = backend
)
num_params = 12

# 12 parameter values for Rx between [0,p/2].
#Reshape to outer product broadcast with observables

parameter_values = np.linespace(0,np.pi/2,num_params).reshape((num_params,1))
num_params = parameter_values.size

Passo 2 di Qiskit patterns: Optimize

Ora che abbiamo generato il nostro circuito, il passo successivo è ottimizzarlo. La prima parte di questo processo consiste nel definire un pass manager. Nel contesto dell'SDK di Qiskit, la transpilazione è il processo di trasformazione di un circuito di input in una forma adatta all'esecuzione su un dispositivo quantistico. Questa trasformazione avviene attraverso una sequenza di passi noti come transpiler pass. Un pass manager è un oggetto che contiene un elenco di questi transpiler pass e può applicarli a un circuito. Per crearne uno, inizializzi un PassManager con la lista desiderata di transpiler pass. In definitiva, il pass manager produce un circuito ISA — un circuito espresso in termini dell'Instruction Set Architecture (ISA) del Backend. Ciò significa che il circuito è rappresentato usando gate nativi dell'hardware del Backend, anche se non include ancora le informazioni di temporizzazione necessarie per eseguire il circuito sul dispositivo.

Passo 3 di Qiskit patterns: Execute using primitives

Ora è il momento di eseguire il nostro circuito. Useremo l'Estimator come strumento principale per questo esperimento perché il nostro obiettivo è misurare la magnetizzazione totale del sistema. L'Estimator è specificamente progettato per stimare i valori di aspettazione degli osservabili, rendendolo la scelta ideale in questo caso. In questa fase, è anche essenziale configurare le impostazioni di mitigazione degli errori. Applicheremo la Zero Noise Extrapolation (ZNE) per migliorare la precisione dei nostri risultati. Nel tutorial vedrai che specifichiamo due o più valori del fattore di rumore a cui valutare i modelli estrapolati, e selezioniamo "Probabilistic Error Amplification" (PEA) come metodo di amplificazione. PEA è preferita per questo esperimento perché scala significativamente meglio rispetto ad altre opzioni, il che è cruciale quando si lavora con sistemi di 100 o più qubit.

Questo è tutto ciò che serve per eseguire l'esperimento.

Intermezzo sulla mitigazione degli errori

Prima di procedere alla post-elaborazione, prendiamoci un momento per chiarire cosa si intende per Zero Noise Extrapolation (ZNE). Abbiamo toccato questo concetto negli episodi precedenti, ma vale la pena rivederlo brevemente. ZNE è una tecnica di mitigazione degli errori progettata per ridurre l'impatto del rumore sconosciuto che si verifica durante l'esecuzione dei circuiti quantistici, a condizione che questo rumore possa essere scalato in modo controllato. Il metodo si basa sull'assunzione che i valori di aspettazione scalino con il rumore secondo una funzione nota:

A(λ)=A(0)+k=0makλk+R,\langle A(\lambda)\rangle = \langle A(0)\rangle + \sum_{k=0}^m {a_k \lambda^k}+R,

dove λλ rappresenta la forza del rumore, che può essere intenzionalmente amplificata.

Il processo di implementazione di ZNE consiste nei seguenti passi:

  1. Amplifica il rumore del circuito per vari fattori di rumore λ1λ_1, λ2λ_2, … .
  2. Esegui ogni circuito con rumore amplificato per misurare i corrispondenti valori di aspettazione A(λ1)\langle A(\lambda_1)\rangle, A(λ2)\langle A(\lambda_2)\rangle, ….
  3. Estrapola questi risultati al limite di zero rumore \langle A(λ0)A(\lambda_0)\rangle.

Vengono mostrati grafici di un valore di aspettazione, dello stesso valore con rumore amplificato, e poi il valore estrapolato al caso di zero rumore.

Questa tecnica ci permette di stimare quale sarebbe il risultato in assenza di rumore, migliorando la precisione dei calcoli quantistici.

La sfida principale nell'implementare efficacemente ZNE è sviluppare un modello di rumore accurato per il valore di aspettazione e amplificare il rumore in modo controllato e ben compreso. Le tecniche comuni per l'amplificazione degli errori in ZNE includono lo scaling della durata dei pulse tramite calibrazione, la ripetizione dei gate usando cicli di identità, e l'aggiunta di rumore tramite campionamento di canali di Pauli — un metodo noto come Probabilistic Error Amplification (PEA).

Tra queste, PEA è spesso la scelta preferita per diverse ragioni:

  • Lo stretching dei pulse ha un costo computazionale elevato.
  • Il gate folding, che usa inserzioni di identità, non offre forti garanzie teoriche per la conservazione del bias del rumore.
  • PEA è applicabile a qualsiasi circuito eseguito con un fattore di rumore nativo, anche se richiede di apprendere il modello di rumore in anticipo.

Vengono mostrati tre metodi per amplificare il rumore per ZNE: pulse stretching, gate folding e probabilistic error amplification.

PEA opera sotto l'assunzione di un modello di rumore basato su layer simile a quello usato nella probabilistic error cancellation (PEC). Tuttavia, a differenza di PEC, evita l'overhead di campionamento esponenziale che tipicamente cresce con il rumore del circuito. Questa efficienza rende PEA un approccio pratico e robusto per l'amplificazione del rumore in ZNE, facilitando una mitigazione degli errori quantistici più affidabile. Per caratterizzare il modello di rumore, dobbiamo prima identificare i layer distinti di operazioni a due qubit all'interno del circuito. Per ciascuno di questi layer, applichiamo una procedura di Pauli twirling ai gate a due qubit, che aiuta a garantire che il rumore possa essere accuratamente descritto da un modello di rumore di smorzamento. Successivamente, ripetiamo coppie di layer di identità a varie profondità e infine adattiamo i valori di fedeltà per determinare i tassi di errore per ciascun canale di rumore.

Sebbene sia utile comprendere concettualmente questo metodo, implementarlo manualmente in Qiskit è molto più semplice, come dimostrato nel tutorial allegato.

Vengono mostrati i passi per apprendere un modello di rumore sparso di Pauli-Lindblad.

Passo 4 di Qiskit patterns: Post-process

Al termine dell'esperimento, puoi visualizzare il risultato tramite la post-elaborazione. La linea tratteggiata grigia nei dati tracciati rappresenta i risultati ottenuti usando metodi classici approssimati, con l'errore di approssimazione ridotto a una soglia bassa. I punti dati grezzi per i vari fattori di rumore, selezionati all'inizio, sono chiaramente distanti da questa linea tratteggiata. Al contrario, la linea blu continua mostra i dati dopo l'applicazione della nostra elaborazione ZNE, che avvicina notevolmente i risultati ai valori esatti. In sintesi, i valori ottenuti in condizioni di rumore normale (fattore di rumore nf=1.0) mostrano una deviazione significativa dai risultati esatti. Nel frattempo, i valori mitigati si allineano strettamente a quelli esatti, dimostrando l'efficacia della tecnica di mitigazione del rumore basata su PEA.

Un grafico delle soluzioni esatte, delle soluzioni non mitigate e delle soluzioni mitigate al problema risolto nel paper sulla utility.

Riepilogo

Per riassumere rapidamente ciò che abbiamo imparato:

  • La simulazione quantistica è una delle aree applicative più promettenti nel breve e medio termine.
  • Ha applicazioni di vasta portata, dalla farmaceutica alla fisica delle alte energie, alla scienza dei materiali e altro ancora.
  • Il paper sulla Utility di IBM, pubblicato nel 2023, ha indicato la strada verso l'utilizzo dei computer quantistici per la scoperta scientifica, e abbiamo esaminato il tutorial associato a quel paper.
  • I passi per affrontare un problema di simulazione dall'inizio alla fine sono relativamente semplici, e speriamo che tu possa ora usare questo video e tutorial come guida per affrontare altri problemi di simulazione.

Sondaggio post-corso

Congratulazioni per aver completato questo corso! Prenditi un momento per aiutarci a migliorare il nostro corso compilando il seguente breve sondaggio. Il tuo feedback verrà usato per migliorare i nostri contenuti e l'esperienza utente. Grazie!