Adept (knihovna C ++) - Adept (C++ library)
![]() | |
Vývojáři | Robin Hogan |
---|---|
Stabilní uvolnění | 2.0.5 / 6. února 2018 |
Napsáno | C ++ |
Operační systém | Cross-platform |
Typ | Knihovna |
Licence | Apache 2.0 (otevřený zdroj ) |
webová stránka | www |
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ásobek
a 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
- ^ 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.
- ^ Griewank, Andreas (2014). „O automatické diferenciaci a algoritmické linearizaci“. Pesquisa Operacional. 34 (3): 621–645. doi:10.1590/0101-7438.2014.034.03.0621.
- ^ A b Carpenter, Bob (2015). "Stan Math Library: Automatická diferenciace v obráceném režimu v C ++". arXiv:1509.07164 [cs.MS ].
- ^ „Citlivost v kvantitativním financování: Libor Swaption Portfolio Pricer (Monte-Carlo)“. 2016-12-02. Citováno 2017-10-21.
- ^ 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.
- ^ A b Zhao, Ze. Stochastické modely volatility s aplikacemi ve financích (Teze). University of Iowa. Citováno 2017-10-27.
- ^ 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 ].
- ^ 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.
- ^ 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.
- ^ 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.
- ^ 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.