Funzioni di costo
In questa lezione impareremo a valutare una funzione di costo:
- Prima conosceremo le primitive Qiskit Runtime
- Definiremo una funzione di costo . Si tratta di una funzione specifica al problema che ne definisce l'obiettivo che l'ottimizzatore deve minimizzare (o massimizzare)
- Definiremo una strategia di misura con le primitive Qiskit Runtime per ottimizzare la velocità rispetto alla precisione
Primitive
Tutti i sistemi fisici, siano essi classici o quantistici, possono esistere in stati diversi. Ad esempio, un'auto su una strada può avere una certa massa, posizione, velocità o accelerazione che ne caratterizzano lo stato. Analogamente, anche i sistemi quantistici possono avere configurazioni o stati diversi, ma si distinguono dai sistemi classici per il modo in cui gestiamo le misure e l'evoluzione degli stati. Ciò porta a proprietà uniche come la sovrapposizione e l'entanglement, esclusive della meccanica quantistica. Proprio come possiamo descrivere lo stato di un'auto usando proprietà fisiche come velocità o accelerazione, possiamo descrivere lo stato di un sistema quantistico tramite le osservabili, che sono oggetti matematici.
In meccanica quantistica, gli stati sono rappresentati da vettori colonna complessi normalizzati, o ket (), e le osservabili sono operatori lineari hermitiani () che agiscono sui ket. Un autovettore () di un'osservabile è noto come autostato. Misurare un'osservabile per uno dei suoi autostati () restituirà il corrispondente autovalore () come lettura.
Se ti stai chiedendo come misurare un sistema quantistico e cosa puoi misurare, Qiskit offre due primitive che possono aiutare:
Sampler: Dato uno stato quantistico , questa primitiva ottiene la probabilità di ciascun possibile stato della base computazionale.Estimator: Data un'osservabile quantistica e uno stato , questa primitiva calcola il valore atteso di .
La primitiva Sampler
La primitiva Sampler calcola la probabilità di ottenere ciascun possibile stato dalla base computazionale, dato un circuito quantistico che prepara lo stato . Calcola
dove è il numero di qubit e la rappresentazione intera di qualsiasi possibile stringa binaria di output (ovvero, interi in base ).
Il Sampler di Qiskit Runtime esegue il circuito più volte su un dispositivo quantistico, effettuando misurazioni a ogni esecuzione, e ricostruisce la distribuzione di probabilità dalle stringhe di bit recuperate. Più esecuzioni (o shot) vengono effettuate, più accurati saranno i risultati, ma ciò richiede più tempo e risorse quantistiche.
Tuttavia, poiché il numero di possibili output cresce esponenzialmente con il numero di qubit (ovvero ), anche il numero di shot dovrà crescere esponenzialmente per catturare una distribuzione di probabilità densa. Pertanto, Sampler è efficiente solo per distribuzioni di probabilità sparse; in cui lo stato target deve poter essere espresso come combinazione lineare degli stati della base computazionale, con il numero di termini che cresce al più polinomialmente con il numero di qubit:
Sampler può anche essere configurato per recuperare le probabilità da una sottosezione del circuito, rappresentando un sottoinsieme dei possibili stati totali.
La primitiva Estimator
La primitiva Estimator calcola il valore atteso di un'osservabile per uno stato quantistico ; dove le probabilità delle osservabili possono essere espresse come , essendo gli autostati dell'osservabile . Il valore atteso è quindi definito come la media di tutti i possibili risultati (ovvero gli autovalori dell'osservabile) di una misurazione dello stato , pesata per le probabilità corrispondenti:
Tuttavia, calcolare il valore atteso di un'osservabile non è sempre possibile, poiché spesso non ne conosciamo la base degli autostati. Il Estimator di Qiskit Runtime utilizza un complesso processo algebrico per stimare il valore atteso su un dispositivo quantistico reale, scomponendo l'osservabile in una combinazione di altre osservabili di cui conosciamo la base degli autostati.
In termini più semplici, Estimator scompone qualsiasi osservabile che non sa come misurare in osservabili più semplici e misurabili chiamati operatori di Pauli.
Qualsiasi operatore può essere espresso come combinazione di operatori di Pauli.
tale che
dove è il numero di qubit, per (ovvero, interi in base ), e .
Dopo aver eseguito questa decomposizione, Estimator deriva un nuovo circuito per ciascuna osservabile (dal circuito originale), per diagonalizzare efficacemente l'osservabile di Pauli nella base computazionale e misurarla. Possiamo misurare facilmente le osservabili di Pauli perché conosciamo in anticipo, il che non è il caso in generale per altre osservabili.
Per ciascun , Estimator esegue il circuito corrispondente su un dispositivo quantistico più volte, misura lo stato di output nella base computazionale e calcola la probabilità di ottenere ciascun possibile output . Cerca poi l'autovalore di corrispondente a ciascun output , moltiplica per e somma tutti i risultati per ottenere il valore atteso dell'osservabile per lo stato dato.
Poiché calcolare il valore atteso di Pauli è impraticabile (ovvero, cresce esponenzialmente), Estimator può essere efficiente solo quando un gran numero di è zero (ovvero, decomposizione di Pauli sparsa invece che densa). Formalmente diciamo che, affinché questo calcolo sia risolvibile in modo efficiente, il numero di termini non nulli deve crescere al più polinomialmente con il numero di qubit :
Il lettore potrebbe notare l'assunzione implicita che anche il campionamento delle probabilità deve essere efficiente come spiegato per Sampler, il che significa
Esempio guidato per calcolare i valori attesi
Supponiamo lo stato a singolo qubit , e l'osservabile
con il seguente valore atteso teorico