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