Přeskočit na hlavní obsah

Klasické optimalizátory

Co je to optimalizátor?

Victoria Lipinska nám vysvětluje klasické optimalizátory a to, jak fungují jako součást VQE.

Dozvíš se o několika příkladech optimalizátorů a o tom, jak si vedou v přítomnosti i nepřítomnosti šumu.

Reference

Následující články jsou zmíněny ve výše uvedeném videu.

Kódování klasického optimalizátoru

V předchozích lekcích ses naučil/a sestavit hamiltonián vhodný pro použití na kvantovém počítači a jak vytvořit variační Circuit. Také ses dozvěděl/a, že variační Circuit (nebo ansatz) obsahuje parametry, které je třeba měnit, a že optimální volba parametrů je taková, která přináší nejnižší možnou hodnotu účelové funkce nebo energie. Náš problém se tedy redukuje na prohledávání prostoru parametrů za účelem nalezení optimální sady. Velká část práce s klasickými optimalizátory je za nás již hotová, protože výborné optimalizátory jsou dostupné z několika zdrojů.

V této lekci se dozvíš:

  • Jak klasické optimalizátory zapadají do výpočtu VQE
  • Jaké klasické optimalizátory jsou dostupné ze SciPy
  • Jaké optimalizátory zatím nejsou dostupné přes SciPy a jak je mezitím doplnit pomocí qiskit.algorithms
  • Jaké možnosti nastavení jsou pro tyto optimalizátory k dispozici a jaký mají význam pro kvantové výpočty

SciPy je bezplatná open-source Python knihovna s balíčky relevantními pro mnoho oblastí vědeckého výpočetnictví, včetně optimalizace. Konkrétně SciPy obsahuje optimalizační balíček zahrnující funkci minimize:

from scipy.optimize import minimize Funkce minimize má několik argumentů, ale pro kvantovou chemii jsou nejrelevantnější tyto:

  • Cenová funkce (cost_func). Souvisí s hamiltoniánem, ale zahrnuje i další části — například určení očekávané hodnoty pomocí Estimatoru a v případě výpočtů excitovaných stavů může obsahovat podmínky ortogonality.
  • Počáteční stav (x0) systému, často Hartree-Fockův stav
  • Další argumenty, včetně argumentů samotné cenové funkce
  • Parametr method nastavený na zvolený klasický optimalizátor
  • Možnosti pro klasický optimalizátor (nezaměňuj s možnostmi Session, kterým se věnuje další sekce)

Níže je ukázkový kód. Diskuzi zde omezíme na poslední dva argumenty.

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

SciPy obsahuje dokumentaci ke všem dostupným metodám minimize. Zde je několik pozoruhodných příkladů – všechny jsou metodami pro minimalizaci skalární funkce jedné nebo více proměnných:

  • cobyla: Algoritmus COBYLA (Constrained Optimization BY Linear Approximation).
  • slsqp: Sekvenční programování s nejmenšími čtverci (SLSQP).
  • nelder-mead Algoritmus Nelder-Mead.

Většina dostupných algoritmů klasické optimalizace jsou lokální minimalizátory v tom smyslu, že pomocí různých metod hledají lokální minima, avšak není zaručeno, že najdou globální minima. Některé klasické optimalizátory explicitně odhadují gradienty a využívají je k nalezení lokálních minim. Jiné mohou pro hledání minim používat postupné lineární nebo kvadratické aproximace účelové funkce.

Tyto algoritmy mají několik společných možností nastavení, avšak s jemnými rozdíly. Například všechny umožňují zadat maximální počet iterací pomocí notace 'maxiter': 200 z výše uvedeného příkladu. Všechny mají nějakou možnost pro zadání jiného kritéria zastavení na základě hodnot funkcí nebo proměnných, přičemž tato kritéria se pro různé algoritmy mírně liší. COBYLA například umožňuje zadat toleranci (například 'tol': 0.0001), která představuje dolní mez tzv. „oblasti důvěry" (trust region). Oproti tomu SLSQP umožňuje zadat cílovou přesnost funkce použité v kritériu zastavení ('ftol'). Nelder-Mead umožňuje zadat toleranci rozdílu mezi po sobě jdoucími odhady parametrů (xx) (xatol) nebo toleranci rozdílu mezi po sobě jdoucími hodnotami účelové funkce f(x)f(x) (fatol) (nebo obojí). Pro úplný seznam dostupných algoritmů a možností nastavení navštiv dokumentaci SciPy minimize.