Adept (knihovna C ++) - Adept (C++ library)

Knihovna Adept C ++
Logo Adept.png
VývojářiRobin Hogan
Stabilní uvolnění
2.0.5 / 6. února 2018 (Před 2 roky) (2018-02-06)
NapsánoC ++
Operační systémCross-platform
TypKnihovna
LicenceApache 2.0 (otevřený zdroj )
webová stránkawww.se setkal.čtení.ac.Spojené království/ mraky/ adept/

Adept je kombinovaný automatické rozlišení a pole softwarová knihovna pro Programovací jazyk C ++. Schopnost automatické diferenciace usnadňuje vývoj zahrnujících aplikací matematická optimalizace. Adept je pozoruhodný tím, že použil metaprogramování šablon technika šablony výrazů urychlit diferenciaci matematických tvrzení.[1][2] Spolu s efektivním způsobem, jakým ukládá rozdílové informace, je výrazně rychlejší než většina ostatních nástrojů C ++, které poskytují podobné funkce (např. ADOL-C, CppAD a FADBAD),[1][3][4][5][6] i když u společnosti byl zaznamenán srovnatelný výkon Stan a v některých případech Sacado.[3] Diferenciace může být v režimu vpřed, vzad (pro použití s ​​a Kvazi-Newton minimalizační schéma) nebo celý Jacobian matrix lze vypočítat (pro použití s Levenberg-Marquardt nebo Gauss-Newton schémata minimalizace).

Zahrnuty jsou aplikace Adeptu finanční modelování,[6][7] výpočetní dynamika tekutin,[8] fyzikální chemie,[9] odhad parametrů[10] a meteorologie.[11] Adept je svobodný software distribuováno pod Licence Apache.

Příklad

Adept implementuje automatickou diferenciaci pomocí přetížení operátora přístup, ve kterém jsou skaláry, které mají být rozlišeny, zapsány jako zdvojnásobit, označující „aktivní“ verzi normálu dvojnásobeka vektory, které mají být diferencovány, jsou zapsány jako vektor. Následující jednoduchý příklad používá tyto typy k odlišení 3-norma výpočet na malém vektoru:

#zahrnout <iostream>#zahrnout <adept_arrays.h>                           int hlavní(int argc, konst char** argv) {  použitím jmenný prostor adept;  Zásobník zásobník;                           // Objekt pro uložení rozdílových příkazů  vektor X(3);                          // Nezávislé proměnné: aktivní vektor se 3 prvky  X << 1.0, 2.0, 3.0;                    // Vyplňte vektor x  zásobník.nový_záznam();                 // Vymaže všechny existující diferenciální příkazy  zdvojnásobit J = cbrt(součet(břišní svaly(X*X*X)));     // Proměnná závislá na výpočtu: v tomto případě 3-norma  J.set_gradient(1.0);                   // Naočkujte závislou proměnnou  zásobník.zvrátit();                       // Diferenciace v obráceném režimu  std::cout << „dJ / dx =“            << X.get_gradient() << " n"; // Vytiskne vektor parciálních derivací dJ / dx  vrátit se 0;}

Když je tento program kompilován a spuštěn, hlásí derivaci jako:

dJ/dx = {0.0917202, 0.366881, 0.825482}

Viz také

Reference

  1. ^ A b Hogan, Robin J. (2014). "Rychlá automatická diferenciace v reverzním režimu pomocí šablon výrazů v C ++" (PDF). ACM Trans. Matematika. Softw. 40 (4): 26:1–26:16. doi:10.1145/2560359.
  2. ^ Griewank, Andreas (2014). „O automatické diferenciaci a algoritmické linearizaci“. Pesquisa Operacional. 34 (3): 621–645. doi:10.1590/0101-7438.2014.034.03.0621.
  3. ^ A b Carpenter, Bob (2015). "Stan Math Library: Automatická diferenciace v obráceném režimu v C ++". arXiv:1509.07164 [cs.MS ].
  4. ^ „Citlivost v kvantitativním financování: Libor Swaption Portfolio Pricer (Monte-Carlo)“. 2016-12-02. Citováno 2017-10-21.
  5. ^ Rieck, Matthias. Diskrétní řízení a omezení v optimálních problémech řízení (PDF) (Disertační práce). Technická univerzita v Mnichově. Citováno 2017-10-21.
  6. ^ A b Zhao, Ze. Stochastické modely volatility s aplikacemi ve financích (Teze). University of Iowa. Citováno 2017-10-27.
  7. ^ Pagès, Gilles; Pironneau, Olivier; Sall, Guillaume (2016). "Vibrato a automatická diferenciace pro deriváty vyššího řádu a citlivost finančních možností". arXiv:1606.06143 [q-fin. CP ].
  8. ^ Albring, T .; Sagebaum, M .; Gauger, N. R. (2016). Dillmann, A .; Heller, G .; Krämer, E .; Wagner, C .; Breitsamter, C. (eds.). Důsledný a robustní diskrétní řešení pro rámec SU2 - ověřování a aplikace. Nové výsledky v numerické a experimentální mechanice tekutin X. Poznámky k numerické mechanice tekutin a multidisciplinární design. 132. Springer, Cham. doi:10.1007/978-3-319-27279-5_7.
  9. ^ Niemeyer, Kyle E .; Curtis, Nicholas J .; Sung, Chih-Jen (2017). "pyJac: Analytický jakobiánský generátor pro chemickou kinetiku". Comput. Phys. Commun. 215: 188–203. arXiv:1605.03262. Bibcode:2017CoPhC.215..188N. doi:10.1016 / j.cpc.2017.02.004.
  10. ^ Albert, Carlo; Ulzega, Simone; Stoop, Ruedi (2016). "Posílení Bayesiánského odvození parametru nelineárních stochastických modelů diferenciálních rovnic pomocí Hamiltonovské separace měřítka". Phys. Rev.. 93 (43313): 043313. arXiv:1509.05305. Bibcode:2016PhRvE..93d3313A. doi:10.1103 / PhysRevE.93.043313. PMID  27176434.
  11. ^ Mason, S .; Chiu, J.-C .; Hogan, R. J .; Moisseev, D .; Kneifel, S. (2018). „Načítání okrajů a hustoty sněhových částic z vertikálně směřujících Dopplerových radarů“ (PDF). J. Geophys. Res. 123. doi:10.1029 / 2018JD028603.

externí odkazy