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)

Some example code is shown below. We restrict our discussion here to the last two arguments.

    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.