Sari la conținutul principal

Stări de referință

În această lecție, vom explora cum putem inițializa sistemul nostru cu o stare de referință pentru a ajuta algoritmul nostru variațional să conveargă mai rapid. Mai întâi, vom învăța cum să construim o stare de referință manual, iar apoi vom explora câteva opțiuni standard care pot fi utilizate într-un algoritm variațional.

Diagram of options for references states including default, application-specific, and quantum.

Starea implicită

O stare de referință se referă la punctul de plecare inițial și fix pentru problema noastră. Pentru a pregăti o stare de referință, trebuie să aplicăm unitara corespunzătoare, neparametrizată URU_R la începutul circuitului nostru cuantic, astfel încât ρ=UR0|\rho\rangle = U_R |0\rangle. Dacă ai o ipoteză educată sau un punct de date dintr-o soluție optimă existentă, algoritmul variațional va converge probabil mai rapid dacă îl folosești ca punct de plecare.

Cea mai simplă stare de referință posibilă este starea implicită, unde folosim starea de start a unui circuit cuantic cu nn qubiți: 0n|0\rangle^{\otimes n}. Pentru starea implicită, operatorul nostru unitar este URIU_R \equiv I. Datorită simplității sale, starea implicită este o stare de referință validă utilizată în multe scenarii.

Stare de referință clasică

Presupune că ai un sistem cu trei qubiți și dorești să pornești din starea 001|001\rangle în loc de starea implicită 000|000\rangle. Acesta este un exemplu de stare de referință pur clasică, iar pentru a o construi, trebuie pur și simplu să aplici un X gate qubitului 00 (urmând ordinea qubiților din Qiskit), deoarece 001=X0000|001\rangle = X_0 |000\rangle.

În acest caz, operatorul nostru unitar este URX0U_R \equiv X_0, ceea ce duce la starea de referință ρ001|\rho\rangle \equiv |001\rangle.

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

Output of the previous code cell

Stare de referință cuantică

Presupune că dorești să pornești cu o stare mai complexă care implică superpoziție și/sau entanglement, precum 12(100+111)\frac{1}{\sqrt{2}}(|100\rangle+|111\rangle).

Pentru a obține această stare din 000|000\rangle, o abordare este să folosești un Hadamard gate pe qubit 00 (H0H_0), un gate CNOT (CX) cu qubit 00 ca qubit de control și qubit 11 ca qubit țintă (CNOT01CNOT_{01}), și în final un gate XX aplicat qubitului 22 (X2X_2).

În acest scenariu, operatorul nostru unitar este URX2CNOT01H0000U_{R} \equiv X_2CNOT_{01}H_0|000\rangle, iar starea noastră de referință este ρ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

Construirea stărilor de referință folosind circuite șablon

Putem utiliza, de asemenea, diverse circuite șablon, cum ar fi TwoLocal, care permite exprimarea cu ușurință a mai multor parametri reglabili și a entanglement-urilor. Vom acoperi aceste circuite șablon în detaliu în lecția următoare, dar le putem folosi pentru stările noastre de referință dacă legăm parametrii:

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

Stări de referință specifice aplicației

Învățare automată cuantică

În contextul unui clasificator cuantic variațional (VQC), datele de antrenament sunt codificate într-o stare cuantică printr-un circuit parametrizat cunoscut ca hartă de caracteristici (feature map), unde fiecare valoare a parametrului reprezintă un punct de date din setul de date de antrenament. zz_feature_map este un tip de circuit parametrizat care poate fi utilizat pentru a transmite punctele noastre de date (xx) acestei hărți de caracteristici.

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

Rezumat

Cu această lecție, ai învățat cum să îți inițializezi sistemul folosind:

  • Starea de referință implicită
  • Stări de referință clasice
  • Stări de referință cuantice
  • Stări de referință specifice aplicației

Fluxul nostru variațional de nivel înalt arată astfel:

A circuit diagram of a unitary operator preparing a reference state.

În timp ce stările de referință sunt puncte de plecare fixe și inițiale, putem utiliza o formă variațională pentru a defini un ansatz care să reprezinte o colecție de stări parametrizate pe care algoritmul nostru variațional să le exploreze.