Variational Quantum Eigensolver (VQE)
Această lecție prezintă variational quantum eigensolver, explică importanța sa ca algoritm de bază în calculul cuantic și explorează punctele forte și slabe ale acestuia. VQE în sine, fără metode de augmentare, probabil că nu va fi suficient pentru calculele cuantice la scară modernă de utilitate. Cu toate acestea, este important ca metodă hibridă clasică-cuantică arhetipală și constituie o fundație importantă pe care sunt construiți mulți algoritmi mai avansați.
Acest videoclip oferă o prezentare generală a VQE și a factorilor care îi afectează eficiența. Textul de mai jos adaugă mai multe detalii și implementează VQE folosind Qiskit.
1. Ce este VQE?
Variational quantum eigensolver este un algoritm care utilizează calculul clasic și cel cuantic împreună pentru a îndeplini o sarcină. Există 4 componente principale ale unui calcul VQE:
- Un operator: Adesea un Hamiltonian, pe care îl vom numi , ce descrie o proprietate a sistemului tău pe care dorești să o optimizezi. O altă modalitate de a spune asta este că tu cauți vectorul propriu al acestui operator care corespunde valorii proprii minime. Acel vector propriu este adesea numit „starea de bază" (ground state).
- Un „ansatz" (un cuvânt german cu sensul „abordare"): acesta este un Circuit cuantic care pregătește o stare cuantică ce aproximează vectorul propriu căutat. De fapt, ansatz-ul este o familie de circuite cuantice, deoarece unele dintre Gate-urile din ansatz sunt parametrizate, adică li se furnizează un parametru pe care îl putem varia. Această familie de circuite cuantice poate pregăti o familie de stări cuantice care aproximează starea de bază.
- Un Estimator: un mijloc de estimare a valorii de așteptare a operatorului pe starea cuantică variaționară curentă. Uneori, ce ne interesează cu adevărat este chiar această valoare de așteptare, pe care o numim funcție de cost. Alteori, ne interesează o funcție mai complicată care poate fi totuși scrisă pornind de la una sau mai multe valori de așteptare.
- Un optimizator clasic: un algoritm care variază parametrii pentru a încerca să minimizeze funcția de cost.
Să analizăm fiecare dintre aceste componente în mai multă profunzime.
1.1 Operatorul (Hamiltonianul)
La baza unei probleme VQE se află un operator care descrie un sistem de interes. Vom presupune că valoarea proprie minimă și vectorul propriu corespunzător al acestui operator sunt utile pentru un scop științific sau de afaceri. Exemple ar putea include un Hamiltonian chimic care descrie o moleculă, astfel încât valoarea proprie minimă a operatorului corespunde energiei stării de bază a moleculei, iar starea proprie corespunzătoare descrie geometria sau configurația electronică a moleculei. Sau operatorul ar putea descrie costul unui anumit proces de optimizat, iar stările proprii ar putea corespunde rutelor sau practicilor. În unele domenii, cum ar fi fizica, un „Hamiltonian" se referă aproape întotdeauna la un operator ce descrie energia unui sistem fizic. Dar în calculul cuantic, este obișnuit să vezi operatori cuantici care descriu o problemă de afaceri sau logistică și care sunt, de asemenea, numiți „Hamiltonian". Vom adopta această convenție aici.

