\(\newcommand{\W}[1]{ \; #1 \; }\) \(\newcommand{\R}[1]{ {\rm #1} }\) \(\newcommand{\B}[1]{ {\bf #1} }\) \(\newcommand{\D}[2]{ \frac{\partial #1}{\partial #2} }\) \(\newcommand{\DD}[3]{ \frac{\partial^2 #1}{\partial #2 \partial #3} }\) \(\newcommand{\Dpow}[2]{ \frac{\partial^{#1}}{\partial {#2}^{#1}} }\) \(\newcommand{\dpow}[2]{ \frac{ {\rm d}^{#1}}{{\rm d}\, {#2}^{#1}} }\)
research¶
View page sourceResearch and Software Engineering Projects Related to CppAD¶
See Also¶
Purpose¶
This is a list of research topics, and software engineering projects, related to CppAD. If you know of published results for any of the research topics, please contact the project manage so a link to the answer can be added to the CppAD documentation.
Abs-Normal Form¶
Abs-normal forms are recent advent in AD and algorithms related to it are an important research topic. The CppAD abs_normal_fun routine enables one to create approximations for non-smooth functions that have higher than first order accuracy. This opens the question of designing algorithms to take advantage of this.
Atomic Functions¶
Mathematical formulas for, and implementation of, atomic functions that make AD faster and or conserve on memory for special cases; e.g., special functions, sparse matrix operations.
Dynamic Parameters¶
CppAD provides for dynamic parameters in a unique way (they can depend on other dynamic parameters). This opens the question of techniques that take advantage of this. For example, see base2ad.cpp which uses this feature.
Multi-Threading¶
Interesting algorithms and implementations that take advantage of the CppAD multi threading capability.
Optimization¶
There is no paper describing the CppAD optimization of a computational graph. In particular, the optimization of conditional expressions is not well understood. In addition, possible improvements to the optimization would be welcome. For example, detecting places where the distributive law can be used to reduce two multiplies and one addition to one multiply and two additions.
Scripting Language¶
It would be useful to make addon packages that connect CppAD to a scripting languages. The package cppad_swig demonstrates how one could use swig to do this and cppad_py is an example connection to Python.
Sparsity¶
Sparsity Patterns¶
There are forward, reverse and subgraph methods for computing a sparsity_pattern . It is unclear which is better for which cases.
Coloring Problem¶
Given the
Sparsity Pattern for a Jacobian or Hessian,
a graph coloring algorithm is used to determine which row or columns
can be evaluated at the same time; see
color_general.hpp
and color_symmertic.hpp
Subgraphs¶
The subgraph_jac_rev method use subgraphs to compute sparsity patterns and to evaluate sparse derivatives. This is a new technique that should be written up. It was invented by Kasper Kristensen, DTU Technical University of Denmark. See the Subgraph wish list items.
Speed¶
CppAD provides for some speed comparisons between different AD packages. These comparisons could be improved, extended, and written up.