Prev Next whats_new_18

@(@\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 .
Changes and Additions to CppAD During 2018

12-30
On 12-12 the directory cppad was moved to include/cppad. The make install step of the install instructions did not work after that. This has been fixed.

12-23
The documentation for how to run multi_atomic_two was missing. This has been fixed.

12-17
Keep the documentation for deprecated features, but remove their examples. The documentation is intended to help conversion to using features that have not been deprecated.

12-16
Add bin/check_tab.sh and remove some remaining tab characters that it found in the CppAD source code.

12-15
Fix name for special version of cmake required by msys2 , mingw-w64-x86_64-cmake.

12-12
  1. Change tabs to spaces in both the source code and the examples.
  2. The inline specifiers was removed from template functions and class member functions in both the source code and examples; see the inline entry in the wish_list .
  3. In the documentation and examples change the VectorType to TypeVector for Type denoting various types; e.g., Bool, Size, Double, ...
  4. Change the license to be EPL-2.0 with a GPL-2.0 or later alternative (so one version of the source code can be used for both EPL and GPL licenses).
  5. Change @(@ B^n @)@ to @(@ \B{R}^n @)@ when referring to the vector space that ADFun object refer to. (Note that this may not be real vectors; e.g., base_complex.hpp .)
  6. Move the cppad sub-directory to include/cppad.
  7. Add a checkpoint constructor item to the wish list. This has been completed; see the fun argument to the second generation checkpoint constructor.


11-13
  1. There was a problem using elapsed_seconds with the Microsoft Visual Studio compiler. To be specific, microsoft_timer could be an undefined external. This has been fixed.
  2. The # define NOMINMAX command was placed before # include <windows.h> so that std::min and std::max work properly. (This only matters when using the Visual Studio compiler.)
  3. For some unknown reason, the Microsoft Visual Studio compiler was giving a senseless error at the variable name small. This has been changed to eps in interface2c.cpp .
  4. The deprecated autotools was fixed to work with the current version of CppAD.
  5. Fix a warning in test_more/cppad_for_tmb/multi_atomic_two.cpp when using boost vectors for testing.


11-11
Fix a warning in test_more/cppad_for_tmb/multi_chkpoint_one.cpp when using boost vectors for testing.

11-06
The initial size_order is now zero for an af created using the base2ad feature.

11-04
  1. The simple version of the cmake command is now suggested as a starting point installing CppAD.
  2. The windows install procedure has been fixed; see msys2 and visual studio .
  3. The Visual Studio compiler gave a warning because the get_record_compare (not in use API) was returning size_t when it should have returned a bool. It also gave a warning in test_more/general/erf.cpp about conversion from double to size_t. These have been fixed.
  4. The Visual Studio compiler also gave an error because it requires the ADFun copy constructor for assignment to a base2ad result. This copy constructor has been allowed (but only for this case).
  5. The Visual Studio compiler does not seem to be able to mix debug and release code. One of the tests had to be modified enable the user to avoid this; see visual studio .


11-01
There was a bug in the checkpoint functions with multiple threads (see 10-29 below). This has been fixed.

10-31
  1. The items in the wish_list were re-organized so that the New Atomic API entries were all under one heading.
  2. A credit to Kasper Kristensen was added to the subgraph research item.


10-29
The following is a list of changes to the documentation:
  1. The theory section was moved to a higher level in the documentation and the introduction we put in that section.
  2. The wish_list section was brought up to date and the research section was added.
  3. Some of the links to the CppAD addons section were broken. This has been fixed.
  4. The wish list entries for the following items were removed because they were completed: base2ad , checkpoint functions now work with multiple threads , the optimize memory usage has been reduced.
  5. The operations sequence wish list entry was changed to the Constant entry which has since been completed; see Constant . The software guidelines entry was changed to just Convert Tabs to Spaces.


10-25
  1. There was bug in f.optimize when f has dynamic parameters . This has been fixed.
  2. Fix warning, from old gcc compilers, that -Wfloat-conversion and -Wfloat-conversion are not valid options.
  3. Instructions for obtaining GPL distribution were added near the top of the home page .


10-24
The new CppAD home pages has been edited to be a better introduction to CppAD. In addition, more discussion was added to the get_started.cpp example.

10-19
The speed tests for the deprecated cppad_ipopt_nlp now use the cppad_debug_which flag in the same was as other test (not always true).

10-18
CppAD is now including the -Wconversion in its compilation. This results in warnings in more of the optional packages and so their include files are compiled like system files (without warnings); see package_prefix .

09-25
Functions af , created by af = f.base2ad , could not use af.Jacobian . This has been fixed.

09-23
The checkpoint functions did not work with functions that were created using base2ad . This has been fixed.

09-22
There was a bug in the checkpoint function when they were used in in parallel mode . The multi_chkpoint_one.cpp example was added to test this and demonstrate use of checkpoints in parallel mode.

09-19
Add the base2ad capability. This creates a function that computes using AD<Base> objects from one that computes using Base objects. This enables one to record any derivatives computations as part of another function and thereby removes the need for multiple levels of AD . For example, compare base2ad.cpp with mul_level_ode.cpp .

09-17
Create a section with just the atomic_two specifications and another with the atomic examples .

09-16
The taylor_ode.cpp example was moved to taylor_ode.cpp and changed to use the same notation as taylor_ode .

09-15
  1. Add a move semantics version of the function assignment operator.
  2. Move AD theory for using Taylor's method to solve an ode to the separate section taylor_ode .


08-27
  1. Add a discussion about efficiency for dynamic parameters.
  2. In a comment in the new_dynamic.cpp example, change 'independent dynamic parameters' to 'dynamic parameter'.
  3. The eigen_vector class was moved out of the global namespace to the CppAD namespace. This class was recently introduced (08-12 ) and so this change to the API should be easy to fix in user code.


08-19
  1. Fix dynamic parameter arguments to discrete functions.
  2. Fix some detection of identically zero and one for dynamic parameters.
  3. Fix an access of invalid memory during new_dynamic .
  4. Add optimization of dynamic parameters during f.optimize .


08-18
  1. Fix some remaining clang warnings.
  2. Fix Integer and unary minus for dynamic parameters.


08-17
Fix compound assignment operators where left operand is a constant parameter and right operand is a dynamic parameter.

08-16
Fix compound assignment operators where left operand is a dynamic parameter. and right operand is a variable .

08-14
Fix compound assignment operators where both operands are parameters and one is a dynamic parameter.

08-13
Fix conversion warnings generated by the version 6.0 of the clang++ compiler.

08-12
Add the eigen_vector wrapper class so that an eigen_vector is a true SimpleVector ; i.e., it using size_t instead of Eigen::Index for its sizes and indices.

08-10
Extend the CppAD vector class to enable element access using any index type that has a conversion to the type size_t.

08-08
  1. Fix a bug in the CppAD::local::pod_vector template class (not part of the user API) that wasted memory. This bug was part of the 06-04 change this year.
  2. Fix very recent bug in the optimization of dynamic parameters in PrintFor statements.
  3. Fix some valgrind warnings about use of values that have not be initialized or set.
  4. Suppress printing of PrintFor operations during the optimize process.


08-05
The amount of memory in an operation sequence has changed; see f.size_op_seq .

08-04
Remove the restrictions on dynamic parameters. They can now be used anywhere except as indices and values in VecAD vectors. (This was fixed on 2019-01-06 .)

07-30
  1. The Constant function was added.
  2. API Warning for uses who define there own Base type. The function IdenticalPar was changed to IdenticalCon and IdenticalEqualPar was change to IdenticalEqualCon. This was done because the value of dynamic parameters can change.
  3. The some errors in the pkgconfig files cppad.pc and cppad-uninstalled.pc were corrected.


07-27
We are adding the dependent dynamic parameters; i.e., parameters that depend on the independent dynamic parameters in a call to Independent. For this reason the function f.size_dynamic() has been replaced by size_dyn_ind , size_dyn_par , and size_dyn_arg .

07-23
Change the required version of cmake from greater than or equal 3.1 to greater than or equal 2.8.4.

07-18
Fix a bug (introduced on 07-02 ) in optimize routine when dynamic parameters are present.

07-02
Add a special type of parameter that can change value, see purpose for dynamic parameters.

06-27
Simplify the process in the optimize procedure where it recognizes identical expressions (and do more error checking of this process). This may speed up the optimization for large cases where multiple expressions have the same hash code.

06-22
Add an abs-normal wish list item.

06-20
Worked more on reducing memory and increasing the speed of the optimization of ADFun<Base> objects.

06-19
Another (smaller) reduction in the amount of extra memory used during the optimize process. This time a vector of length size_op was converted from the type used for C++ enums to a type that only used one byte.

06-13
Reduce the amount of extra memory used during the optimize process. To be more specific, two vectors that were separate now share the same memory. These vectors have size equal to size_op for the old operation sequence, and element type cppad_tape_addr_type .

06-12
There was false sharing in the hash table used to detect identical parameter values during the recording of AD<Base> operations. This has been fixed and should result in a speed up when multiple threads are recording at the same time.

06-04
The memory used during subgraph_reverse , subgraph_sparsity , and optimize was changed to use the smallest addressing type possible for the tape in question. To be specific the smallest type from the set unsigned short, unsigned int, size_t, in that order.

05-29
The autotools install procedure was not working since 05-26. This has been fixed.

05-28
  1. The Coin download page is not longer supporting monthly version. These versions are now supported by the git download procedure.
  2. The windows install procedures have not been kept up to date and so have been removed. It has since been fixed; see msys2 and Visual Studio .


05-26
Fix some warnings when testing with g++ -std=c++98.

05-20
  1. The amount of memory used to store each operator was changed from the size of an enum type to the size of an unsigned char; i.e., one byte. This changed CppAD::local::OpCode to CPPAD_VEC_ENUM_TYPE in the expression used to compute size_op_arg . Note CPPAD_VEC_ENUM_TYPE is not in CppAD API and may change.
  2. There was a bug in the call to optimize for the CppAD speed_cppad tests. To be specific no_print_for was corrected to no_prior_for_op .


05-17
The memory report for the CppAD matrix multiply speed test was changed to report the memory before clearing the atomic functions; see the end of cppad_mat_mul.cpp .

05-04
The comparison operations were changed on 2015-01-20 when the abort_op_index option was added. This change caused a slow down CppAD because the compare operators used to not be recorded when NDEBUG was defined. The record_compare option has been added so that one can obtain this better performance (when one does not need the compare_change function or the abort_op_index feature).

05-03
The following was merged in from the reduce_tape branch: A change was made in the way CppAD iterated over the operation sequence when subgraph operations were first added; see the heading 11-20 in whats new for 2017. This caused CppAD to always use more memory for storing tapes. This has been fixed so this extra memory is only allocated when it is needed. In addition it can be freed; see size_random and clear_subgraph . In addition, this changed the amount of memory returned by size_op_seq so that it no longer includes the part returned by size_random.

04-29
Change the cppad_sparse_hessian.cpp speed test to support the symmetric option for sparsity calculations. This was added because, even though the symmetric sparsity patterns are more efficient, they seem to take longer to calculation and hence general sparsity patterns may be faster; see the sparse hessian color_method .

04-13
The speed_cppad tests were modified to report the amount of memory allocated at the end of each tests. This will aid in the reduction of CppAD memory usage.

03-20
Fix bug in optimize and subgraph_sparsity when using C++11 erf function.

03-19
Add more detail to the dynamic parameter whish list item. This item has been implemented and removed from the wish list; see new_dynamic .

03-04
The example/abs_normal directory was missing from the example sub-directory list. This has been fixed.

03-02
Add the pat member function to the sparse_rcv template class.

02-27
Documentation was added to state that the work structure for sparse_jac ( sparse_hes ) can be used a different f and a different subset provided that Jacobian (Hessian) sparsity pattern for f and the sparsity pattern in subset are the same.

02-26
The routine sparse2eigen , added on 02-20, only worked when the values in the matrix were integers. This bug has been fixed.

02-23
The syntax for some of the utility files were missing the # include command (or just the # in the include command); e.g., see the syntax for the set_union utility.

02-20
Add the utility function sparse2eigen .
Input File: omh/appendix/whats_new/18.omh