On 18.12.18 17:37, Matt Pulver via Boost wrote:
Hello,
An automatic differentiation https://en.wikipedia.org/wiki/Automatic_differentiation C++ library - Autodiff - is released under the Boost License and is proposed for inclusion into Boost:
- Github: https://github.com/pulver/autodiff - Boost Library Incubator: http://blincubator.com/bi_library/autodiff-2/?gform_post_id=1716
Features:
- Instances of autodiff variables satisfy Boost's Conceptual Requirements for Real Number Types https://www.boost.org/doc/libs/1_69_0/libs/math/doc/html/math_toolkit/real_c.... In fact the class and function template definitions are based upon the tables in this page. - No use of dynamic memory. The only member variable is a std::array<>. - Consistent with Boost's type promotion templates. When adding/multiplying/etc. variables of differing dimension number and sizes, the resulting data type is calculated at compile-time. - Single header-only file. - Intuitive and minimal API.
Requirements:
- C++17 compiler that supports constexpr if statements. There are a fair amount of calculations done at compile-time which would require messy SFINAE hacks to make this C++14-compatible.
Todo:
- A github build matrix that also includes clang and MSVC. - Additional documentation, including the mathematics.
Feedback and endorsements for Boost Library inclusion are welcome and requested.
Best regards, Matt
Hi, I like the idea very much, and it would be super useful. Having a quick look at the documentation: * it supports only compilation time expressions, is that correct? Would it be possible to construct expressions at runtime and then call the autodiff on that expression? I believe this would make the library extremely useful and comparable to whatever tensorflow or caffe have - does it handle vector/arrays/matrices already? It happens often that we have a vector function returning eg. an array, and we want the differential wrt. one element of that array. Same for matrices. Thanks, Raffi