source: trunk/omh/wish_list.omh @ 2939

Last change on this file since 2939 was 2939, checked in by bradbell, 7 years ago
  1. Make sure all '# defines' have an '# undef' and vise-verser.
  2. Add adolc tests to New reoutine that check defines have matching undef. run add missing source directory to search. fix bug in speed tests (name of preprocessor macro).
pow.hpp: fix comment.
thread_alloc.hpp: fix spelling in comment. Automatically set LD_LIBRARY_PATH.
base_adolc.hpp: fix problem when using ADOL-C-2.4.1
adolc_prefix.omh: add link to

  • Property svn:keywords set to Id
File size: 5.6 KB
1$Id: wish_list.omh 2939 2013-10-14 11:06:18Z bradbell $
2/* --------------------------------------------------------------------------
3CppAD: C++ Algorithmic Differentiation: Copyright (C) 2003-13 Bradley M. Bell
5CppAD is distributed under multiple licenses. This distribution is under
6the terms of the
7                    Eclipse Public License Version 1.0.
9A copy of this license is included in the COPYING file of this distribution.
10Please visit for information on other licenses.
11-------------------------------------------------------------------------- */
12$begin WishList$$
14        recomputed
15        recomputation
16        checkpointing
17        afun
18        iterator
19        std
20        cos
21        Ipopt
22        Adolc
23        xml
24        hpp
25        Cpp
26        Atan
27        cppad
30$section The CppAD Wish List$$
31$index wish list$$
32$index new, features$$
33$index features, new$$
35$head Atan2$$
36$index atan2$$
37The $cref/atan2/Atan2/$$ function could be made faster by adding
38a special operator for it.
40$head BenderQuad$$
41See the $cref/problem/BenderQuad/Problem/$$ with the
42current $code BenderQuad$$ specifications.
44$head Checkpointing$$
45$index checkpoint$$
46It would be more flexible to also have a
47$cref/checkpoint constructor/checkpoint/constructor/$$
48that passed in an $cref ADFun$$ object instead of a algorithm.
49Perhaps the syntax would be
51        checkpoint %afun%(%name%, %ad_fun%, %copy%)
53where $icode copy$$ would determine if a separate copy of $icode ad_fun$$
54was made or if a pointer was used.
55Note that if a pointer is used, it becomes invalid when the destructor
56for $icode ad_fun$$ is called.
58$head cppad_ipopt_sum$$
59Create a simpler class an Ipopt AD interface with the objective
60and other functions are sums of functions each of which gets recorded.
62$head Forward Mode Recomputation$$
63If the results of $cref ForwardAny$$ have already been computed and are still
64stored in the $cref ADFun$$ object (see $cref size_taylor$$),
65then they do not need to be recomputed and the results can just be returned.
67$head Iterator Interface$$
68If the CppAD API had iterator interfaces,
69in addition to simple vector interfaces,
70it would not be necessary to (sometimes) copy information to simple vectors
71with the correct dimension.
73$head Library$$
74$index compile, speed AD<double>$$
75$index speed, compile AD<double>$$
76$index AD<double>, compile speed$$
77One could build a CppAD library for use with the type $code AD<double>$$.
78This would speed up compilation for the most common usage where
79the $icode Base$$ type is $code double$$.
81$head Multiple Argument Forward$$
82$index speed, forward$$
83$index forward, speed$$
84It has been suggested that computing and storing forward mode
85results for multiple argument values
86is faster for Adolc.
87Perhaps CppAD should allow for forward mode at
88multiple argument values.
90$head Numeric Limits$$
91$index testing, machine epsilon$$
92$index machine epsilon, testing$$
93Use a multiple of $code std::numeric_limits<double>::epsilon()$$ instead
94$code 1e-10$$ for a small number in correctness checks; e.g.,
95see $cref tan.cpp$$.
97$head Operation Sequence$$
98$index sequence, operation$$
99$index operation, sequence$$
100It is possible to detect if the
101AD of $icode Base$$
102$cref/operation sequence/glossary/Operation/Sequence/$$
103does not depend on any of the
104$cref/independent variable/glossary/Tape/Independent Variable/$$ values.
105This could be returned as an extra
106$cref seq_property$$.
108$head Optimization$$
109$index optimize, tape$$
110$index tape, optimize$$
112$subhead Conditional Expressions$$
113If the logical part of a $cref CondExp$$ is identically true
114or false, then only one of the two expressions needs to be evaluated.
117$subhead Expression Hashing$$
118During expression sequence $cref/optimization/optimize/$$,
119hash codes are used to detect expressions that have already
120been computed.
121Perhaps this should be done during the original forward mode recording.
123$subhead Variable Pairs$$
124Suppose that $icode x$$ is a variable
125and $codei%sin(%x%)%$$ is used in an expression.
126The extra expression $codei%cos(%x%)%$$ is also computed
127during a $cref Forward$$ calculation.
128This is because the derivative of the original expression
129is expressed in terms of the values of the other expression.
130In general,
131the representation of the derivative of an expression to order $icode p$$
132may include the derivative of another expression to order $icode%p%-1%$$.
133In our example, if only the value $codei%sin(%x%)%$$
134is requested, it is not necessary to compute $codei%cos(%x%)%$$.
135We should remove the computation of extra expressions derivatives that are
136not need to compute the requested derivative of the original expression.
138$head Preprocessor Symbols$$
139Make sure all the user API preprocessor symbols are list in
140the $cref preprocessor$$ section.
142$head Software Guidelines$$
144$subhead Boost$$
145The following is a list of some software guidelines taken from
147These guidelines are not followed by the current CppAD source code,
148but perhaps they should be:
150$list number$$
151Names (except as noted below)
152should be all lowercase, with words separated by underscores.
153For example, acronyms should be treated as ordinary names
154(xml_parser instead of XML_parser).
157Template parameter names should begin with an uppercase letter.
160Use spaces rather than tabs. 
161Currently, CppAD uses a tabs stops at column multiples of 5.
162Five columns were chosen to avoid high levels of indenting and to allow for
164        if( expression )
165                statement
166        else    statement
168with a tab after the else.
169Automatic conversion to actual spaces should be easy.
173$head Tracing$$
174$index operation, sequence tracing$$
175$index sequence, operation tracing$$
176$index tracing, operation sequence$$
177Add operation sequence tracing to the user API and documentation.
Note: See TracBrowser for help on using the repository browser.