Sari la conținutul principal

Optimizatori clasici

Ce este un optimizator?

Victoria Lipinska ne prezintă optimizatorii clasici și modul în care aceștia funcționează ca parte din VQE.

Vei auzi despre câțiva optimizatori exemplu și despre cum se comportă în prezența și absența zgomotului.

Referințe

Articolele de mai jos sunt menționate în videoclipul de mai sus.

Scrierea codului pentru un optimizator clasic

În lecțiile anterioare, ai învățat să creezi un Hamiltonian potrivit pentru utilizare pe un calculator cuantic și cum să construiești un circuit variațional. Ai aflat, de asemenea, că circuitul variațional (sau ansatz-ul) conține parametri care urmează să fie variați, iar alegerea optimă a parametrilor este cea care produce cea mai mică valoare posibilă a funcției de cost sau a energiei. Astfel, problema noastră se reduce la căutarea în spațiul parametrilor a setului optim. O mare parte din munca aferentă optimizatorilor clasici a fost deja realizată pentru noi, deoarece există optimizatori excelenți disponibili din mai multe surse.

În această lecție vei învăța:

  • Cum se integrează optimizatorii clasici într-un calcul VQE
  • Ce optimizatori clasici sunt disponibili din SciPy
  • Ce optimizatori nu sunt încă disponibili prin SciPy și cum poți suplimenta între timp folosind qiskit.algorithms
  • Ce opțiuni sunt disponibile pentru acești optimizatori și semnificația lor pentru calculul cuantic

SciPy este o bibliotecă Python gratuită și open-source cu pachete relevante pentru multe domenii ale calculului științific, inclusiv optimizarea. În particular, SciPy are un pachet de optimizare care include minimize:

from scipy.optimize import minimize Această funcție minimize are mai mulți parametri, dar parametrii cei mai relevanți pentru chimia cuantică sunt:

  • Funcția de cost (cost_func). Aceasta este legată de Hamiltonian, dar include și unele complexități, cum ar fi determinarea valorii așteptate folosind Estimator, iar în cazul calculelor pentru stări excitate, poate include condiții de ortogonalitate.
  • O stare inițială (x0) pentru sistem, adesea starea Hartree-Fock
  • Alți argumente, inclusiv argumentele funcției de cost în sine
  • Metoda setată la optimizatorul clasic pe care îl selectezi
  • Opțiunile pentru optimizatorul clasic (a nu se confunda cu opțiunile de Sesiune discutate în secțiunea următoare)

Mai jos este prezentat un exemplu de cod. Aici ne limităm discuția la ultimele două argumente.

cost_func,
x0,
args=(ansatz, hamiltonian, estimator),
method="cobyla",
options={"maxiter": 200})

SciPy oferă documentație pentru toate metodele disponibile la minimize. Iată câteva exemple notabile, toate fiind metode de minimizare a unei funcții scalare de una sau mai multe variabile:

  • cobyla: algoritmul de Optimization BY Linear Approximation (COBYLA).
  • slsqp: Sequential Least Squares Programming (SLSQP).
  • nelder-mead Algoritmul Nelder-Mead.

Majoritatea algoritmilor clasici de optimizare disponibili sunt minimizatori locali, în sensul că folosesc diverse metode pentru a găsi minime locale, fără a fi garantat că găsesc minimul global. Unii optimizatori clasici estimează explicit gradienții și îi utilizează pentru a găsi minime locale. Alții pot folosi aproximări liniare sau pătratice succesive ale funcției obiectiv pentru a găsi minime.

Acești algoritmi au mai multe opțiuni în comun, dar cu diferențe subtile. De exemplu, toți au opțiunea de a specifica un număr maxim de iterații folosind notația 'maxiter': 200 de mai sus. Toți au o opțiune care specifică un criteriu de oprire bazat pe valorile funcției sau ale variabilelor, deși aceste criterii diferă ușor de la un algoritm la altul. COBYLA, de exemplu, îți permite să specifici o toleranță (de exemplu, 'tol': 0.0001) care reprezintă limita inferioară a unei „regiuni de încredere". Prin comparație, SLSQP îți permite să specifici un obiectiv privind precizia funcției utilizate în criteriul de oprire ('ftol'). Nelder-Mead îți permite să specifici o toleranță a diferenței dintre estimările succesive ale parametrilor (xx) (xatol) sau o toleranță a diferenței dintre valorile succesive obținute pentru funcția de cost f(x)f(x) (fatol) (sau ambele). Pentru o listă completă a algoritmilor și opțiunilor disponibile, vizitează documentația minimize a SciPy.