Maparea unei probleme fizice sau de optimizare pe qubiți este, de obicei, o sarcină non-trivială, dar acele detalii nu sunt obiectul acestui curs. O discuție generală despre maparea unei probleme pe un operator cuantic poate fi găsită în Quantum computing in practice. O privire mai detaliată asupra mapării problemelor de chimie în operatori cuantici poate fi găsită în Quantum Chemistry with VQE.
În scopul acestui curs, vom presupune că forma Hamiltonianului este cunoscută. De exemplu, un Hamiltonian pentru o moleculă simplă de hidrogen (sub anumite ipoteze de spațiu activ și folosind mapper-ul Jordan-Wigner) este:
# Added by doQumentation — required packages for this notebook
!pip install -q matplotlib numpy qiskit qiskit-ibm-runtime scipy
from qiskit.quantum_info import SparsePauliOp
hamiltonian = SparsePauliOp(
[
"IIII",
"IIIZ",
"IZII",
"IIZI",
"ZIII",
"IZIZ",
"IIZZ",
"ZIIZ",
"IZZI",
"ZZII",
"ZIZI",
"YYYY",
"XXYY",
"YYXX",
"XXXX",
],
coeffs=[
-0.09820182 + 0.0j,
-0.1740751 + 0.0j,
-0.1740751 + 0.0j,
0.2242933 + 0.0j,
0.2242933 + 0.0j,
0.16891402 + 0.0j,
0.1210099 + 0.0j,
0.16631441 + 0.0j,
0.16631441 + 0.0j,
0.1210099 + 0.0j,
0.17504456 + 0.0j,
0.04530451 + 0.0j,
0.04530451 + 0.0j,
0.04530451 + 0.0j,
0.04530451 + 0.0j,
],
)
Observă că în Hamiltonianul de mai sus există termeni precum ZZII și YYYY care nu comutează între ei. Adică, pentru a evalua ZZII, ar trebui să măsurăm operatorul Pauli Z pe Qubit-ul 3 (printre alte măsurători). Dar pentru a evalua YYYY, trebuie să măsurăm operatorul Pauli Y pe același Qubit, Qubit-ul 3. Există o relație de incertitudine între operatorii Y și Z pe același Qubit; nu putem măsura ambii operatori în același timp. Vom reveni la acest punct mai jos și, de fapt, pe tot parcursul cursului.
Hamiltonianul de mai sus este un operator matricial de . Diagonalizarea operatorului pentru a găsi valoarea proprie minimă nu este dificilă.
import numpy as np
A = np.array(hamiltonian)
eigenvalues, eigenvectors = np.linalg.eigh(A)
print("The ground state energy is ", min(eigenvalues), "hartrees")
The ground state energy is -1.1459778447627311 hartrees
Solverele clasice de valori proprii brute nu pot scala pentru a descrie energiile sau geometriile sistemelor foarte mari de atomi, cum ar fi medicamentele sau proteinele. VQE este una dintre primele încercări de a utiliza calculul cuantic în această problemă.
Vom întâlni Hamiltonieni în această lecție mult mai mari decât cel de mai sus. Dar ar fi risipitor să împingem limitele a ceea ce poate face VQE, înainte de a introduce câteva dintre instrumentele mai avansate care pot augmenta sau înlocui VQE, mai târziu în acest curs.
1.2 Ansatz
Cuvântul „ansatz" este german și înseamnă „abordare". Pluralul corect în germană este „ansätze", deși adesea se vede „ansatzes" sau „ansatze". În contextul VQE, un ansatz este Circuit-ul cuantic pe care îl folosești pentru a crea o funcție de undă multi-qubiți care aproximează cel mai bine starea de bază a sistemului studiat și care, astfel, produce cea mai mică valoare de așteptare a operatorului tău. Acest Circuit cuantic va conține parametri variaționali (adesea reuniți în vectorul de variabile ).

