Stati di riferimento
In questa lezione esploreremo come inizializzare il nostro sistema con uno stato di riferimento per aiutare il nostro algoritmo variazionale a convergere più rapidamente. Prima impareremo a costruire manualmente uno stato di riferimento, poi esploreremo diverse opzioni standard utilizzabili in un algoritmo variazionale.
Stato predefinito
Uno stato di riferimento indica il punto di partenza fisso e iniziale per il nostro problema. Per preparare uno stato di riferimento, dobbiamo applicare l'unitario non parametrizzato appropriato all'inizio del nostro circuito quantistico, in modo che . Se hai un'ipotesi ragionata o un valore di partenza proveniente da una soluzione ottimale già nota, l'algoritmo variazionale convergerà probabilmente più in fretta se lo usi come punto di partenza.
Lo stato di riferimento più semplice possibile è lo stato predefinito, in cui si utilizza lo stato iniziale di un circuito quantistico a qubit: . Per lo stato predefinito, l'operatore unitario è . Grazie alla sua semplicità, lo stato predefinito è uno stato di riferimento valido e utilizzato in molti scenari.
Stato di riferimento classico
Supponiamo di avere un sistema a tre qubit e di voler partire dallo stato invece dello stato predefinito . Questo è un esempio di stato di riferimento puramente classico: per costruirlo, è sufficiente applicare un gate X al qubit (seguendo l'ordinamento dei qubit di Qiskit), poiché .
In questo caso, l'operatore unitario è , che produce lo stato di riferimento .
# Added by doQumentation — required packages for this notebook
!pip install -q qiskit
from qiskit import QuantumCircuit
qc = QuantumCircuit(3)
qc.x(0)
qc.draw("mpl")
Stato di riferimento quantistico
Supponiamo di voler partire da uno stato più complesso che coinvolga sovrapposizione e/o entanglement, come .
Per ottenere questo stato a partire da , un approccio possibile è applicare un gate di Hadamard al qubit (), un gate CNOT (CX) con il qubit come qubit di controllo e il qubit come qubit target (), e infine un gate applicato al qubit ().
In questo scenario, l'operatore unitario è e lo stato di riferimento è .
qc = QuantumCircuit(3)
qc.h(0)
qc.cx(0, 1)
qc.x(2)
qc.draw("mpl")
Costruire stati di riferimento con circuiti template
Possiamo anche usare vari circuiti template, come TwoLocal, che permette di esprimere con facilità molteplici parametri regolabili ed entanglement. Tratteremo questi circuiti template in modo più dettagliato nella prossima lezione, ma possiamo usarli per i nostri stati di riferimento a condizione di fissare i parametri:
from qiskit.circuit.library import TwoLocal
from math import pi
reference_circuit = TwoLocal(2, "rx", "cz", entanglement="linear", reps=1)
theta_list = [pi / 2, pi / 3, pi / 3, pi / 2]
reference_circuit = reference_circuit.assign_parameters(theta_list)
reference_circuit.decompose().draw("mpl")
Stati di riferimento specifici per applicazione
Machine learning quantistico
Nel contesto di un classificatore quantistico variazionale (VQC), i dati di addestramento vengono codificati in uno stato quantistico tramite un circuito parametrizzato noto come feature map, in cui ogni valore di parametro rappresenta un punto del dataset di addestramento. La zz_feature_map è un tipo di circuito parametrizzato che può essere utilizzato per passare i nostri punti dati () a questa feature map.
from qiskit.circuit.library import zz_feature_map
data = [0.1, 0.2]
zz_feature_map_reference = zz_feature_map(feature_dimension=2, reps=2)
zz_feature_map_reference = zz_feature_map_reference.assign_parameters(data)
zz_feature_map_reference.decompose().draw("mpl")
Riepilogo
Con questa lezione hai imparato a inizializzare il tuo sistema usando:
- Stato di riferimento predefinito
- Stati di riferimento classici
- Stati di riferimento quantistici
- Stati di riferimento specifici per applicazione
Il nostro carico di lavoro variazionale ad alto livello si presenta come segue:
Mentre gli stati di riferimento sono punti di partenza fissi, possiamo usare una forma variazionale per definire un ansatz che rappresenti una collezione di stati parametrizzati che il nostro algoritmo variazionale andrà ad esplorare.