Адепт (библиотека C++)
![]() | |
Разработчик(и) | Робин Хоган |
---|---|
Стабильная версия | 2.1
/ 5 февраля 2021 г. |
Репозиторий | |
Написано в | С++ |
Операционная система | Кросс-платформенный |
Тип | Библиотека |
Лицензия | Apache 2.0 ( с открытым исходным кодом ) |
Веб-сайт | www |
Adept — это комбинированная программная библиотека автоматического дифференцирования и массивов для языка программирования C++ . Возможность автоматического дифференцирования облегчает разработку приложений, включающих математическую оптимизацию . Адепт примечателен тем, что применил шаблонного метапрограммирования технику шаблонов выражений для ускорения дифференциации математических утверждений. [ 1 ] [ 2 ] Помимо эффективного способа хранения дифференциальной информации, это делает его значительно быстрее, чем большинство других инструментов C++, обеспечивающих аналогичную функциональность (например, ADOL-C, CppAD и FADBAD). [ 1 ] [ 3 ] [ 4 ] [ 5 ] [ 6 ] хотя о сопоставимых результатах сообщалось для Стэна и в некоторых случаях Сакадо. [ 3 ] Дифференцирование может осуществляться в прямом режиме, обратном режиме (для использования со схемой минимизации квазиньютона ) или полная матрица Якобиана может быть вычислена (для использования со схемами минимизации Левенберга-Марквардта или Гаусса-Ньютона ).
Приложения Adept включают финансовое моделирование , [ 6 ] [ 7 ] вычислительная гидродинамика , [ 8 ] физическая химия , [ 9 ] оценка параметров [ 10 ] и метеорология . [ 11 ] Adept — бесплатное программное обеспечение , распространяемое по лицензии Apache .
Пример
[ редактировать ]Adept реализует автоматическое дифференцирование, используя подход перегрузки операторов , при котором дифференцируемые скаляры записываются как adouble
, указывая на «активную» версию обычного double
, а дифференцируемые векторы записываются как aVector
. В следующем простом примере эти типы используются для дифференциации вычислений по 3 нормам на небольшом векторе:
#include <iostream>
#include <adept_arrays.h>
int main(int argc, const char** argv) {
using namespace adept;
Stack stack; // Object to store differential statements
aVector x(3); // Independent variables: active vector with 3 elements
x << 1.0, 2.0, 3.0; // Fill vector x
stack.new_recording(); // Clear any existing differential statements
adouble J = cbrt(sum(abs(x * x * x))); // Compute dependent variable: 3-norm in this case
J.set_gradient(1.0); // Seed the dependent variable
stack.reverse(); // Reverse-mode differentiation
std::cout << "dJ/dx = "
<< x.get_gradient() << "\n"; // Print the vector of partial derivatives dJ/dx
return 0;
}
После компиляции и выполнения эта программа сообщает производную как:
dJ/dx = {0.0917202, 0.366881, 0.825482}
См. также
[ редактировать ]- Список числовых библиотек
- Автоматическая дифференциация
- Собственный (библиотека C++)
- Армадилло (библиотека C++)
Ссылки
[ редактировать ]- ^ Перейти обратно: а б Хоган, Робин Дж. (2014). «Быстрое автоматическое дифференцирование в обратном режиме с использованием шаблонов выражений на C++» (PDF) . АКМ Транс. Математика. Программное обеспечение . 40 (4): 26:1–26:16. дои : 10.1145/2560359 . S2CID 9047237 .
- ^ Гриванк, Андреас (2014). «Об автоматическом дифференцировании и алгоритмической линеаризации» (PDF) . Пескиза Операциональ . 34 (3): 621–645. дои : 10.1590/0101-7438.2014.034.03.0621 .
- ^ Перейти обратно: а б Карпентер, Боб (2015). «Математическая библиотека Стэна: автоматическое дифференцирование в обратном режиме в C ++». arXiv : 1509.07164 [ cs.MS ].
- ^ «Чувствительность количественного финансирования: ценообразование портфеля свопов Libor (Монте-Карло)» . 2016-12-02 . Проверено 21 октября 2017 г.
- ^ Рик, Матиас. Дискретное управление и ограничения в задачах оптимального управления (PDF) (кандидатская диссертация). Технический университет Мюнхена . Проверено 21 октября 2017 г.
- ^ Перейти обратно: а б Чжао, Цзе. Стохастические модели волатильности с применением в финансах (Диссертация). Университет Айовы. Архивировано из оригинала 18 июля 2017 года . Проверено 27 октября 2017 г.
- ^ Пажес, Жиль; Пироно, Оливье; Салл, Гийом (2016). «Вибрато и автоматическая дифференциация для деривативов высокого порядка и чувствительности финансовых опционов». arXiv : 1606.06143 [ q-fin.CP ].
- ^ Альбринг, Т.; Сейджбаум, М.; Гогер, НР (2016). Диллманн, А.; Хеллер, Г.; Кремер, Э.; Вагнер, К.; Брайтамтер, К. (ред.). Согласованный и надежный дискретно-сопряженный решатель для платформы SU2 — проверка и применение . Новые результаты в числовой и экспериментальной механике жидкости X. Заметки по числовой механике жидкости и междисциплинарному проектированию. Том. 132. Спрингер, Чам. дои : 10.1007/978-3-319-27279-5_7 .
- ^ Нимейер, Кайл Э.; Кертис, Николас Дж.; Сун, Чи-Джен (2017). «pyJac: Аналитический генератор Якобиана для химической кинетики». Вычислить. Физ. Коммун . 215 : 188–203. arXiv : 1605.03262 . Бибкод : 2017CoPhC.215..188N . дои : 10.1016/j.cpc.2017.02.004 . S2CID 19675513 .
- ^ Альберт, Карло; Ульзега, Симона; Ступ, Руди (2016). «Усиление вывода байесовских параметров моделей нелинейных стохастических дифференциальных уравнений путем разделения гамильтоновой шкалы». Физ. Преподобный Е. 93 (43313): 043313. arXiv : 1509.05305 . Бибкод : 2016PhRvE..93d3313A . дои : 10.1103/PhysRevE.93.043313 . ПМИД 27176434 . S2CID 4479221 .
- ^ Мейсон, С.; Чиу, Ж.-К.; Хоган, Р.Дж.; Моисеев Д.; Кнайфель, С. (2018). «Измерение наледи и плотности частиц снега с помощью вертикально направленных доплеровских радаров» (PDF) . Дж. Геофиз. Рез . 123 . дои : 10.1029/2018JD028603 .