Atan2
The atan2
function could be made faster by adding
a special operator for it.
BenderQuad
See the problem
with the
current BenderQuad specifications.
CondExp
Extend the conditional expressions CondExp
so that they are
valid for complex types by comparing real parts.
In addition, use this change to extend LuRatio
so
that it works with complex AD types.
Exceptions
When the function
Independent
is called,
a new tape is created.
If an exception occurs before the call to the corresponding
ADFun
constructor or Dependent
,
the tape recording will never stop.
Thus, there should be a way to abort a tape recording.
Ipopt
A speed test for the Ipopt nonlinear programming class
ipopt_cppad_nlp
should be added.
Then changes should be made to improve its speed.
For example:
Perhaps the evaluation of the objective
and the constraints should be done in separate functions.
Perhaps it would help to cache the solution of the sparse Jacobian
and spare Hessian graph coloring algorithm.
Then, when the sparsity pattern does not depend on the argument value,
these colorings would not have to be recomputed.
Library
One could build a CppAD library for use with the type AD<double>.
This would speed up compilation for the most common usage where
the Base type is double.
Remove Dead Code
A single RevSparseJac
sweep could be used to determine
which parts of the operation sequence in an
ADFun
object can be removed.
Expression Hashing
Hash codes could be used to detect expressions that have already
been computed (and avoid extra entries in the operation sequence).
This would also involve has coding the constants and avoiding
duplicate copies in the constant table.
Scripting Languages
One could develop a
SWIG compatible interface to AD<double> and ADFun<double> that
would make it easy to connect the SWIG languages, e.g., Python, see,
SWIG
for a description of SWIG
and a list of the languages.
This could also be used for faster evaluation of algorithms
that have a fixed operation sequence
.
This would require the library
wish list
entry to be implemented.
Boost
The following is a list of some software guidelines taken from
boost
.
These guidelines are not followed by the current CppAD source code,
but perhaps they should be:
Names (except as noted below)
should be all lowercase, with words separated by underscores.
For example, acronyms should be treated as ordinary names
(xml_parser instead of XML_parser).
Template parameter names should begin with an uppercase letter.
Use spaces rather than tabs.
Sparse Hessians
Testing cppad_sparse_hessian.cpp
with USE_CPPAD_SPARSE_HESSIAN equal to
1 (true) and 0 (false)
indicates that sparse_hessian is more efficient
than Hessian
(for large sparse cases).
Create an implementation of sparse_hessian
that is more efficient
(the initial implementation was only meant as a demonstration).
For example, use arrays of linked lists where for each row (column) the
list contains the non-zero column (row) indices.
(Also see sparse Hessian discussion under Ipopt
.)
Speed Testing
Extend the speed tests for Adolc, Fadbad, and Sacado
to run under MS Windows.
Run the CppAD speed
tests on a set of different machines
and operating systems.
Tracing
Add forward and reverse mode operation tracing to the developer documentation
(perhaps it will eventually become part of
the user interface and documentation).
VecAD
Make assignment operation in VecAD
like
assignment in ad_copy
.
This will fix slicing to int when assigning
from double to
VecAD< AD<double> >::reference object.