Se alege un set inițial de valori ale parametrilor variaționali. Vom numi operația unitară a ansatz-ului pe Circuit . În mod implicit, toți qubiții din calculatoarele cuantice IBM® sunt inițializați în starea . Când Circuit-ul rulează, starea qubiților va fi
Dacă tot ce am nevoie ar fi energia minimă (folosind limbajul sistemelor fizice), am putea estima aceasta simplu măsurând energia de multe ori și luând minimul. Dar de obicei vrem și configurația care produce acea energie minimă sau valoare proprie. Deci, pasul următor este estimarea valorii de așteptare a Hamiltonianului, care se realizează prin măsurători cuantice. Există mult de spus despre asta. Dar putem înțelege calitativ acest proces observând că probabilitatea de a măsura o energie (din nou, folosind limbajul sistemelor fizice) este legată de valoarea de așteptare prin:
Probabilitatea este, de asemenea, legată de suprapunerea dintre starea proprie și starea curentă a sistemului :
Astfel, făcând multe măsurători ale operatorilor Pauli care alcătuiesc Hamiltonianul nostru, putem estima valoarea de așteptare a Hamiltonianului în starea curentă a sistemului . Pasul următor este să variezi parametrii și să te apropii mai mult de starea de bază (ground state) a sistemului cu cea mai mică energie. Datorită parametrilor variaționali din ansatz, uneori acesta este denumit forma variaționară.
Înainte de a trece la acel proces variațional, observă că este adesea util să pornești starea dintr-o stare de „bun puncte de plecare". Poate cunoști suficient de bine sistemul pentru a face o presupunere inițială mai bună decât . De exemplu, este obișnuit să inițializezi qubiții în starea Hartree-Fock în aplicațiile chimice. Această presupunere de start care nu conține niciun parametru variațional se numește stare de referință. Să numim Circuit-ul cuantic folosit pentru a crea starea de referință . Ori de câte ori devine important să distingem starea de referință de restul ansatz-ului, folosim: Echivalent,
1.3 Estimator
Avem nevoie de o modalitate de a estima valoarea de așteptare a Hamiltonianului nostru într-o anumită stare variaționară . Dacă am putea măsura direct întregul operator , aceasta ar fi la fel de simplă ca și efectuarea multor (să spunem ) măsurători și calcularea mediei valorilor măsurate:
Aici, simbolul ne amintește că această valoare de așteptare ar fi precis corectă doar în limita . Dar cu mii de măsurători efectuate pe un Circuit, eroarea de eșantionare a valorii de așteptare este destul de mică. Există alte considerații, cum ar fi zgomotul, care devin o problemă pentru calcule foarte precise.
Cu toate acestea, în general nu este posibil să măsori dintr-odată. poate conține mai mulți operatori Pauli X, Y și Z care nu comutează. Deci, Hamiltonianul trebuie împărțit în grupuri de operatori ce pot fi măsurați simultan, fiecare astfel de grup trebuie estimat separat, iar rezultatele combinate pentru a obține o valoare de așteptare. Vom revizui aceasta în mai mare detaliu în lecția următoare, când discutăm scalarea abordărilor clasice și cuantice. Această complexitate în măsurare este unul dintre motivele pentru care avem nevoie de cod foarte eficient pentru a efectua o astfel de estimare. În această lecție și mai departe, vom folosi primitivul Qiskit Runtime Estimator în acest scop.
1.4 Optimizatorii clasici
Un optimizator clasic este orice algoritm clasic conceput pentru a găsi extremele unei funcții țintă (de obicei un minim). Ei caută în spațiul parametrilor posibili un set care minimizează o funcție de interes. Pot fi clasificate în linii mari în metode bazate pe gradient, care utilizează informații despre gradient, și metode fără gradient, care funcționează ca optimizatori de tip cutie neagră. Alegerea optimizatorului clasic poate afecta semnificativ performanța unui algoritm, mai ales în prezența zgomotului în hardware-ul cuantic. Optimizatorii populari în acest domeniu includ Adam, AMSGrad și SPSA, care au arătat rezultate promițătoare în medii zgomotoase. Optimizatorii mai tradiționali includ COBYLA și SLSQP.
Un flux de lucru comun (demonstrat în Secțiunea 3.3) este să folosești unul dintre acești algoritmi ca metodă într-un minimizator precum funcția minimize din scipy. Aceasta primește ca argumente:
- O funcție de minimizat. Aceasta este adesea valoarea de așteptare a energiei. Dar în general sunt numite „funcții de cost".
- Un set de parametri de la care să înceapă căutarea. Adesea numite sau .
- Argumente, inclusiv argumentele funcției de cost. În calculul cuantic cu Qiskit, aceste argumente vor include ansatz-ul, Hamiltonianul și Estimator-ul, discutat mai mult în subsecțiunea următoare.
- O „metodă" de minimizare. Aceasta se referă la algoritmul specific utilizat pentru a căuta spațiul parametrilor. Aici am specifica, de exemplu, COBYLA sau SLSQP.
- Opțiuni. Opțiunile disponibile pot diferi în funcție de metodă. Dar un exemplu pe care practic toate metodele l-ar include este numărul maxim de iterații ale optimizatorului înainte de a încheia căutarea: 'maxiter'.

