$Id: whats_new_10.omh 3627 2015-01-30 15:49:51Z bradbell $ /* -------------------------------------------------------------------------- CppAD: C++ Algorithmic Differentiation: Copyright (C) 2003-13 Bradley M. Bell CppAD is distributed under multiple licenses. This distribution is under the terms of the Eclipse Public License Version 1.0. A copy of this license is included in the COPYING file of this distribution. Please visit http://www.coin-or.org/CppAD/ for information on other licenses. -------------------------------------------------------------------------- */ $begin whats_new_10$$ $spell Wshadow pkg-config Dir libipopt const Linpack Blas makefile op arg checkpointing sizeof libcppad_ipopt.a Microsoft Lagragian iostream obj_value std::cout endl gcc retape hpp ifdef nlp ipopt_cppad/src CppAD $$ $section Changes and Additions to CppAD During 2010$$ $head Introduction$$ 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. $head 12-31$$ $list number$$ Add specifications for the CppAD $cref pkgconfig$$ files. $lnext Update the CppAD README file. $lnext Move most all CppAD development shell scripts to the $code bin$$ subdirectory of the distribution directory. $lnext Fix warnings generated by the $code g++$$ compiler option $code -Wshadow$$; for example, $code sparse_pack.hpp:101:2: warning: declaration of 'end' shadows a member of 'this' $$ $lend $head 11-27$$ If $code NDEBUB$$ was defined, the default CppAD $cref/error handler/ErrorHandler/$$ would return because its $code assert$$ had no effect in this case. This has been fixed by placing a call to $code std::exit(1)$$ after its assert. $head 09-26$$ There was a bug (introduced on 09-22) in $code make test$$ when the $code configure$$ command was executed from a directory other than the distribution directory (the $cref cppad_ipopt_nlp$$ did not build). This has been fixed. $head 09-22$$ Promote $cref cppad_ipopt_nlp$$ from an example to a library that gets installed (provided that the $cref/ipopt_dir/auto_tools/ipopt_dir/$$ is specified on the $code configure$$ command line). $head 08-21$$ Fix problems with linking of $cref cppad_ipopt_nlp$$ test with both older and newer versions of $code ipopt$$. $head 07-14$$ The new versions of ipopt use $code pkg-config$$ to record the location where its necessary libraries are stored on the system. The cppad $cref/configure/auto_tools/Configure/$$ command has been improved so that it can work both with versions of ipopt that use $code pkg-config$$ and ones that don't. $head 07-11$$ Old versions of the ipopt library were located in $icode%ipopt_dir%/lib/libipopt.%*%$$ (see $cref/ipopt_dir/auto_tools/ipopt_dir/$$), but newer versions will be located in $icode%ipopt_dir%/lib/coin/libipopt.%*%$$. The directory $icode%ipopt_dir%/lib/coin%$$ has been added to the library search path so that the $cref/cppad_ipopt_nlp examples/cppad_ipopt_nlp/Example/$$ work with both old and new versions of ipopt. $head 06-01$$ In the case where the preprocessor symbol $code NDEBUG$$ was defined (see $cref/speed/Faq/Speed/$$), the function $codei% CheckSimpleVector(const %Scalar%& %x%, const %Scalar%& %y%) %$$ was not defined; see $href%http://list.coin-or.org/pipermail/cppad/2010q2/000166.html%bug report%$$. This has been fixed. $head 04-28$$ Change the multi-level taping examples $cref mul_level.cpp$$ and $cref mul_level_adolc.cpp$$ to be more efficient. $head 04-26$$ Include Blas and Linpack libraries in makefile links for $cref cppad_ipopt_nlp$$ examples. This removes the need to use get.Blas when building Ipopt. $pre $$ The speed test in $code cppad_ipopt/speed$$ was missing a link to the library $code ../src/libcppad_ipopt.a$$. This has been fixed. $head 04-24$$ There was a bug in the error checking done by $code cppad/local/sub_op.hpp$$ that caused the following improper abort: $codei% Error detected by false result for arg[1] < i_z at line 337 in the file %...%/include/cppad/local/sub_op.hpp %$$ This was fixed in the trunk. It was also fixed in the release with version number $code 20100101.3$$ which can be downloaded from the CppAD $href%http://www.coin-or.org/download/source/CppAD/%download directory%$$. $head 04-01$$ Some of the $cref speed_utility$$ library (in $code speed/src$$) was being compiled for debugging. This has been changed and they are now compiled with debugging off and optimization on. $head 03-11$$ The old $cref reverse_any$$ example was moved to $cref reverse_three.cpp$$, the old checkpoint example is now the general case reverse example, and a better $code checkpoint.cpp/$$ example was created. $head 03-10$$ The $cref optimize$$ routine would mistakenly remove some expressions that depended on the independent variables and that affected the result of certain $cref CondExp$$ operations. This has been fixed. $head 03-09$$ Extend $cref reverse_any$$ so that it can be used for $cref/checkpointing/checkpoint/$$; i.e., splitting reverse mode calculations at function composition points. $head 03-03$$ Fixed a bug in handling $cref/vector of boolean/glossary/Sparsity Pattern/Vector of Boolean/$$ sparsity patterns. (when the number of elements per set was a multiple of $code sizeof(size_t))$$. $head 02-11$$ The $code speed$$ directory has been reorganized and the common part of the $cref/link functions/speed_main/Link Functions/$$, as well as the $cref microsoft_timer$$, have been moved to the subdirectory $code speed/src$$ where a library is built. $head 02-08$$ A bug was introduced in the $cref/02-05/whats_new_10/02-05/$$ change whereby the $code make$$ command tried to build the $code libcppad_ipopt.a$$ library even if $code IPOPT_DIR$$ was not specified on the $cref/configure/auto_tools/Configure/$$ command line. This has been fixed. $head 02-06$$ 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.) $pre $$ Add an automated check for $cref optimize$$ bug fixed on $code 02-05$$. (Automatic checking for $cref PrintFor$$ bug was added on $code 02-05$$.) $head 02-05$$ $list number$$ Simplify running all the tests by adding the $code make test$$ command. $lnext Simplify the $cref/configure/auto_tools/Configure/$$ command by removing need for: $code --with-Speed$$, $code --with-Introduction$$, $code --with-Example$$, $code --with-TestMore$$, and $code --with-PrintFor$$. $lnext Add files that were missing in the Microsoft Visual Studio projects. $lnext Fix two significant bugs. One in the $cref optimize$$ command and the other in the $cref PrintFor$$ command. $lend $head 02-03$$ Fix a mistakes in the test $cref bender_quad.cpp$$. In addition, the $cref optimize$$ routine was used to reduce the tape before doing the calculations. $pre $$ The routine $cref opt_val_hes$$ was added as an alternative to $cref BenderQuad$$. $head 01-26$$ Another speed improvement was made to $cref cppad_ipopt_nlp$$. To be specific, the Lagragian multipliers where checked and components that were zero were excluded form the Hessian evaluation. $head 01-24$$ It appears that in $cref cppad_ipopt_nlp$$, when $code retape[k]$$ was true, and $code 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 $latex r_k (u)$$ depends on the value of $latex \ell$$ in the expression $latex \[ r_k \circ [ J_{k, \ell} \otimes n ] (x) \] $$ (even when the value of $latex x$$ does not change). $pre $$ There was a bug in the $cref 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. $head 01-23$$ Improve the sparsity patterns and reduce the amount of memory required for large sparse problems using $cref cppad_ipopt_nlp$$. The speed test $code cppad_ipopt/speed$$ showed significant improvement. $head 01-20$$ We plan to split up the $code ipopt_cppad/src/ipopt_cppad_nlp.hpp$$ include file. In preparation, the example $code ipopt_cppad$$ has been changed to $code cppad_ipopt$$. This will facilitate using $code CPPAD_IPOPT_*$$ for the $code # ifdef$$ commands in the new include files (note that they must begin with $code CPPAD$$). $head 01-18$$ The $code ipopt_cppad$$ subdirectory of the distribution has been split into an $code src$$, $code example$$, and $code speed$$ subdirectories. The $code example$$ ($code speed$$) subdirectory is where one builds the $cref/ipopt_cppad_nlp/cppad_ipopt_nlp/$$ examples ($cref%speed tests%ipopt_ode_speed.cpp%$$). $head 01-04$$ The following items have been fulfilled and hence were removed for the $cref WishList$$: $list number$$ If an exception occurs before the call to the corresponding $cref ADFun$$ constructor or $cref Dependent$$, the tape recording can be stopped using $cref abort_recording$$. $lnext A speed test for $cref/ipopt_cppad_nlp/cppad_ipopt_nlp/$$ was added; see $cref ipopt_ode_speed.cpp$$. $lnext The $cref optimize$$ command uses hash coding to check when an expression is already in the tape and can be reused. $lnext The $cref optimize$$ command removes operations that are not used by any of the dependent variables. $lnext The $cref ad_in_c.cpp$$ example demonstrates how to connect CppAD to an arbitrary scripting language. $lnext The vector of sets option has been added to sparsity calculations; see $cref/sparsity pattern/glossary/Sparsity Pattern/$$. $lend $end