Vai al contenuto principale
Questo progetto è in fase beta. Hai trovato un bug? Apri una issue su GitHub. Hai una domanda o un'idea? Chiedi su GitHub Discussions — apprezziamo il tuo feedback!
Com'è la qualità della traduzione su questa pagina?

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.

Diagramma delle opzioni per gli stati di riferimento: predefinito, specifico per applicazione e quantistico.

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 URU_R all'inizio del nostro circuito quantistico, in modo che ∣ρ⟩=UR∣0⟩|\rho\rangle = U_R |0\rangle. 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 nn qubit: ∣0⟩⊗n|0\rangle^{\otimes n}. Per lo stato predefinito, l'operatore unitario è UR≡IU_R \equiv I. 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 ∣001⟩|001\rangle invece dello stato predefinito ∣000⟩|000\rangle. Questo è un esempio di stato di riferimento puramente classico: per costruirlo, è sufficiente applicare un gate X al qubit 00 (seguendo l'ordinamento dei qubit di Qiskit), poiché ∣001⟩=X0∣000⟩|001\rangle = X_0 |000\rangle.

In questo caso, l'operatore unitario è UR≡X0U_R \equiv X_0, che produce lo stato di riferimento ∣ρ⟩≡∣001⟩|\rho\rangle \equiv |001\rangle.

# Added by doQumentation — installs the packages this notebook needs if they are missing
import importlib.util

_needed = {"qiskit": "qiskit"}
_missing = [pip for module, pip in _needed.items()
if importlib.util.find_spec(module) is None]
# One at a time, so a package that fails to install does not block the others
for _pip in _missing:
%pip install -q {_pip}
if not _missing:
print("\u2713 All required packages are installed")
from qiskit import QuantumCircuit

qc = QuantumCircuit(3)
qc.x(0)

qc.draw("mpl")

Output of the previous code cell

Stato di riferimento quantistico​

Supponiamo di voler partire da uno stato più complesso che coinvolga sovrapposizione e/o entanglement, come 12(∣100⟩+∣111⟩)\frac{1}{\sqrt{2}}(|100\rangle+|111\rangle).

Per ottenere questo stato a partire da ∣000⟩|000\rangle, un approccio possibile è applicare un gate di Hadamard al qubit 00 (H0H_0), un gate CNOT (CX) con il qubit 00 come qubit di controllo e il qubit 11 come qubit target (CNOT01CNOT_{01}), e infine un gate XX applicato al qubit 22 (X2X_2).

In questo scenario, l'operatore unitario è UR≡X2CNOT01H0∣000⟩U_{R} \equiv X_2CNOT_{01}H_0|000\rangle e lo stato di riferimento è ∣ρ⟩≡12(∣100⟩+∣111⟩)|\rho\rangle \equiv \frac{1}{\sqrt{2}}(|100\rangle+|111\rangle).

qc = QuantumCircuit(3)
qc.h(0)
qc.cx(0, 1)
qc.x(2)

qc.draw("mpl")

Output of the previous code cell

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")

Output of the previous code cell

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 (xx) 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")

Output of the previous code cell

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

Lo schema generale del nostro flusso di lavoro variazionale è il seguente:

Diagramma di un circuito con un operatore unitario che prepara uno stato di riferimento.

Mentre gli stati di riferimento sono punti di partenza fissi, possiamo usare una forma variazionale per definire un ansatz che rappresenti un insieme di stati parametrizzati che il nostro algoritmo variazionale potrà esplorare.