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