Prev Next research

@(@\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}} }@)@This is cppad-20221105 documentation. Here is a link to its current documentation .
Research and Software Engineering Projects Related to CppAD

See Also
wish_list

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 demonstrate how one could use swig to do this and cppad_py is a preliminary version of such a 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.
Input File: omh/theory/research.omh