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 This minimize function has several arguments, but the most relevant arguments for quantum chemistry are:

  • The cost function (cost_func). This is related to the Hamiltonian, but also includes some complexities, such as determining the expectation value by using Estimator, and in the case of excited state calculations, might include orthogonality conditions.
  • An initial state (x0) for the system, often the Hartree Fock state
  • Other arguments, including arguments of the cost function itself
  • The method set to the classical optimizer you select
  • Options for the classical optimizer (not to be confused with Session options discussed in the next section)

Este prezentat mai jos un exemplu de cod. Ne limităm discuția aici la ultimele două argumente.

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

SciPy are documentație despre toate metodele de minimizare disponibile. Iată câteva exemple demne de remarcat, toate fiind metode pentru minimizarea unei funcții scalare a uneia sau mai multor variabile:

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

Cele mai multe algoritme de optimizare clasică disponibile sunt minimizatori locali, prin faptul că folosesc diverse metode pentru a găsi minime locale, dar nu sunt garantate să găsească minime globale. Unii optimizatori clasici estimează explicit gradienți și îi folosesc 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 diferit bazat pe valorile funcției sau ale variabilelor, deși aceste criterii sunt ușor diferite pentru diferiți algoritmi. COBYLA, de exemplu, îți permite să specifici o toleranță (de exemplu, 'tol': 0.0001) care este limita inferioară a unei „regiuni de încredere”. În comparație, SLSQP îți permite să specifici un obiectiv în precizia funcției folosite în criteriul de oprire ('ftol'). Nelder-Mead îți permite să specifici o toleranță în diferența dintre estimările succesive ale parametrilor (xx) (xatol) sau o toleranță în diferența dintre valorile succesive obținute pentru funcția cost f(x)f(x) (fatol) (sau ambele). Pentru o listă completă a algoritmilor și opțiunilor disponibile, vizitează documentația minimize din SciPy.