Prev Next whats_new_10

@(@\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}} }@)@
Changes and Additions to CppAD During 2010

This section contains a list of the changes to CppAD during 2010 (in reverse order by date). The purpose of this section is to assist you in learning about changes between various versions of CppAD.

  1. Add specifications for the CppAD pkgconfig files.
  2. Update the CppAD README file.
  3. Move most all CppAD development shell scripts to the bin subdirectory of the distribution directory.
  4. Fix warnings generated by the g++ compiler option -Wshadow; for example, sparse_pack.hpp:101:2: warning: declaration of 'end' shadows a member of 'this'

If NDEBUB was defined, the default CppAD error handler would return because its assert had no effect in this case. This has been fixed by placing a call to std::exit(1) after its assert.

There was a bug (introduced on 09-22) in make test when the configure command was executed from a directory other than the distribution directory (the cppad_ipopt_nlp did not build). This has been fixed.

Promote cppad_ipopt_nlp from an example to a library that gets installed (provided that the ipopt_dir is specified on the configure command line).

Fix problems with linking of cppad_ipopt_nlp test with both older and newer versions of ipopt.

The new versions of ipopt use pkg-config to record the location where its necessary libraries are stored on the system. The cppad configure command has been improved so that it can work both with versions of ipopt that use pkg-config and ones that don't.

Old versions of the ipopt library were located in ipopt_dir/lib/libipopt.* (see ipopt_dir ), but newer versions will be located in ipopt_dir/lib/coin/libipopt.* . The directory ipopt_dir/lib/coin has been added to the library search path so that the cppad_ipopt_nlp examples work with both old and new versions of ipopt.

In the case where the preprocessor symbol NDEBUG was defined (see speed ), the function
Scalarx, const Scalary)
was not defined; see bug report . This has been fixed.

Change the multi-level taping examples mul_level.cpp and mul_level_adolc.cpp to be more efficient.

Include Blas and Linpack libraries in makefile links for cppad_ipopt_nlp examples. This removes the need to use get.Blas when building Ipopt.

The speed test in cppad_ipopt/speed was missing a link to the library ../src/libcppad_ipopt.a. This has been fixed.

There was a bug in the error checking done by cppad/local/sub_op.hpp that caused the following improper abort:
Error detected by false result for
    arg[1] < i_z
at line 337 in the file
This was fixed in the trunk. It was also fixed in the release with version number 20100101.3 which can be downloaded from the CppAD download directory .

Some of the speed_utility library (in speed/src) was being compiled for debugging. This has been changed and they are now compiled with debugging off and optimization on.

The old reverse_any example was moved to reverse_three.cpp , the old checkpoint example is now the general case reverse example, and a better checkpoint.cpp/ example was created.

The optimize routine would mistakenly remove some expressions that depended on the independent variables and that affected the result of certain CondExp operations. This has been fixed.

Extend reverse_any so that it can be used for checkpointing ; i.e., splitting reverse mode calculations at function composition points.

Fixed a bug in handling vector of boolean sparsity patterns. (when the number of elements per set was a multiple of sizeof(size_t)).

The speed directory has been reorganized and the common part of the link functions , as well as the microsoft_timer , have been moved to the subdirectory speed/src where a library is built.

A bug was introduced in the 02-05 change whereby the make command tried to build the libcppad_ipopt.a library even if IPOPT_DIR was not specified on the configure command line. This has been fixed.

The Microsoft project files for the speed tests were extended so that the worked properly for the Release (as well as the Debug) configuration. (This required conversion from Visual Studio Version 7 to Visual Studio 2008 format.)

Add an automated check for optimize bug fixed on 02-05. (Automatic checking for PrintFor bug was added on 02-05.)

  1. Simplify running all the tests by adding the make test command.
  2. Simplify the configure command by removing need for: --with-Speed, --with-Introduction, --with-Example, --with-TestMore, and --with-PrintFor.
  3. Add files that were missing in the Microsoft Visual Studio projects.
  4. Fix two significant bugs. One in the optimize command and the other in the PrintFor command.

Fix a mistakes in the test bender_quad.cpp . In addition, the optimize routine was used to reduce the tape before doing the calculations.

The routine opt_val_hes was added as an alternative to BenderQuad .

Another speed improvement was made to cppad_ipopt_nlp . To be specific, the Lagragian multipliers where checked and components that were zero were excluded form the Hessian evaluation.

It appears that in cppad_ipopt_nlp , when retape[k] was true, and L[k] > 1, it was possible to use the wrong operation sequence in the calculations (though a test case that demonstrated this could not be produced). This is because the argument value to @(@ r_k (u) @)@ depends on the value of @(@ \ell @)@ in the expression @[@ r_k \circ [ J_{k, \ell} \otimes n ] (x) @]@ (even when the value of @(@ x @)@ does not change).

There was a bug in the ipopt_nlp_ode_check.cpp program, for a long time, that did not show up until now. Basically, the check had code of the was using an undefined value. This has been fixed.

Improve the sparsity patterns and reduce the amount of memory required for large sparse problems using cppad_ipopt_nlp . The speed test cppad_ipopt/speed showed significant improvement.

We plan to split up the ipopt_cppad/src/ipopt_cppad_nlp.hpp include file. In preparation, the example ipopt_cppad has been changed to cppad_ipopt. This will facilitate using CPPAD_IPOPT_* for the # ifdef commands in the new include files (note that they must begin with CPPAD).

The ipopt_cppad subdirectory of the distribution has been split into an src, example, and speed subdirectories. The example (speed) subdirectory is where one builds the ipopt_cppad_nlp examples (speed tests ).

The following items have been fulfilled and hence were removed for the wish_list :
  1. If an exception occurs before the call to the corresponding ADFun constructor or Dependent , the tape recording can be stopped using abort_recording .
  2. A speed test for ipopt_cppad_nlp was added; see ipopt_ode_speed.cpp .
  3. The optimize command uses hash coding to check when an expression is already in the tape and can be reused.
  4. The optimize command removes operations that are not used by any of the dependent variables.
  5. The ad_in_c.cpp example demonstrates how to connect CppAD to an arbitrary scripting language.
  6. The vector of sets option has been added to sparsity calculations; see sparsity pattern .

Input File: omh/appendix/whats_new/whats_new_10.omh