1.. _chapter-version-history: 2 3======== 4Releases 5======== 6 7HEAD 8==== 9 10#. Added ``Solver::Options::IsValid`` which allows users to validate 11 their solver configuration before calling ``Solve``. 12 13#. Added ``EIGEN_SPARSE_QR`` algorithm for covariance estimation using 14 ``Eigen``'s sparse QR factorization. (Michael Vitus) 15 16Backward Incompatible API Changes 17--------------------------------- 18 19#. ``Solver::Options::solver_log`` has been removed. If needed this 20 iteration callback can easily be implemented in user code. 21 22#. The ``SPARSE_CHOLESKY`` algorithm for covariance estimation has 23 been removed. It is not rank revealing and numerically poorly 24 behaved. Sparse QR factorization is a much better way to do this. 25 26#. The ``SPARSE_QR`` algorithm for covariance estimation has been 27 renamed to ``SUITE_SPARSE_QR`` to be consistent with 28 ``EIGEN_SPARSE_QR``. 29 30 311.9.0 32===== 33 34New Features 35------------ 36 37#. Bounds constraints: Support for upper and/or lower bounds on 38 parameters when using the trust region minimizer. 39#. Dynamic Sparsity: Problems in which the sparsity structure of the 40 Jacobian changes over the course of the optimization can now be 41 solved much more efficiently. (Richard Stebbing) 42#. Improved support for Microsoft Visual C++ including the ability to 43 build and ship DLLs. (Björn Piltz, Alex Stewart and Sergey 44 Sharybin) 45#. Support for building on iOS 6.0 or higher (Jack Feng). 46#. Autogeneration of config.h that captures all the defines used to 47 build and use Ceres Solver. 48#. Simpler and more informative solver termination type 49 reporting. (See below for more details) 50#. New `website <http://www.ceres-solver.org>`_ based entirely on 51 Sphinx. 52#. ``AutoDiffLocalParameterization`` allows the use of automatic 53 differentiation for defining ``LocalParameterization`` objects 54 (Alex Stewart) 55#. LBFGS is faster due to fewer memory copies. 56#. Parameter blocks are not restricted to be less than 32k in size, 57 they can be up to 2G in size. 58#. Faster ``SPARSE_NORMAL_CHOLESKY`` solver when using ``CX_SPARSE`` 59 as the sparse linear algebra library. 60#. Added ``Problem::IsParameterBlockPresent`` and 61 ``Problem::GetParameterization``. 62#. Added the (2,4,9) and (2,4,8) template specializations. 63#. An example demonstrating the use of 64 DynamicAutoDiffCostFunction. (Joydeep Biswas) 65#. Homography estimation example from Blender demonstrating the use of 66 a custom ``IterationCallback``. (Sergey Sharybin) 67#. Support user passing a custom CMAKE_MODULE_PATH (for BLAS / 68 LAPACK). 69 70Backward Incompatible API Changes 71--------------------------------- 72 73#. ``Solver::Options::linear_solver_ordering`` used to be a naked 74 pointer that Ceres took ownership of. This is error prone behaviour 75 which leads to problems when copying the ``Solver::Options`` struct 76 around. This has been replaced with a ``shared_ptr`` to handle 77 ownership correctly across copies. 78 79#. The enum used for reporting the termination/convergence status of 80 the solver has been renamed from ``SolverTerminationType`` to 81 ``TerminationType``. 82 83 The enum values have also changed. ``FUNCTION_TOLERANCE``, 84 ``GRADIENT_TOLERANCE`` and ``PARAMETER_TOLERANCE`` have all been 85 replaced by ``CONVERGENCE``. 86 87 ``NUMERICAL_FAILURE`` has been replaed by ``FAILURE``. 88 89 ``USER_ABORT`` has been renamed to ``USER_FAILURE``. 90 91 Further ``Solver::Summary::error`` has been renamed to 92 ``Solver::Summary::message``. It contains a more detailed 93 explanation for why the solver terminated. 94 95#. ``Solver::Options::gradient_tolerance`` used to be a relative 96 gradient tolerance. i.e., The solver converged when 97 98 .. math:: 99 \|g(x)\|_\infty < \text{gradient_tolerance} * \|g(x_0)\|_\infty 100 101 where :math:`g(x)` is the gradient of the objective function at 102 :math:`x` and :math:`x_0` is the parmeter vector at the start of 103 the optimization. 104 105 This has changed to an absolute tolerance, i.e. the solver 106 converges when 107 108 .. math:: 109 \|g(x)\|_\infty < \text{gradient_tolerance} 110 111#. Ceres cannot be built without the line search minimizer 112 anymore. Thus the preprocessor define 113 ``CERES_NO_LINE_SEARCH_MINIMIZER`` has been removed. 114 115Bug Fixes 116--------- 117 118#. Disabled warning C4251. (Björn Piltz) 119#. Do not propagate 3d party libs through 120 `IMPORTED_LINK_INTERFACE_LIBRARIES_[DEBUG/RELEASE]` mechanism when 121 building shared libraries. (Björn Piltz) 122#. Fixed errant verbose levels (Björn Piltz) 123#. Variety of code cleanups, optimizations and bug fixes to the line 124 search minimizer code (Alex Stewart) 125#. Fixed ``BlockSparseMatrix::Transpose`` when the matrix has row and 126 column blocks. (Richard Bowen) 127#. Better error checking when ``Problem::RemoveResidualBlock`` is 128 called. (Alex Stewart) 129#. Fixed a memory leak in ``SchurComplementSolver``. 130#. Added ``epsilon()`` method to ``NumTraits<ceres::Jet<T, N> >``. (Filippo 131 Basso) 132#. Fixed a bug in `CompressedRowSparseMatrix::AppendRows`` and 133 ``DeleteRows``.q 134#. Handle empty problems consistently. 135#. Restore the state of the ``Problem`` after a call to 136 ``Problem::Evaluate``. (Stefan Leutenegger) 137#. Better error checking and reporting for linear solvers. 138#. Use explicit formula to solve quadratic polynomials instead of the 139 eigenvalue solver. 140#. Fix constant parameter handling in inner iterations (Mikael 141 Persson). 142#. SuiteSparse errors do not cause a fatal crash anymore. 143#. Fix ``corrector_test.cc``. 144#. Relax the requirements on loss function derivatives. 145#. Minor bugfix to logging.h (Scott Ettinger) 146#. Updated ``gmock`` and ``gtest`` to the latest upstream version. 147#. Fix build breakage on old versions of SuiteSparse. 148#. Fixed build issues related to Clang / LLVM 3.4 (Johannes 149 Schönberger) 150#. METIS_FOUND is never set. Changed the commit to fit the setting of 151 the other #._FOUND definitions. (Andreas Franek) 152#. Variety of bug fixes and cleanups to the ``CMake`` build system 153 (Alex Stewart) 154#. Removed fictious shared library target from the NDK build. 155#. Solver::Options now uses ``shared_ptr`` to handle ownership of 156 ``Solver::Options::linear_solver_ordering`` and 157 ``Solver::Options::inner_iteration_ordering``. As a consequence the 158 ``NDK`` build now depends on ``libc++`` from the ``LLVM`` project. 159#. Variety of lint cleanups (William Rucklidge & Jim Roseborough) 160#. Various internal cleanups including dead code removal. 161 162 1631.8.0 164===== 165 166New Features 167------------ 168#. Significant improved ``CMake`` files with better robustness, 169 dependency checking and GUI support. (Alex Stewart) 170#. Added ``DynamicNumericDiffCostFunction`` for numerically 171 differentiated cost functions whose sizing is determined at run 172 time. 173#. ``NumericDiffCostFunction`` now supports a dynamic number of 174 residuals just like ``AutoDiffCostFunction``. 175#. ``Problem`` exposes more of its structure in its API. 176#. Faster automatic differentiation (Tim Langlois) 177#. Added the commonly occuring ``2_d_d`` template specialization for 178 the Schur Eliminator. 179#. Faster ``ITERATIVE_SCHUR`` solver using template specializations. 180#. Faster ``SCHUR_JACOBI`` preconditioner construction. 181#. Faster ``AngleAxisRotatePoint``. 182#. Faster Jacobian evaluation when a loss function is used. 183#. Added support for multiple clustering algorithms in visibility 184 based preconditioning, including a new fast single linkage 185 clustering algorithm. 186 187Bug Fixes 188--------- 189#. Fix ordering of ParseCommandLineFlags() & InitGoogleTest() for 190 Windows. (Alex Stewart) 191#. Remove DCHECK_GE checks from fixed_array.h. 192#. Fix build on MSVC 2013 (Petter Strandmark) 193#. Fixed ``AngleAxisToRotationMatrix`` near zero. 194#. Move ``CERES_HASH_NAMESPACE`` macros to ``collections_port.h``. 195#. Fix handling of unordered_map/unordered_set on OSX 10.9.0. 196#. Explicitly link to libm for ``curve_fitting_c.c``. (Alex Stewart) 197#. Minor type conversion fix to autodiff.h 198#. Remove RuntimeNumericDiffCostFunction. 199#. Fix operator= ambiguity on some versions of Clang. (Alex Stewart) 200#. Various Lint cleanups (William Rucklidge & Jim Roseborough) 201#. Modified installation folders for Windows. (Pablo Speciale) 202#. Added librt to link libraries for SuiteSparse_config on Linux. (Alex Stewart) 203#. Check for presence of return-type-c-linkage option with 204 Clang. (Alex Stewart) 205#. Fix Problem::RemoveParameterBlock after calling solve. (Simon Lynen) 206#. Fix a free/delete bug in covariance_impl.cc 207#. Fix two build errors. (Dustin Lang) 208#. Add RequireInitialization = 1 to NumTraits::Jet. 209#. Update gmock/gtest to 1.7.0 210#. Added IterationSummary::gradient_norm. 211#. Reduced verbosity of the inner iteration minimizer. 212#. Fixed a bug in TrustRegionMinimizer. (Michael Vitus) 213#. Removed android/build_android.sh. 214 215 2161.7.0 217===== 218 219Backward Incompatible API Changes 220--------------------------------- 221 222#. ``Solver::Options::sparse_linear_algebra_library`` has been renamed 223 to ``Solver::Options::sparse_linear_algebra_library_type``. 224 225New Features 226------------ 227 228#. Sparse and dense covariance estimation. 229#. A new Wolfe line search. (Alex Stewart) 230#. ``BFGS`` line search direction. (Alex Stewart) 231#. C API 232#. Speeded up the use of loss functions > 17x. 233#. Faster ``DENSE_QR``, ``DENSE_NORMAL_CHOLESKY`` and ``DENSE_SCHUR`` 234 solvers. 235#. Support for multiple dense linear algebra backends. In particular 236 optimized ``BLAS`` and ``LAPACK`` implementations (e.g., Intel MKL, 237 ACML, OpenBLAS etc) can now be used to do the dense linear 238 algebra for ``DENSE_QR``, ``DENSE_NORMAL_CHOLESKY`` and 239 ``DENSE_SCHUR`` 240#. Use of Inner iterations can now be adaptively stopped. Iteration 241 and runtime statistics for inner iterations are not reported in 242 ``Solver::Summary`` and ``Solver::Summary::FullReport``. 243#. Improved inner iteration step acceptance criterion. 244#. Add BlockRandomAccessCRSMatrix. 245#. Speeded up automatic differentiation by 7\%. 246#. Bundle adjustment example from libmv/Blender (Sergey Sharybin) 247#. Shared library building is now controlled by CMake, rather than a custom 248 solution. Previously, Ceres had a custom option, but this is now deprecated 249 in favor of CMake's built in support for switching between static and 250 shared. Turn on BUILD_SHARED_LIBS to get shared Ceres libraries. 251#. No more dependence on Protocol Buffers. 252#. Incomplete LQ factorization. 253#. Ability to write trust region problems to disk. 254#. Add sinh, cosh, tanh and tan functions to automatic differentiation 255 (Johannes Schönberger) 256#. Simplifications to the cmake build file. 257#. ``miniglog`` can now be used as a replacement for ``google-glog`` 258 on non Android platforms. (This is NOT recommended). 259 260Bug Fixes 261--------- 262 263#. Fix ``ITERATIVE_SCHUR`` solver to work correctly when the schur 264 complement is of size zero. (Soohyun Bae) 265#. Fix the ``spec`` file for generating ``RPM`` packages (Brian Pitts 266 and Taylor Braun-Jones). 267#. Fix how ceres calls CAMD (Manas Jagadev) 268#. Fix breakage on old versions of SuiteSparse. (Fisher Yu) 269#. Fix warning C4373 in Visual Studio (Petter Strandmark) 270#. Fix compilation error caused by missing suitesparse headers and 271 reorganize them to be more robust. (Sergey Sharybin) 272#. Check GCC Version before adding -fast compiler option on 273 OSX. (Steven Lovegrove) 274#. Add documentation for minimizer progress output. 275#. Lint and other cleanups (William Rucklidge and James Roseborough) 276#. Collections port fix for MSC 2008 (Sergey Sharybin) 277#. Various corrections and cleanups in the documentation. 278#. Change the path where CeresConfig.cmake is installed (Pablo 279 Speciale) 280#. Minor errors in documentation (Pablo Speciale) 281#. Updated depend.cmake to follow CMake IF convention. (Joydeep 282 Biswas) 283#. Stablize the schur ordering algorithm. 284#. Update license header in split.h. 285#. Enabling -O4 (link-time optimization) only if compiler/linker 286 support it. (Alex Stewart) 287#. Consistent glog path across files. 288#. ceres-solver.spec: Use cleaner, more conventional Release string 289 (Taylor Braun-Jones) 290#. Fix compile bug on RHEL6 due to missing header (Taylor Braun-Jones) 291#. CMake file is less verbose. 292#. Use the latest upstream version of google-test and gmock. 293#. Rationalize some of the variable names in ``Solver::Options``. 294#. Improve Summary::FullReport when line search is used. 295#. Expose line search parameters in ``Solver::Options``. 296#. Fix update of L-BFGS history buffers after they become full. (Alex 297 Stewart) 298#. Fix configuration error on systems without SuiteSparse installed 299 (Sergey Sharybin) 300#. Enforce the read call returns correct value in ``curve_fitting_c.c`` 301 (Arnaud Gelas) 302#. Fix DynamicAutoDiffCostFunction (Richard Stebbing) 303#. Fix Problem::RemoveParameterBlock documentation (Johannes 304 Schönberger) 305#. Fix a logging bug in parameter_block.h 306#. Refactor the preconditioner class structure. 307#. Fix an uninitialized variable warning when building with ``GCC``. 308#. Fix a reallocation bug in 309 ``CreateJacobianBlockSparsityTranspose``. (Yuliy Schwartzburg) 310#. Add a define for O_BINARY. 311#. Fix miniglog-based Android NDK build; now works with NDK r9. (Scott Ettinger) 312 313 3141.6.0 315===== 316 317New Features 318------------ 319 320#. Major Performance improvements. 321 322 a. Schur type solvers (``SPARSE_SCHUR``, ``DENSE_SCHUR``, 323 ``ITERATIVE_SCHUR``) are significantly faster due to custom BLAS 324 routines and fewer heap allocations. 325 326 b. ``SPARSE_SCHUR`` when used with ``CX_SPARSE`` now uses a block 327 AMD for much improved factorization performance. 328 329 c. The jacobian matrix is pre-ordered so that 330 ``SPARSE_NORMAL_CHOLESKY`` and ``SPARSE_SCHUR`` do not have to 331 make copies inside ``CHOLMOD``. 332 333 d. Faster autodiff by replacing division by multplication by inverse. 334 335 e. When compiled without threads, the schur eliminator does not pay 336 the penalty for locking and unlocking mutexes. 337 338#. Users can now use ``linear_solver_ordering`` to affect the 339 fill-reducing ordering used by ``SUITE_SPARSE`` for 340 ``SPARSE_NORMAL_CHOLESKY``. 341#. ``Problem`` can now report the set of parameter blocks it knows about. 342#. ``TrustRegionMinimizer`` uses the evaluator to compute the gradient 343 instead of a matrix vector multiply. 344#. On ``Mac OS``, whole program optimization is enabled. 345#. Users can now use automatic differentiation to define new 346 ``LocalParameterization`` objects. (Sergey Sharybin) 347#. Enable larger tuple sizes for Visual Studio 2012. (Petter Strandmark) 348 349 350Bug Fixes 351--------- 352 353#. Update the documentation for ``CostFunction``. 354#. Fixed a typo in the documentation. (Pablo Speciale) 355#. Fix a typo in suitesparse.cc. 356#. Bugfix in ``NumericDiffCostFunction``. (Nicolas Brodu) 357#. Death to BlockSparseMatrixBase. 358#. Change Minimizer::Options::min_trust_region_radius to double. 359#. Update to compile with stricter gcc checks. (Joydeep Biswas) 360#. Do not modify cached CMAKE_CXX_FLAGS_RELEASE. (Sergey Sharybin) 361#. ``<iterator>`` needed for back_insert_iterator. (Petter Strandmark) 362#. Lint cleanup. (William Rucklidge) 363#. Documentation corrections. (Pablo Speciale) 364 365 3661.5.0 367===== 368 369Backward Incompatible API Changes 370--------------------------------- 371 372#. Added ``Problem::Evaluate``. Now you can evaluate a problem or any 373 part of it without calling the solver. 374 375 In light of this the following settings have been deprecated and 376 removed from the API. 377 378 - ``Solver::Options::return_initial_residuals`` 379 - ``Solver::Options::return_initial_gradient`` 380 - ``Solver::Options::return_initial_jacobian`` 381 - ``Solver::Options::return_final_residuals`` 382 - ``Solver::Options::return_final_gradient`` 383 - ``Solver::Options::return_final_jacobian`` 384 385 Instead we recommend using something like this. 386 387 .. code-block:: c++ 388 389 Problem problem; 390 // Build problem 391 392 vector<double> initial_residuals; 393 problem.Evaluate(Problem::EvaluateOptions(), 394 NULL, /* No cost */ 395 &initial_residuals, 396 NULL, /* No gradient */ 397 NULL /* No jacobian */ ); 398 399 Solver::Options options; 400 Solver::Summary summary; 401 Solver::Solve(options, &problem, &summary); 402 403 vector<double> final_residuals; 404 problem.Evaluate(Problem::EvaluateOptions(), 405 NULL, /* No cost */ 406 &final_residuals, 407 NULL, /* No gradient */ 408 NULL /* No jacobian */ ); 409 410 411New Features 412------------ 413#. Problem now supports removal of ParameterBlocks and 414 ResidualBlocks. There is a space/time tradeoff in doing this which 415 is controlled by 416 ``Problem::Options::enable_fast_parameter_block_removal``. 417 418#. Ceres now supports Line search based optimization algorithms in 419 addition to trust region algorithms. Currently there is support for 420 gradient descent, non-linear conjugate gradient and LBFGS search 421 directions. 422#. Added ``Problem::Evaluate``. Now you can evaluate a problem or any 423 part of it without calling the solver. In light of this the 424 following settings have been deprecated and removed from the API. 425 426 - ``Solver::Options::return_initial_residuals`` 427 - ``Solver::Options::return_initial_gradient`` 428 - ``Solver::Options::return_initial_jacobian`` 429 - ``Solver::Options::return_final_residuals`` 430 - ``Solver::Options::return_final_gradient`` 431 - ``Solver::Options::return_final_jacobian`` 432 433#. New, much improved HTML documentation using Sphinx. 434#. Changed ``NumericDiffCostFunction`` to take functors like 435 ``AutoDiffCostFunction``. 436#. Added support for mixing automatic, analytic and numeric 437 differentiation. This is done by adding ``CostFunctionToFunctor`` 438 and ``NumericDiffFunctor`` objects to the API. 439#. Sped up the robust loss function correction logic when residual is 440 one dimensional. 441#. Sped up ``DenseQRSolver`` by changing the way dense jacobians are 442 stored. This is a 200-500% improvement in linear solver performance 443 depending on the size of the problem. 444#. ``DENSE_SCHUR`` now supports multi-threading. 445#. Greatly expanded ``Summary::FullReport``: 446 447 - Report the ordering used by the ``LinearSolver``. 448 - Report the ordering used by the inner iterations. 449 - Execution timing breakdown into evaluations and linear solves. 450 - Effective size of the problem solved by the solver, which now 451 accounts for the size of the tangent space when using a 452 ``LocalParameterization``. 453#. Ceres when run at the ``VLOG`` level 3 or higher will report 454 detailed timing information about its internals. 455#. Remove extraneous initial and final residual evaluations. This 456 speeds up the solver a bit. 457#. Automatic differenatiation with a dynamic number of parameter 458 blocks. (Based on an idea by Thad Hughes). 459#. Sped up problem construction and destruction. 460#. Added matrix adapters to ``rotation.h`` so that the rotation matrix 461 routines can work with row and column major matrices. (Markus Moll) 462#. ``SCHUR_JACOBI`` can now be used without ``SuiteSparse``. 463#. A ``.spec`` file for producing RPMs. (Taylor Braun-Jones) 464#. ``CMake`` can now build the sphinx documentation (Pablo Speciale) 465#. Add support for creating a CMake config file during build to make 466 embedding Ceres in other CMake-using projects easier. (Pablo 467 Speciale). 468#. Better error reporting in ``Problem`` for missing parameter blocks. 469#. A more flexible ``Android.mk`` and a more modular build. If binary 470 size and/or compile time is a concern, larger parts of the solver 471 can be disabled at compile time. 472 473Bug Fixes 474--------- 475#. Compilation fixes for MSVC2010 (Sergey Sharybin) 476#. Fixed "deprecated conversion from string constant to char*" 477 warnings. (Pablo Speciale) 478#. Correctly propagate ifdefs when building without Schur eliminator 479 template specializations. 480#. Correct handling of ``LIB_SUFFIX`` on Linux. (Yuliy Schwartzburg). 481#. Code and signature cleanup in ``rotation.h``. 482#. Make examples independent of internal code. 483#. Disable unused member in ``gtest`` which results in build error on 484 OS X with latest Xcode. (Taylor Braun-Jones) 485#. Pass the correct flags to the linker when using 486 ``pthreads``. (Taylor Braun-Jones) 487#. Only use ``cmake28`` macro when building on RHEL6. (Taylor 488 Braun-Jones) 489#. Remove ``-Wno-return-type-c-linkage`` when compiling with 490 GCC. (Taylor Braun-Jones) 491#. Fix ``No previous prototype`` warnings. (Sergey Sharybin) 492#. MinGW build fixes. (Sergey Sharybin) 493#. Lots of minor code and lint fixes. (William Rucklidge) 494#. Fixed a bug in ``solver_impl.cc`` residual evaluation. (Markus 495 Moll) 496#. Fixed varidic evaluation bug in ``AutoDiff``. 497#. Fixed ``SolverImpl`` tests. 498#. Fixed a bug in ``DenseSparseMatrix::ToDenseMatrix()``. 499#. Fixed an initialization bug in ``ProgramEvaluator``. 500#. Fixes to Android.mk paths (Carlos Hernandez) 501#. Modify ``nist.cc`` to compute accuracy based on ground truth 502 solution rather than the ground truth function value. 503#. Fixed a memory leak in ``cxsparse.cc``. (Alexander Mordvintsev). 504#. Fixed the install directory for libraries by correctly handling 505 ``LIB_SUFFIX``. (Taylor Braun-Jones) 506 5071.4.0 508===== 509 510Backward Incompatible API Changes 511--------------------------------- 512 513The new ordering API breaks existing code. Here the common case fixes. 514 515**Before** 516 517.. code-block:: c++ 518 519 options.linear_solver_type = ceres::DENSE_SCHUR 520 options.ordering_type = ceres::SCHUR 521 522**After** 523 524 525.. code-block:: c++ 526 527 options.linear_solver_type = ceres::DENSE_SCHUR 528 529 530**Before** 531 532.. code-block:: c++ 533 534 options.linear_solver_type = ceres::DENSE_SCHUR; 535 options.ordering_type = ceres::USER; 536 for (int i = 0; i < num_points; ++i) { 537 options.ordering.push_back(my_points[i]) 538 } 539 for (int i = 0; i < num_cameras; ++i) { 540 options.ordering.push_back(my_cameras[i]) 541 } 542 options.num_eliminate_blocks = num_points; 543 544 545**After** 546 547.. code-block:: c++ 548 549 options.linear_solver_type = ceres::DENSE_SCHUR; 550 options.ordering = new ceres::ParameterBlockOrdering; 551 for (int i = 0; i < num_points; ++i) { 552 options.linear_solver_ordering->AddElementToGroup(my_points[i], 0); 553 } 554 for (int i = 0; i < num_cameras; ++i) { 555 options.linear_solver_ordering->AddElementToGroup(my_cameras[i], 1); 556 } 557 558 559New Features 560------------ 561 562#. A new richer, more expressive and consistent API for ordering 563 parameter blocks. 564#. A non-linear generalization of Ruhe & Wedin's Algorithm II. This 565 allows the user to use variable projection on separable and 566 non-separable non-linear least squares problems. With 567 multithreading, this results in significant improvements to the 568 convergence behavior of the solver at a small increase in run time. 569#. An image denoising example using fields of experts. (Petter 570 Strandmark) 571#. Defines for Ceres version and ABI version. 572#. Higher precision timer code where available. (Petter Strandmark) 573#. Example Makefile for users of Ceres. 574#. IterationSummary now informs the user when the step is a 575 non-monotonic step. 576#. Fewer memory allocations when using ``DenseQRSolver``. 577#. GradientChecker for testing CostFunctions (William Rucklidge) 578#. Add support for cost functions with 10 parameter blocks in 579 ``Problem``. (Fisher) 580#. Add support for 10 parameter blocks in ``AutoDiffCostFunction``. 581 582 583Bug Fixes 584--------- 585 586#. static cast to force Eigen::Index to long conversion 587#. Change LOG(ERROR) to LOG(WARNING) in ``schur_complement_solver.cc``. 588#. Remove verbose logging from ``DenseQRSolve``. 589#. Fix the Android NDK build. 590#. Better handling of empty and constant Problems. 591#. Remove an internal header that was leaking into the public API. 592#. Memory leak in ``trust_region_minimizer.cc`` 593#. Schur ordering was operating on the wrong object (Ricardo Martin) 594#. MSVC fixes (Petter Strandmark) 595#. Various fixes to ``nist.cc`` (Markus Moll) 596#. Fixed a jacobian scaling bug. 597#. Numerically robust computation of ``model_cost_change``. 598#. Signed comparison compiler warning fixes (Ricardo Martin) 599#. Various compiler warning fixes all over. 600#. Inclusion guard fixes (Petter Strandmark) 601#. Segfault in test code (Sergey Popov) 602#. Replaced ``EXPECT/ASSERT_DEATH`` with the more portable 603 ``EXPECT_DEATH_IF_SUPPORTED`` macros. 604#. Fixed the camera projection model in Ceres' implementation of 605 Snavely's camera model. (Ricardo Martin) 606 607 6081.3.0 609===== 610 611New Features 612------------ 613 614#. Android Port (Scott Ettinger also contributed to the port) 615#. Windows port. (Changchang Wu and Pierre Moulon also contributed to the port) 616#. New subspace Dogleg Solver. (Markus Moll) 617#. Trust region algorithm now supports the option of non-monotonic steps. 618#. New loss functions ``ArcTanLossFunction``, ``TolerantLossFunction`` 619 and ``ComposedLossFunction``. (James Roseborough). 620#. New ``DENSE_NORMAL_CHOLESKY`` linear solver, which uses Eigen's 621 LDLT factorization on the normal equations. 622#. Cached symbolic factorization when using ``CXSparse``. 623 (Petter Strandark) 624#. New example ``nist.cc`` and data from the NIST non-linear 625 regression test suite. (Thanks to Douglas Bates for suggesting this.) 626#. The traditional Dogleg solver now uses an elliptical trust 627 region (Markus Moll) 628#. Support for returning initial and final gradients & Jacobians. 629#. Gradient computation support in the evaluators, with an eye 630 towards developing first order/gradient based solvers. 631#. A better way to compute ``Solver::Summary::fixed_cost``. (Markus Moll) 632#. ``CMake`` support for building documentation, separate examples, 633 installing and uninstalling the library and Gerrit hooks (Arnaud 634 Gelas) 635#. ``SuiteSparse4`` support (Markus Moll) 636#. Support for building Ceres without ``TR1`` (This leads to 637 slightly slower ``DENSE_SCHUR`` and ``SPARSE_SCHUR`` solvers). 638#. ``BALProblem`` can now write a problem back to disk. 639#. ``bundle_adjuster`` now allows the user to normalize and perturb the 640 problem before solving. 641#. Solver progress logging to file. 642#. Added ``Program::ToString`` and ``ParameterBlock::ToString`` to 643 help with debugging. 644#. Ability to build Ceres as a shared library (MacOS and Linux only), 645 associated versioning and build release script changes. 646#. Portable floating point classification API. 647 648 649Bug Fixes 650--------- 651 652#. Fix how invalid step evaluations are handled. 653#. Change the slop handling around zero for model cost changes to use 654 relative tolerances rather than absolute tolerances. 655#. Fix an inadvertant integer to bool conversion. (Petter Strandmark) 656#. Do not link to ``libgomp`` when building on 657 windows. (Petter Strandmark) 658#. Include ``gflags.h`` in ``test_utils.cc``. (Petter 659 Strandmark) 660#. Use standard random number generation routines. (Petter Strandmark) 661#. ``TrustRegionMinimizer`` does not implicitly negate the 662 steps that it takes. (Markus Moll) 663#. Diagonal scaling allows for equal upper and lower bounds. (Markus Moll) 664#. TrustRegionStrategy does not misuse LinearSolver:Summary anymore. 665#. Fix Eigen3 Row/Column Major storage issue. (Lena Gieseke) 666#. QuaternionToAngleAxis now guarantees an angle in $[-\pi, \pi]$. (Guoxuan Zhang) 667#. Added a workaround for a compiler bug in the Android NDK to the 668 Schur eliminator. 669#. The sparse linear algebra library is only logged in 670 Summary::FullReport if it is used. 671#. Rename the macro ``CERES_DONT_HAVE_PROTOCOL_BUFFERS`` 672 to ``CERES_NO_PROTOCOL_BUFFERS`` for consistency. 673#. Fix how static structure detection for the Schur eliminator logs 674 its results. 675#. Correct example code in the documentation. (Petter Strandmark) 676#. Fix ``fpclassify.h`` to work with the Android NDK and STLport. 677#. Fix a memory leak in the ``levenber_marquardt_strategy_test.cc`` 678#. Fix an early return bug in the Dogleg solver. (Markus Moll) 679#. Zero initialize Jets. 680#. Moved ``internal/ceres/mock_log.h`` to ``internal/ceres/gmock/mock-log.h`` 681#. Unified file path handling in tests. 682#. ``data_fitting.cc`` includes ``gflags`` 683#. Renamed Ceres' Mutex class and associated macros to avoid 684 namespace conflicts. 685#. Close the BAL problem file after reading it (Markus Moll) 686#. Fix IsInfinite on Jets. 687#. Drop alignment requirements for Jets. 688#. Fixed Jet to integer comparison. (Keith Leung) 689#. Fix use of uninitialized arrays. (Sebastian Koch & Markus Moll) 690#. Conditionally compile gflag dependencies.(Casey Goodlett) 691#. Add ``data_fitting.cc`` to the examples ``CMake`` file. 692 693 6941.2.3 695===== 696 697Bug Fixes 698--------- 699 700#. ``suitesparse_test`` is enabled even when ``-DSUITESPARSE=OFF``. 701#. ``FixedArray`` internal struct did not respect ``Eigen`` 702 alignment requirements (Koichi Akabe & Stephan Kassemeyer). 703#. Fixed ``quadratic.cc`` documentation and code mismatch 704 (Nick Lewycky). 705 7061.2.2 707===== 708 709Bug Fixes 710--------- 711 712#. Fix constant parameter blocks, and other minor fixes (Markus Moll) 713#. Fix alignment issues when combining ``Jet`` and 714 ``FixedArray`` in automatic differeniation. 715#. Remove obsolete ``build_defs`` file. 716 7171.2.1 718===== 719 720New Features 721------------ 722 723#. Powell's Dogleg solver 724#. Documentation now has a brief overview of Trust Region methods and 725 how the Levenberg-Marquardt and Dogleg methods work. 726 727Bug Fixes 728--------- 729 730#. Destructor for ``TrustRegionStrategy`` was not virtual (Markus Moll) 731#. Invalid ``DCHECK`` in ``suitesparse.cc`` (Markus Moll) 732#. Iteration callbacks were not properly invoked (Luis Alberto Zarrabeiti) 733#. Logging level changes in ConjugateGradientsSolver 734#. VisibilityBasedPreconditioner setup does not account for skipped camera pairs. This was debugging code. 735#. Enable SSE support on MacOS 736#. ``system_test`` was taking too long and too much memory (Koichi Akabe) 737 7381.2.0 739===== 740 741New Features 742------------ 743 744#. ``CXSparse`` support. 745#. Block oriented fill reducing orderings. This reduces the 746 factorization time for sparse ``CHOLMOD`` significantly. 747#. New Trust region loop with support for multiple trust region step 748 strategies. Currently only Levenberg-Marquardt is supported, but 749 this refactoring opens the door for Dog-leg, Stiehaug and others. 750#. ``CMake`` file restructuring. Builds in ``Release`` mode by default, and now has platform specific tuning flags. 751#. Re-organized documentation. No new content, but better 752 organization. 753 754 755Bug Fixes 756--------- 757 758#. Fixed integer overflow bug in ``block_random_access_sparse_matrix.cc``. 759#. Renamed some macros to prevent name conflicts. 760#. Fixed incorrent input to ``StateUpdatingCallback``. 761#. Fixes to AutoDiff tests. 762#. Various internal cleanups. 763 764 7651.1.1 766===== 767 768Bug Fixes 769--------- 770 771#. Fix a bug in the handling of constant blocks. (Louis Simard) 772#. Add an optional lower bound to the Levenberg-Marquardt regularizer 773 to prevent oscillating between well and ill posed linear problems. 774#. Some internal refactoring and test fixes. 775 7761.1.0 777===== 778 779New Features 780------------ 781 782#. New iterative linear solver for general sparse problems - ``CGNR`` 783 and a block Jacobi preconditioner for it. 784#. Changed the semantics of how ``SuiteSparse`` dependencies are 785 checked and used. Now ``SuiteSparse`` is built by default, only if 786 all of its dependencies are present. 787#. Automatic differentiation now supports dynamic number of residuals. 788#. Support for writing the linear least squares problems to disk in 789 text format so that they can loaded into ``MATLAB``. 790#. Linear solver results are now checked for nan and infinities. 791#. Added ``.gitignore`` file. 792#. A better more robust build system. 793 794 795Bug Fixes 796--------- 797 798#. Fixed a strict weak ordering bug in the schur ordering. 799#. Grammar and typos in the documents and code comments. 800#. Fixed tests which depended on exact equality between floating point values. 801 8021.0.0 803===== 804 805Initial Release. Nathan Wiegand contributed to the Mac OSX port. 806