La fiecare pas iterativ, valoarea de așteptare a Hamiltonianului este estimată prin multe măsurători. Această energie estimată este returnată de funcția de cost, iar minimizatorul actualizează informațiile pe care le are despre peisajul energetic. Ce face exact optimizatorul pentru a alege pasul următor variază de la o metodă la alta. Unele folosesc gradienți și selectează direcția de descărcere cea mai abruptă. Altele pot ține cont de zgomot și pot cere ca costul să scadă cu o marjă mare înainte de a accepta că energia adevărată scade în acea direcție.
# Example syntax for minimization
# from scipy.optimize import minimize
# res = minimize(cost_func, x0, args=(ansatz, hamiltonian, estimator), method="cobyla", options={'maxiter': 200})
1.5 Principiul variațional
În acest context, principiul variațional este foarte important; el afirmă că nicio funcție de undă variaționară nu poate produce o valoare de așteptare a energiei (sau a costului) mai mică decât cea produsă de funcția de undă a stării de bază. Matematic,
Acest lucru este ușor de verificat dacă observăm că setul tuturor stărilor proprii ale lui formează o bază completă pentru spațiul Hilbert. Cu alte cuvinte, orice stare și în special poate fi scrisă ca o sumă ponderată (normalizată) a acestor stări proprii ale lui :
unde sunt constante de determinat, și . Lăsăm aceasta ca exercițiu pentru cititor. Dar observă implicația: starea variaționară care produce cea mai mică valoare de așteptare a energiei este cea mai bună estimare a stării de bază reale.
Verifică-ți înțelegerea
Citește întrebarea de mai jos, gândește-te la răspunsul tău, apoi apasă pe triunghi pentru a dezvălui soluția.
Verifică matematic că pentru orice stare variaționară .
Răspuns:
Folosind expansiunea dată a stării variaționare în termeni de stări proprii ale energiei,
putem scrie valoarea de așteptare a energiei variaționare ca
Pentru toți coeficienții . Deci putem scrie
2. Comparație cu fluxul de lucru clasic
Să presupunem că suntem interesați de o matrice cu N rânduri și N coloane. Presupune că matricea ta este atât de mare încât diagonalizarea exactă nu este o opțiune. Presupune, de asemenea, că știi suficient despre problema ta pentru a face câteva presupuneri despre structura generală a stării proprii țintă și vrei să explorezi stări similare presupunerii tale inițiale pentru a vedea dacă costul/energia ta poate fi redusă în continuare. Aceasta este o abordare variaționară și este una dintre metodele folosite atunci când diagonalizarea exactă nu este o opțiune.
2.1 Fluxul de lucru clasic
Folosind un calculator clasic, aceasta ar funcționa astfel:
- Fă o stare de presupunere, cu unii parametri pe care îi vei varia: . Deși această presupunere inițială ar putea fi aleatorie, nu este recomandat. Vrem să folosim cunoașterea problemei la îndemână pentru a ne adapta presupunerea cât mai mult posibil.
- Calculează valoarea de așteptare a operatorului cu sistemul în acea stare:
- Modifică parametrii variaționali și repetă: .
- Folosește informațiile acumulate despre peisajul stărilor posibile din subspațiul tău variațional pentru a face presupuneri din ce în ce mai bune și a te apropia de starea țintă. Principiul variațional garantează că starea noastră variaționară nu poate produce o valoare proprie mai mică decât cea a stării de bază țintă. Deci cu cât valoarea de așteptare este mai mică, cu atât aproximarea noastră a stării de bază este mai bună:
Să examinăm dificultatea fiecărui pas în această abordare. Setarea sau actualizarea parametrilor este computațional ușoară; dificultatea acolo constă în selectarea unor parametri inițiali utili, motivați fizic. Folosirea informațiilor acumulate din iterațiile anterioare pentru a actualiza parametrii în astfel de mod încât să te apropii de starea de bază este non-trivială. Dar există algoritmi de optimizare clasici care fac asta destul de eficient. Această optimizare clasică este costisitoare doar pentru că poate necesita multe iterații; în cel mai rău caz, numărul de iterații poate scala exponențial cu N. Cel mai costisitor pas computațional individual este aproape sigur calcularea valorii de așteptare a matricei folosind o stare dată :
Matricea trebuie să acționeze pe vectorul cu elemente, ceea ce corespunde: operații de multiplicare în cel mai rău caz. Aceasta trebuie făcută la fiecare iterație de parametri. Pentru matrici extrem de mari, aceasta are un cost computațional ridicat.
2.2 Fluxul de lucru cuantic și grupurile de Pauli comutativi
Acum imaginează-ți că delegi această parte a calculului unui calculator cuantic. În loc să calculezi această valoare de așteptare, o estimezi pregătind starea pe calculatorul cuantic folosind ansatz-ul tău variațional, și apoi efectuând măsurători.
Asta poate suna mai ușor decât este. în general nu este ușor de măsurat. De exemplu, ar putea fi alcătuit din mulți operatori Pauli X, Y și Z care nu comutează. Dar poate fi scris ca o combinație liniară de termeni, , fiecare dintre care este ușor de măsurat (de exemplu, operatori Pauli sau grupuri de operatori Pauli care comutează qubit-cu-qubit). Valoarea de așteptare a lui pe o anumită stare este suma ponderată a valorilor de așteptare ale termenilor constituenți . Această expresie este valabilă pentru orice stare , dar o vom folosi specific cu stările noastre variaționare .
unde este un șir Pauli precum IZZX…XIYX, sau mai multe astfel de șiruri care comutează între ele. Deci o descriere a valorii de așteptare care se potrivește mai bine cu realitățile măsurătorii pe calculatoarele cuantice este
Și în contextul funcției noastre de undă variaționare: