blob: 0bef4ad0b97a03b2297af0d55b70ebffe83a0d6c [file] [log] [blame]
Austin Schuh70cc9552019-01-21 19:46:48 -08001.. _chapter-version-history:
2
3===============
4Version History
5===============
6
71.14.0
8======
9
10New Features
11------------
12
13#. New ``EvaluationCallback`` API. (Keir Mierle)
14#. TBB based threading (Yury Prokazov & Mike Vitus)
15#. C++11 threads based threading (Mike Vitus)
16#. A ``ceres::Context`` object to cache and keep track of global
17 state. (Mike Vitus)
18#. TinySolver - A small dense solver meant for solving small problems
19 really fast. [EXPERIMENTAL] (Keir Mierle & Sameer Agarwal)
20#. Bazel Build. (Keir Mierle & Rodrigo Queiro)
21
22
23Backward Incompatible API Changes
24---------------------------------
25
26#. ``Solver::Options::num_linear_solver_threads`` is deprecated,
27 ``Solver::Options::num_threads`` controls all parallelism in Ceres
28 Solver now. Similarly,
29 ``Solver::Summary::num_linear_solver_threads_given`` and
30 ``Solver::Summary::num_linear_solver_threads_used`` are also
31 deprecated.
32
33
34Bug Fixes & Minor Changes
35-------------------------
36
37#. Remove armv7 from target architectures when building for iOS >= 11. (Alex Stewart)
38#. Corrects the documentation of Problem::AddResidualBlock. (Mike Vitus)
39#. Fixes the configuration check in port.h. (Mike Vitus)
40#. Add small_blas_gemm_benchmark. (Sameer Agarwal)
41#. Implement some C++11 math functions for Jet (Emil Ernerfeldt)
42#. Fix integer conversion warning in MSVC. (Alex Stewart)
43#. Improve NDK build error handling (Keir Mierle)
44#. Fix build: -Wreorder, test fail (Keir Mierle)
45#. An implementation of SubsetPreconditioner. (Sameer Agarwal)
46#. Split bundle adjustment tests into individual binaries (Keir Mierle)
47#. Require Eigen >= 3.3.4 on aarch64. (Alex Stewart)
48#. Fix TBB detection on Windows. (Alex Stewart)
49#. Improve ExecutionSummary (Sameer Agarwal)
50#. Remove as typo from callbacks.h (Sameer Agarwal)
51#. Removes two unimplemented class functions. (Mike Vitus)
52#. Update EigenTypes to deal with 1 column matrices (Sameer Agarwal)
53#. Add GradientProblemSolver::Options::update_state_every_iteration (Sameer Agarwal)
54#. Fixes the pose graph example documentation. (Mike Vitus)
55#. Fix Eigen >= 3.3 compilation if EIGEN_DONT_VECTORIZE set (Janick Martinez Esturo)
56#. Add an optional dependency on the Google Benchmark library. (Sameer Agarwal)
57#. Fix the documentation for CostFunction::Evaluate. (Sameer Agarwal)
58#. Fix a mathematical typo. (Sameer Agarwal)
59#. Add TBB information to Ceres version string. (Alex Stewart)
60#. Move discussion of dependency licensing to Sphinx docs. (Alex Stewart)
61#. Fix an erroneous namespace comment (Sameer Agarwal)
62#. Fix use of unnamed type as template argument warnings on Clang. (Alex Stewart)
63#. Add link for CLA in docs; minor fixes (Keir Mierle)
64#. Fix tiny_solver_test (Sameer Agarwal)
65#. Improve compatibility with ceres::Solver (Sameer Agarwal)
66#. Refactor nist.cc to be compatible with TinySolver (Sameer Agarwal)
67#. Report timings with microsecond resolution (Thomas Gamper)
68#. Add missing Eigen traits to Jets (Sameer Agarwal)
69#. Use high-resolution timer on Windows (Thomas Gamper)
70#. Add a comment about default constructed reference counts= (Keir Mierle)
71#. Delete cost and loss functions when not in use. (Sameer Agarwal)
72#. Fix assert_ndk_version for >= r11. (Alex Stewart)
73#. Add docs explaining how to build Ceres with OpenMP on OS X. (Alex Stewart)
74#. Update LAPACK option to refer to direct use by Ceres only. (Alex Stewart)
75#. Hide optional SuiteSparse vars in CMake GUI by default. (Alex Stewart)
76#. Always hide TBB_LIBRARY in CMake GUI by default. (Alex Stewart)
77#. Fix typo in definition of f3 in powell example (x4 -> x3). (Alex Stewart)
78#. Fix suppression of C++11 propagation warning. (Alex Stewart)
79#. Add new Schur specialization for 2, 4, 6. (Chris Sweeney)
80#. Use const keyword for 'int thread_id' variables. (pmoulon)
81
82
831.13.0
84======
85
86New Features
87------------
88#. ``LineSearchMinimizer`` and ``GradientProblemSolver`` are up to 2x
89 faster due to fewer function evaluations. (Sameer Agarwal)
90#. ``SPARSE_NORMAL_CHOLESKY`` is significantly faster because Ceres
91 now computes the normal equations exploiting the static block
92 sparsity structure. (Cheng Wang & Sameer Agarwal)
93#. Add compound with scalar operators for Jets. (Alex Stewart)
94#. Enable support for AVX instructions for Jets. (Alex Stewart)
95
96Backward Incompatible API Changes
97---------------------------------
98The enum ``CovarianceAlgorithmType`` which controls the linear algebra
99algorithm used to compute the covariance used to combine the choice of
100the algorithm and the choice of the sparse linear algebra library into
101the enum name. So we had ``SUITE_SPARSE_QR`` and
102``EIGEN_SPARSE_QR``. ``Covariance::Options`` now has a separate member
103allowing the user to choose the sparse linear algebra library, just
104like the solver and ``CovarianceAlgorithmType`` now takes values
105``DENSE_SVD`` and ``SPARSE_QR``. This is a forward looking change that
106will allow us to develop more flexible covariance estimation
107algorithms with multiple linear algebra backends.
108
109Bug Fixes & Minor Changes
110-------------------------
111#. Fix ``InvertPSDMatrix`` as it was triggering an Eigen assert in
112 Debug mode. (Philipp Hubner)
113#. Fix cmake error from CeresConfig.cmake when Ceres not found (Taylor
114 Braun-Jones)
115#. Completely refactored ``SparseNormalCholeskySolver``. (Sameer
116 Agarwal)
117#. Fixed time reporting in ``Summary::FullReport`` when
118 ``LineSearchMinimizer`` is used. (Sameer Agarwal)
119#. Remove unused file: collections_port.cc. (Sameer Agarwal)
120#. ``SPARSE_SCHUR`` + ``CX_SPARSE`` = Faster (Sameer Agarwal)
121#. Refactored a number of linear solver tests to be more thorough and
122 informative. (Sameer Agarwal)
123#. Pass user-specified search hints as HINTS not PATHS. (Alex Stewart)
124#. Prefer Eigen installs over exported build directories. (Alex
125 Stewart)
126#. Add OpenMP flags when compiling for C if enabled. (Alex Stewart)
127#. Add a missing ``CERES_EXPORT`` to GradientChecker (Sameer Agarwal)
128#. Use target_compile_features() to specify C++11 requirement if
129 available. (Alex Stewart)
130#. Update docs: .netrc --> .gitcookies (Keir Mierle)
131#. Fix implicit precision loss warning on 64-bit archs (Ricardo
132 Sanchez-Saez)
133#. Optionally use exported Eigen CMake configuration if
134 available. (Alex Stewart)
135#. Use ``Ceres_[SOURCE/BINARY]_DIR`` not ``CMAKE_XXX_DIR`` to support
136 nesting. (Alex Stewart)
137#. Update ``Problem::EvaluateOptions`` documentation. (Sameer Agarwal)
138#. Add public headers to CMake target for IDEs. (Devin Lane)
139#. Add an article on interfacing with automatic
140 differentiation. (Sameer Agarwal)
141#. Add default Fedora/Debian locations for CXSparse to search
142 paths. (Alex Stewart)
143#. Add a test for ``LineSearchMinimizer`` (Sameer Agarwal)
144#. Flatten the table of contents. (Sameer Agarwal)
145#. Fix when ``LineSearchMinimizer`` adds the ``IterationSummary``` to
146 ``Solver::Summary`` (Sameer Agarwal)
147#. Fix search path for miniglog headers when Ceres is exported. (Alex
148 Stewart)
149#. Fix ambiguous reference to ``WARNING`` when using miniglog. (Alex
150 Stewart)
151#. Fix Jet/Eigen compatibility for Eigen > 3.3 (Julien Pilet)
152#. Add max severity option when ``MINIGLOG`` is enabled (Taylor
153 Braun-Jones)
154#. Improvements to Schur template specializations (Sameer Agarwal)
155#. Added an article on derivatives (Sameer Agarwal)
156#. Require Eigen >= 3.3 to define ScalarBinaryOpTraits in Jet. (Alex
157 Stewart)
158#. A hacky fix for the Eigen::FullPivLU changes. (Sameer Agarwal)
159#. Specify ``ScalarBinaryOpTraits`` for Jet types. (Chris Sweeney)
160#. Remove spurious conversion from doubles to Jets. (Sameer Agarwal)
161#. Fix an error in the tutorial code for ``NumericDiffCostFunction``
162 (Sameer Agarwal)
163#. ``CERES_EXPORT`` fix to compile Ceres as DLL (Je Hyeong Hong)
164#. Fix detection of deprecated Bessel function names on MSVC. (Alex
165 Stewart)
166#. Ensure that partial evaluation of residuals triggers an error
167 (Sameer Agarwal)
168#. Fix detection of CMake-built glog on Windows. (Alex Stewart)
169#. Add additional search paths for glog & Eigen on Windows. (Alex
170 Stewart)
171#. Various minor grammar and bug fixes to the documentation (Sameer
172 Agarwal, Alex Stewart, William Rucklidge)
173
174
1751.12.0
176======
177
178New Features
179------------
180#. Aligned ``Jet`` matrices for improved automatic differentiation
181 performance. (Andrew Hunter)
182#. Auto-differentiable implementations of Bessel functions, ``floor``,
183 and ``ceil`` (Alessandro Gentilini & Michael Vitus)
184#. New 2D and 3D SLAM examples. (Michael Vitus)
185#. Added ``EigenQuaternionParameterization``. (Michael Vitus)
186#. Added ``Problem::IsParameterBlockConstant`` (Thomas Schneider)
187#. A complete refactoring of ``TrustRegionMinimizer``. (Sameer Agarwal)
188#. Gradient checking cleanup and local parameterization bugfix (David
189 Gossow)
190
191
192Backward Incompatible API Changes
193---------------------------------
194#. ``Solver::Options::numeric_derivative_relative_step_size`` has been
195 renamed to
196 ``Solver::Options::gradient_check_numeric_derivative_relative_step_size``. (Sameer
197 Agarwal)
198
199Bug Fixes & Minor Changes
200-------------------------
201#. Clear XXX_FOUND in Find<XXX>.cmake prior to searching. (Alex
202 Stewart)
203#. Fix versioning in the documentation (Sameer Agarwal)
204#. Fix missing gflags imported target definition in
205 CeresConfig.cmake. (Alex Stewart)
206#. Make gflags a public dependency of Ceres if it and glog are
207 found. (Alex Stewart)
208#. Add support for glog exported CMake target. (Alex Stewart)
209#. Use ``google::GLOG_WARNING`` instead of ``WARNING`` in tests to
210 support MSVC. (Alex Stewart)
211#. Update gtest and gmock to
212 ``a2b8a8e07628e5fd60644b6dd99c1b5e7d7f1f47`` (Sameer Agarwal)
213#. Add MSVC-specific ``#define`` to expose math constants in
214 ``<cmath>``. (Alex Stewart)
215#. Fix typo. indepdendent -> independent (Hung Lun)
216#. Fix potential invalid reset of CMAKE_FIND_LIBRARY_PREFIXES on MSVC
217 (Alex Stewart)
218#. Fix use of alignas(0) which is not ignored on GCC (Alex Stewart)
219#. Use default alignment if alignof(std::max_align_t) < 16 with C++11
220 (Alex Stewart)
221#. Introduce a common base class for DynamicAutoDiffCostFunction and
222 DynamicNumericDiffCostFunction. (Sameer Agarwal)
223#. Fix an exact equality test causing breakage in
224 gradient_checker_test. (Sameer Agarwal)
225#. Add GradientProblemSolver::Options::parameter_tolerance. (Sameer
226 Agarwal)
227#. Add missing T() wrappers for constants. (Rob Carroll)
228#. Remove two checks from rotation.h (Sameer Agarwal)
229#. Relax the tolerance in QuaternionParameterizationTestHelper. (Je
230 Hyeong Hong)
231#. Occured -> Occurred. (Sameer Agarwal)
232#. Fix a test error in autodiff_test.cc. (Je Hyeong Hong)
233#. Fix documentation source for templated function in ``rotation.h``.
234#. Add ``package.xml`` to enable Catkin builds. (Damon Kohler)
235#. Relaxing Jacobian matching in Gradient Checker test. (David Gossow)
236#. Allow SubsetParameterization to hold all parameters constant
237 (Sameer Agarwal)
238#. Fix an Intel compiler error in covariance_impl.cc (Je Hyeong Hong)
239#. Removing duplicate include directive. (David Gossow)
240#. Remove two DCHECKs from CubicHermiteSpline. (Sameer Agarwal)
241#. Fix some compiler warnings. (Richard Trieu)
242#. Update ExpectArraysClose to use ExpectClose instead of
243 EXPECT_NEAR. (Phillip Hubner)
244#. FindWithDefault returns by value rather than reference. (@aradval)
245#. Fix compiler errors on some systems. (David Gossow)
246#. Note that Problem::Evaluate cannot be called from an
247 IterationCallback. (Sameer Agarwal)
248#. Use ProductParameterization in bundle_adjuster.cc (Sameer Agarwal)
249#. Enable support for OpenMP in Clang if detected. (Alex Stewart)
250#. Remove duplicate entry for the NIST example in the docs. (Michael
251 Vitus)
252#. Add additional logging for analyzing orderings (Sameer Agarwal)
253#. Add readme for the sampled_function example. (Michael Vitus)
254#. Use _j[0,1,n]() Bessel functions on MSVC to avoid deprecation
255 errors. (Alex Stewart & Kichang Kim)
256#. Fix: Copy minimizer option ``is_silent`` to
257 ``LineSearchDirection::Options`` (Nicolai Wojke)
258#. Fix typos in ``users.rst`` (Sameer Agarwal)
259#. Make some Jet comparisons exact. (Sameer Agarwal)
260#. Add colmap to users.rst (Sameer Agarwal)
261#. Fix step norm evaluation in LineSearchMinimizer (Sameer Agarwal)
262#. Remove use of -Werror when compiling Ceres. (Alex Stewart)
263#. Report Ceres compile options as components in find_package(). (Alex
264 Stewart)
265#. Fix a spelling error in nnls_modeling.rst (Timer)
266#. Only use collapse() directive with OpenMP 3.0 or higher. (Keir
267 Mierle)
268#. Fix install path for CeresConfig.cmake to be architecture-aware.
269#. Fix double conversion to degrees in rotation_test (Keir Mierle)
270#. Make Jet string output more readable (Keir Mierle)
271#. Fix rotation_test IsClose() and related tests (Keir Mierle)
272#. Loosen an exact equality in local_parameterization_test (Sameer
273 Agarwal)
274#. make_docs: Pass the file encoding to open() (Niels Ole Salscheider)
275#. Fix error message returned when using SUITE_SPARSE_QR in covariance
276 estimation on a ceres built without SuiteSparse support. (Simon
277 Rutishauser)
278#. Fix CXX11 option to be available on MinGW & CygWin, but not
279 MSVC. (Alex Stewart)
280#. Fix missing early return() in xxx_not_found() dependency
281 macros. (Alex Stewart)
282#. Initialize ``inner_iterations_were_useful_`` correctly. (Sameer
283 Agarwal)
284#. Add an implementation for GradientProblemSolver::Options::IsValid
285 (Sameer Agarwal)
286#. Fix use of va_copy() if compiling with explicit C++ version <
287 C++11. (Alex Stewart)
288#. Install CMake files to lib/cmake/Ceres (Niels Ole Salscheider)
289#. Allow users to override the documentation install directory. (Niels
290 Ole Salscheider)
291#. Add covariance matrix for a vector of parameters (Wannes Van Loock)
292#. Saner tolerances & stricter LRE test. (Sameer Agarwal)
293#. Fix a malformed sentence in the tutorial. (Sameer Agarwal)
294#. Add logging for sparse Cholesky factorization using Eigen. (Sameer
295 Agarwal)
296#. Use std::adjacent_find instead of std::unique. (Sameer Agarwal)
297#. Improve logging in CompressedRowJacobianWriter on crash. (Sameer
298 Agarwal)
299#. Fix free parameter block handling in covariance computation (Wannes
300 Van Loock)
301#. Report the number of line search steps in FullReport. (Sameer
302 Agarwal)
303#. Make CMake read Ceres version directly from
304 include/ceres/version.h. (Alex Stewart)
305#. Lots of code style/lint changes. (William Rucklidge)
306#. Fix covariance computation for constant blocks (Wannes Van Loock)
307#. Add IOS_DEPLOYMENT_TARGET variable to iOS.cmake (Eduard Feicho)
308#. Make miniglog threadsafe on non-windows system by using
309 localtime_r() instead of localtime() for time formatting (Simon
310 Rutishauser)
311
3121.11.0
313======
314
315New Features
316------------
317#. Adaptive numeric differentiation using Ridders' method. (Tal
318 Ben-Nun)
319#. Add ``CubicInterpolator`` and ``BiCubicInterpolator`` to allow
320 smooth interpolation of sampled functions and integration with
321 automatic differentiation.
322#. Add method to return covariance in tangent space. (Michael Vitus &
323 Steve Hsu)
324#. Add Homogeneous vector parameterization. (Michael Vitus)
325#. Add a ``ProductParameterization``, a local parameterization that
326 can be constructed as a cartesian product of other local
327 parameterization.
328#. Add DynamicCostFunctionToFunctor. (David Gossow)
329#. Optionally export Ceres build directory into local CMake package
330 registry.
331#. Faster ``SPARSE_NORMAL_CHOLESKY`` in the presence of dynamic
332 sparsity.
333
334Bug Fixes & Minor Changes
335-------------------------
336#. Remove use of link-time optimisation (LTO) for all compilers due to
337 portability issues with gtest / type_info::operator== & Eigen with
338 Clang on OS X vs GCC 4.9+ on Linux requiring contradictory 'fixes'.
339#. Use link-time optimisation (LTO) only when compiling Ceres itself,
340 not tests or examples, to bypass gtest / type_info::operator==
341 issue.
342#. Use old minimum iOS version flags on Xcode < 7.0.
343#. Add gtest-specific flags when building/using as a shared library.
344#. Clean up iOS.cmake to use xcrun/xcodebuild & libtool.
345#. Import the latest version of ``googletest``.
346#. Refactored ``system_test`` into ``bundle_adjustment_test`` and
347 ``system_test``, where each test case is its own test.
348#. Fix invalid memory access bug in
349 ``CompressedRowSparseMatrix::AppendRows`` when it was called with a
350 matrix of size zero.
351#. Build position independent code when compiling Ceres statically
352 (Alexander Alekhin).
353#. Fix a bug in DetectStructure (Johannes Schonberger).
354#. Reduce memory footprint of SubsetParameterization (Johannes
355 Schonberger).
356#. Fix for reorder program unit test when built without suitesparse
357 (Sergey Sharybin).
358#. Fix a bug in the Schur eliminator (Werner Trobin).
359#. Fix a bug in the reordering code (Bernhard Zeisl).
360#. Add missing CERES_EXPORT to ComposedLoss (Simon Rutishauser).
361#. Add the option to use numeric differentiation to ``nist`` and
362 ``more_garbow_hillstrom``.
363#. Fix EIGENSPARSE option help s/t it displays in CMake ncurses GUI.
364#. Fix SparseNormalCholeskySolver with dynamic sparsity (Richie
365 Stebbing).
366#. Remove legacy dependency detection macros.
367#. Fix failed if() condition expansion if gflags is not found.
368#. Update all CMake to lowercase function name style.
369#. Update minimum iOS version to 7.0 for shared_ptr/unordered_map.
370#. Fix bug in gflags' <= 2.1.2 exported CMake configuration.
371#. Remove the spec file needed for generating RPMs.
372#. Fix a typo in small_blas.h (Werber Trobin).
373#. Cleanup FindGflags & use installed gflags CMake config if present.
374#. Add default glog install location on Windows to search paths
375 (bvanevery).
376#. Add default Eigen install location on Windows to search paths
377 (bvanevery).
378#. Fix explanation of config.h generation in bare config.h.
379#. Fix unused parameter compiler warnings in numeric_diff.h.
380#. Increase tolerance for a test in polynomial_test (Taylor Braun
381 Jones).
382#. Fix addition of Gerrit commit hook when Ceres is a git submodule
383 (Chris Cooper).
384#. Fix missing EIGEN_VERSION expansion typo.
385#. Fix links to SuiteSparse & CXSparse (Henrique Mendonça).
386#. Ensure Eigen is at least 3.1.0 for Eigen/SparseCore.
387#. Add option to use C++11 (not TR1) shared_ptr & unordered_map
388 (Norman Goldstein).
389#. Fix an incorrect usage message in bundle_adjuster.cc
390#. Gracefully disable docs if Sphinx is not found.
391#. Explicitly use (new) default OS X rpath policy if present.
392#. Add support of EIGEN_SPARSE type in
393 IsSparseLinearAlgebraLibraryTypeAvailable function (Pierre Moulon).
394#. Allow the LossFunction contained in a LossFunctionWrapper to be
395 NULL. This is consistent with how NULL LossFunctions are treated
396 everywhere else. (Simon Rutishauser).
397#. Improve numeric differentation near zero.
398#. Refactored DynamicNumericDiffCostFunction to use NumericDiff (Tal
399 Ben-Nun).
400#. Remove use of :caption tag in Sphinx.
401#. Add a small test to make sure GradientProblemSolver works correctly
402 (Petter Strandmark).
403#. Add simple unit tests for GradientProblem (Petter Strandmark).
404#. Make the robust curve fitting example robust.
405#. Homogenize convergence operators in docs and code (Johannes
406 Schonberger).
407#. Add parameter_tolerance convergence to line search minimizer
408 (Johannes Schonberger).
409#. Fix bug where pow(JetA,JetB) returned wrong result for JetA==0
410 (Russell Smith).
411#. Remove duplicate step norm computation (Johannes Schonberger).
412#. Enhance usability when encountering Eigen version mismatches
413 (Andrew Hundt).
414#. Add PLY file logger before and after BA in order to ease visual
415 comparison (Pierre Moulon).
416#. Fix CMake config file docs to include 2.8.x & 3.x styles.
417#. Python3 fixes (Markus Moll).
418#. Remove confusing code from DenseJacobianWriter (Michael Vitus).
419#. Add documentation on CMake package installation process.
420#. Revert a call to SolveUpperTriangularUsingCholesky.
421#. Make CERES_EIGEN_VERSION macro independent of CMake.
422#. Add versions of dependencies used to FullReport().
423#. Ensure local config.h is used if Ceres is already installed.
424#. Small messaging and comment updates in CMake
425#. Handle possible presence of library prefixes in MSVC (Sylvain
426 Duchêne).
427#. Use -O2 not -O3 on MinGW to workaround issue with Eigen
428 (s1m3mu3@gmail.com).
429#. Increase tolerance in small_blas test for Cygwin
430 (s1m3mu3@gmail.com).
431#. Fix iOS cmake file for cmake 3.0 (Jack Feng)
432#. Fix missing gflags shlwapi dependency on MinGW (s1m3mu3@gmail.com).
433#. Add thread dependency & fix namespace detection on Windows for
434 gflags (arrigo.benedetti@gmail.com).
435#. Rename macros in the public API to have a ``CERES_`` prefix.
436#. Fix ``OrderedGroup::Reverse()`` when it is empty (Chris Sweeney).
437#. Update the code to point to ceres-solver.org.
438#. Update documentation to point to the GitHub issue tracker.
439#. Disable ``LAPACK`` for iOS builds. (Greg Coombe)
440#. Force use of single-thread in ``Problem::Evaluate()`` without
441 OpenMP.
442#. Less strict check for multithreading. (Chris Sweeney)
443#. Update tolerances in small_blas_test.cc (Philipp Hubner)
444#. Documentation corrections (Steve Hsu)
445#. Fixed ``sampled_function.cc`` (Pablo Speciale)
446#. Fix example code in the documentation. (Rodney Hoskinson)
447#. Improve the error handling in Conjugate Gradients.
448#. Improve preconditioner documentation.
449#. Remove dead code from fpclassify.h.
450#. Make Android.mk threads sensitive.
451#. Changed the ``CURRENT_CONFIG_INSTALL_DIR`` to be a variable local
452 to Ceres. (Chris Sweeney)
453#. Fix typo in the comments in ``Jet.h``. (Julius Ziegler)
454#. Add the ASL at ETH Zurich, Theia & OpenPTrack to the list of users.
455#. Fixed a typo in the documentation. (Richard Stebbing)
456#. Fixed a boundary handling bug in the BiCubic interpolation
457 code. (Bernhard Zeisl)
458#. Fixed a ``MSVC`` compilation bug in the cubic interpolation code
459 (Johannes Schönberger)
460#. Add covariance related files to the Android build.
461#. Update Ubuntu 14.04 installation instructions. (Filippo Basso)
462#. Improved logging for linear solver failures.
463#. Improved crash messages in ``Problem``.
464#. Hide Homebrew related variables in CMake GUI.
465#. Add SuiteSparse link dependency for
466 compressed_col_sparse_matrix_utils_test.
467#. Autodetect Homebrew install prefix on OSX.
468#. Lint changes from William Rucklidge and Jim Roseborough.
469#. Remove ``using namespace std:`` from ``port.h``
470#. Add note about glog not currently compiling against gflags 2.1.
471#. Add explicit no sparse linear algebra library available option.
472#. Improve some wording in the FAQ. (Vasily Vylkov)
473#. Delete Incomplete LQ Factorization.
474#. Add a pointer to MacPorts. (Markus Moll)
475
476
4771.10.0
478======
479
480New Features
481------------
482#. Ceres Solver can now be used to solve general unconstrained
483 optimization problems. See the documentation for
484 ``GradientProblem`` and ``GradientProblemSolver``.
485#. ``Eigen`` can now be as a sparse linear algebra backend. This can
486 be done by setting
487 ``Solver::Options::sparse_linear_algebra_library_type`` to
488 ``EIGEN_SPARSE``. Performance should be comparable to
489 ``CX_SPARSE``.
490
491 .. NOTE::
492
493 Because ``Eigen`` is a header only library, and some of the code
494 related to sparse Cholesky factorization is LGPL, building Ceres
495 with support for Eigen's sparse linear algebra is disabled by
496 default and should be enabled explicitly.
497
498 .. NOTE::
499
500 For good performance, use Eigen version 3.2.2 or later.
501
502#. Added ``EIGEN_SPARSE_QR`` algorithm for covariance estimation using
503 ``Eigen``'s sparse QR factorization. (Michael Vitus)
504#. Faster inner iterations when using multiple threads.
505#. Faster ``ITERATIVE_SCHUR`` + ``SCHUR_JACOBI`` for small to medium
506 sized problems (see documentation for
507 ``Solver::Options::use_explicit_schur_complement``).
508#. Faster automatic Schur ordering.
509#. Reduced memory usage when solving problems with dynamic sparsity.
510#. ``CostFunctionToFunctor`` now supports dynamic number of residuals.
511#. A complete re-write of the problem preprocessing phase.
512#. ``Solver::Summary::FullReport`` now reports the build configuration
513 for Ceres.
514#. When building on Android, the ``NDK`` version detection logic has
515 been improved.
516#. The ``CERES_VERSION`` macro has been improved and replaced with the
517 ``CERES_VERSION_STRING`` macro.
518#. Added ``Solver::Options::IsValid`` which allows users to validate
519 their solver configuration before calling ``Solve``.
520#. Added ``Problem::GetCostFunctionForResidualBlock`` and
521 ``Problem::GetLossFunctionForResidualBlock``.
522#. Added Tukey's loss function. (Michael Vitus)
523#. Added RotationMatrixToQuaternion
524#. Compute & report timing information for line searches.
525#. Autodetect gflags namespace.
526#. Expanded ``more_garbow_hillstrom.cc``.
527#. Added a pointer to Tal Ben-Nun's MSVC wrapper to the docs.
528#. Added the ``<2,3,6>`` Schur template specialization. (Alessandro
529 Dal Grande)
530
531Backward Incompatible API Changes
532---------------------------------
533#. ``NumericDiffFunctor`` has been removed. It's API was broken, and
534 the implementation was an unnecessary layer of abstraction over
535 ``CostFunctionToFunctor``.
536#. ``POLAK_RIBIRERE`` conjugate gradients direction type has been
537 renamed to ``POLAK_RIBIERE``.
538#. ``Solver::Options::solver_log`` has been removed. If needed this
539 iteration callback can easily be implemented in user code.
540#. The ``SPARSE_CHOLESKY`` algorithm for covariance estimation has
541 been removed. It is not rank revealing and numerically poorly
542 behaved. Sparse QR factorization is a much better way to do this.
543#. The ``SPARSE_QR`` algorithm for covariance estimation has been
544 renamed to ``SUITE_SPARSE_QR`` to be consistent with
545 ``EIGEN_SPARSE_QR``.
546#. ``Solver::Summary::preconditioner_type`` has been replaced with
547 ``Solver::Summary::preconditioner_type_given`` and
548 ``Solver::Summary::preconditioner_type_used`` to be more consistent
549 with how information about the linear solver is communicated.
550#. ``CERES_VERSION`` and ``CERES_ABI_VERSION`` macros were not
551 terribly useful. They have been replaced with
552 ``CERES_VERSION_MAJOR``, ``CERES_VERSION_MINOR`` ,
553 ``CERES_VERSION_REVISION`` and ``CERES_VERSION_ABI`` macros. In
554 particular the functionality of ``CERES_VERSION`` is provided by
555 ``CERES_VERSION_STRING`` macro.
556
557Bug Fixes
558---------
559#. Do not try the gradient step if TR step line search fails.
560#. Fix missing include in libmv_bundle_adjuster on OSX.
561#. Conditionally log evaluation failure warnings.
562#. Runtime uses four digits after the decimal in Summary:FullReport.
563#. Better options checking for TrustRegionMinimizer.
564#. Fix RotationMatrixToAngleAxis when the angle of rotation is near
565 PI. (Tobias Strauss)
566#. Sometimes gradient norm based convergence would miss a step with a
567 substantial solution quality improvement. (Rodney Hoskinson)
568#. Ignore warnings from within Eigen/SparseQR (3.2.2).
569#. Fix empty Cache HELPSTRING parsing error on OS X 10.10 Yosemite.
570#. Fix a formatting error TrustRegionMinimizer logging.
571#. Add an explicit include for local_parameterization.h (cooordz)
572#. Fix a number of typos in the documentation (Martin Baeuml)
573#. Made the logging in TrustRegionMinimizer consistent with
574 LineSearchMinimizer.
575#. Fix some obsolete documentation in CostFunction::Evaluate.
576#. Fix CG solver options for ITERATIVE_SCHUR, which did not copy
577 min_num_iterations (Johannes Schönberger)
578#. Remove obsolete include of numeric_diff_functor.h. (Martin Baeuml)
579#. Fix max. linear solver iterations in ConjugateGradientsSolver
580 (Johannes Schönberger)
581#. Expand check for lack of a sparse linear algebra library. (Michael
582 Samples and Domink Reitzle)
583#. Fix Eigen Row/ColMajor bug in NumericDiffCostFunction. (Dominik
584 Reitzle)
585#. Fix crash in Covariance if # threads > 1 requested without OpenMP.
586#. Fixed Malformed regex. (Björn Piltz)
587#. Fixed MSVC error C2124: divide or mod by zero. (Björn Piltz)
588#. Add missing #include of <limits> for loss functions.
589#. Make canned loss functions more robust.
590#. Fix type of suppressed compiler warning for Eigen 3.2.0.
591#. Suppress unused variable warning from Eigen 3.2.0.
592#. Add "make install" to the install instructions.
593#. Correct formula in documentation of
594 Solver::Options::function_tolerance. (Alessandro Gentilini)
595#. Add release flags to iOS toolchain.
596#. Fix a broken hyperlink in the documentation. (Henrique Mendonca)
597#. Add fixes for multiple definitions of ERROR on Windows to docs.
598#. Compile miniglog into Ceres if enabled on all platforms.
599#. Add two missing files to Android.mk (Greg Coombe)
600#. Fix Cmake error when using miniglog. (Greg Coombe)
601#. Don't build miniglog unconditionally as a static library (Björn
602 Piltz)
603#. Added a missing include. (Björn Piltz)
604#. Conditionally disable SparseNormalCholesky.
605#. Fix a memory leak in program_test.cc.
606
607
6081.9.0
609=====
610
611New Features
612------------
613#. Bounds constraints: Support for upper and/or lower bounds on
614 parameters when using the trust region minimizer.
615#. Dynamic Sparsity: Problems in which the sparsity structure of the
616 Jacobian changes over the course of the optimization can now be
617 solved much more efficiently. (Richard Stebbing)
618#. Improved support for Microsoft Visual C++ including the ability to
619 build and ship DLLs. (Björn Piltz, Alex Stewart and Sergey
620 Sharybin)
621#. Support for building on iOS 6.0 or higher (Jack Feng).
622#. Autogeneration of config.h that captures all the defines used to
623 build and use Ceres Solver.
624#. Simpler and more informative solver termination type
625 reporting. (See below for more details)
626#. New `website <http://www.ceres-solver.org>`_ based entirely on
627 Sphinx.
628#. ``AutoDiffLocalParameterization`` allows the use of automatic
629 differentiation for defining ``LocalParameterization`` objects
630 (Alex Stewart)
631#. LBFGS is faster due to fewer memory copies.
632#. Parameter blocks are not restricted to be less than 32k in size,
633 they can be up to 2G in size.
634#. Faster ``SPARSE_NORMAL_CHOLESKY`` solver when using ``CX_SPARSE``
635 as the sparse linear algebra library.
636#. Added ``Problem::IsParameterBlockPresent`` and
637 ``Problem::GetParameterization``.
638#. Added the (2,4,9) and (2,4,8) template specializations.
639#. An example demonstrating the use of
640 DynamicAutoDiffCostFunction. (Joydeep Biswas)
641#. Homography estimation example from Blender demonstrating the use of
642 a custom ``IterationCallback``. (Sergey Sharybin)
643#. Support user passing a custom CMAKE_MODULE_PATH (for BLAS /
644 LAPACK).
645
646Backward Incompatible API Changes
647---------------------------------
648#. ``Solver::Options::linear_solver_ordering`` used to be a naked
649 pointer that Ceres took ownership of. This is error prone behaviour
650 which leads to problems when copying the ``Solver::Options`` struct
651 around. This has been replaced with a ``shared_ptr`` to handle
652 ownership correctly across copies.
653
654#. The enum used for reporting the termination/convergence status of
655 the solver has been renamed from ``SolverTerminationType`` to
656 ``TerminationType``.
657
658 The enum values have also changed. ``FUNCTION_TOLERANCE``,
659 ``GRADIENT_TOLERANCE`` and ``PARAMETER_TOLERANCE`` have all been
660 replaced by ``CONVERGENCE``.
661
662 ``NUMERICAL_FAILURE`` has been replaced by ``FAILURE``.
663
664 ``USER_ABORT`` has been renamed to ``USER_FAILURE``.
665
666 Further ``Solver::Summary::error`` has been renamed to
667 ``Solver::Summary::message``. It contains a more detailed
668 explanation for why the solver terminated.
669
670#. ``Solver::Options::gradient_tolerance`` used to be a relative
671 gradient tolerance. i.e., The solver converged when
672
673 .. math:: \|g(x)\|_\infty < \text{gradient_tolerance} *
674 \|g(x_0)\|_\infty
675
676 where :math:`g(x)` is the gradient of the objective function at
677 :math:`x` and :math:`x_0` is the parmeter vector at the start of
678 the optimization.
679
680 This has changed to an absolute tolerance, i.e. the solver
681 converges when
682
683 .. math:: \|g(x)\|_\infty < \text{gradient_tolerance}
684
685#. Ceres cannot be built without the line search minimizer
686 anymore. Thus the preprocessor define
687 ``CERES_NO_LINE_SEARCH_MINIMIZER`` has been removed.
688
689Bug Fixes
690---------
691#. Disabled warning C4251. (Björn Piltz)
692#. Do not propagate 3d party libs through
693 `IMPORTED_LINK_INTERFACE_LIBRARIES_[DEBUG/RELEASE]` mechanism when
694 building shared libraries. (Björn Piltz)
695#. Fixed errant verbose levels (Björn Piltz)
696#. Variety of code cleanups, optimizations and bug fixes to the line
697 search minimizer code (Alex Stewart)
698#. Fixed ``BlockSparseMatrix::Transpose`` when the matrix has row and
699 column blocks. (Richard Bowen)
700#. Better error checking when ``Problem::RemoveResidualBlock`` is
701 called. (Alex Stewart)
702#. Fixed a memory leak in ``SchurComplementSolver``.
703#. Added ``epsilon()`` method to ``NumTraits<ceres::Jet<T, N>
704 >``. (Filippo Basso)
705#. Fixed a bug in `CompressedRowSparseMatrix::AppendRows`` and
706 ``DeleteRows``.q
707#. Handle empty problems consistently.
708#. Restore the state of the ``Problem`` after a call to
709 ``Problem::Evaluate``. (Stefan Leutenegger)
710#. Better error checking and reporting for linear solvers.
711#. Use explicit formula to solve quadratic polynomials instead of the
712 eigenvalue solver.
713#. Fix constant parameter handling in inner iterations (Mikael
714 Persson).
715#. SuiteSparse errors do not cause a fatal crash anymore.
716#. Fix ``corrector_test.cc``.
717#. Relax the requirements on loss function derivatives.
718#. Minor bugfix to logging.h (Scott Ettinger)
719#. Updated ``gmock`` and ``gtest`` to the latest upstream version.
720#. Fix build breakage on old versions of SuiteSparse.
721#. Fixed build issues related to Clang / LLVM 3.4 (Johannes
722 Schönberger)
723#. METIS_FOUND is never set. Changed the commit to fit the setting of
724 the other #._FOUND definitions. (Andreas Franek)
725#. Variety of bug fixes and cleanups to the ``CMake`` build system
726 (Alex Stewart)
727#. Removed fictitious shared library target from the NDK build.
728#. Solver::Options now uses ``shared_ptr`` to handle ownership of
729 ``Solver::Options::linear_solver_ordering`` and
730 ``Solver::Options::inner_iteration_ordering``. As a consequence the
731 ``NDK`` build now depends on ``libc++`` from the ``LLVM`` project.
732#. Variety of lint cleanups (William Rucklidge & Jim Roseborough)
733#. Various internal cleanups including dead code removal.
734
735
7361.8.0
737=====
738
739New Features
740------------
741#. Significant improved ``CMake`` files with better robustness,
742 dependency checking and GUI support. (Alex Stewart)
743#. Added ``DynamicNumericDiffCostFunction`` for numerically
744 differentiated cost functions whose sizing is determined at run
745 time.
746#. ``NumericDiffCostFunction`` now supports a dynamic number of
747 residuals just like ``AutoDiffCostFunction``.
748#. ``Problem`` exposes more of its structure in its API.
749#. Faster automatic differentiation (Tim Langlois)
750#. Added the commonly occurring ``2_d_d`` template specialization for
751 the Schur Eliminator.
752#. Faster ``ITERATIVE_SCHUR`` solver using template specializations.
753#. Faster ``SCHUR_JACOBI`` preconditioner construction.
754#. Faster ``AngleAxisRotatePoint``.
755#. Faster Jacobian evaluation when a loss function is used.
756#. Added support for multiple clustering algorithms in visibility
757 based preconditioning, including a new fast single linkage
758 clustering algorithm.
759
760Bug Fixes
761---------
762#. Fix ordering of ParseCommandLineFlags() & InitGoogleTest() for
763 Windows. (Alex Stewart)
764#. Remove DCHECK_GE checks from fixed_array.h.
765#. Fix build on MSVC 2013 (Petter Strandmark)
766#. Fixed ``AngleAxisToRotationMatrix`` near zero.
767#. Move ``CERES_HASH_NAMESPACE`` macros to ``collections_port.h``.
768#. Fix handling of unordered_map/unordered_set on OSX 10.9.0.
769#. Explicitly link to libm for ``curve_fitting_c.c``. (Alex Stewart)
770#. Minor type conversion fix to autodiff.h
771#. Remove RuntimeNumericDiffCostFunction.
772#. Fix operator= ambiguity on some versions of Clang. (Alex Stewart)
773#. Various Lint cleanups (William Rucklidge & Jim Roseborough)
774#. Modified installation folders for Windows. (Pablo Speciale)
775#. Added librt to link libraries for SuiteSparse_config on
776 Linux. (Alex Stewart)
777#. Check for presence of return-type-c-linkage option with
778 Clang. (Alex Stewart)
779#. Fix Problem::RemoveParameterBlock after calling solve. (Simon
780 Lynen)
781#. Fix a free/delete bug in covariance_impl.cc
782#. Fix two build errors. (Dustin Lang)
783#. Add RequireInitialization = 1 to NumTraits::Jet.
784#. Update gmock/gtest to 1.7.0
785#. Added IterationSummary::gradient_norm.
786#. Reduced verbosity of the inner iteration minimizer.
787#. Fixed a bug in TrustRegionMinimizer. (Michael Vitus)
788#. Removed android/build_android.sh.
789
790
7911.7.0
792=====
793
794Backward Incompatible API Changes
795---------------------------------
796
797#. ``Solver::Options::sparse_linear_algebra_library`` has been renamed
798 to ``Solver::Options::sparse_linear_algebra_library_type``.
799
800New Features
801------------
802#. Sparse and dense covariance estimation.
803#. A new Wolfe line search. (Alex Stewart)
804#. ``BFGS`` line search direction. (Alex Stewart)
805#. C API
806#. Speeded up the use of loss functions > 17x.
807#. Faster ``DENSE_QR``, ``DENSE_NORMAL_CHOLESKY`` and ``DENSE_SCHUR``
808 solvers.
809#. Support for multiple dense linear algebra backends. In particular
810 optimized ``BLAS`` and ``LAPACK`` implementations (e.g., Intel MKL,
811 ACML, OpenBLAS etc) can now be used to do the dense linear algebra
812 for ``DENSE_QR``, ``DENSE_NORMAL_CHOLESKY`` and ``DENSE_SCHUR``
813#. Use of Inner iterations can now be adaptively stopped. Iteration
814 and runtime statistics for inner iterations are not reported in
815 ``Solver::Summary`` and ``Solver::Summary::FullReport``.
816#. Improved inner iteration step acceptance criterion.
817#. Add BlockRandomAccessCRSMatrix.
818#. Speeded up automatic differentiation by 7\%.
819#. Bundle adjustment example from libmv/Blender (Sergey Sharybin)
820#. Shared library building is now controlled by CMake, rather than a
821 custom solution. Previously, Ceres had a custom option, but this is
822 now deprecated in favor of CMake's built in support for switching
823 between static and shared. Turn on BUILD_SHARED_LIBS to get shared
824 Ceres libraries.
825#. No more dependence on Protocol Buffers.
826#. Incomplete LQ factorization.
827#. Ability to write trust region problems to disk.
828#. Add sinh, cosh, tanh and tan functions to automatic differentiation
829 (Johannes Schönberger)
830#. Simplifications to the cmake build file.
831#. ``miniglog`` can now be used as a replacement for ``google-glog``
832 on non Android platforms. (This is NOT recommended).
833
834Bug Fixes
835---------
836#. Fix ``ITERATIVE_SCHUR`` solver to work correctly when the schur
837 complement is of size zero. (Soohyun Bae)
838#. Fix the ``spec`` file for generating ``RPM`` packages (Brian Pitts
839 and Taylor Braun-Jones).
840#. Fix how ceres calls CAMD (Manas Jagadev)
841#. Fix breakage on old versions of SuiteSparse. (Fisher Yu)
842#. Fix warning C4373 in Visual Studio (Petter Strandmark)
843#. Fix compilation error caused by missing suitesparse headers and
844 reorganize them to be more robust. (Sergey Sharybin)
845#. Check GCC Version before adding -fast compiler option on
846 OSX. (Steven Lovegrove)
847#. Add documentation for minimizer progress output.
848#. Lint and other cleanups (William Rucklidge and James Roseborough)
849#. Collections port fix for MSC 2008 (Sergey Sharybin)
850#. Various corrections and cleanups in the documentation.
851#. Change the path where CeresConfig.cmake is installed (Pablo
852 Speciale)
853#. Minor errors in documentation (Pablo Speciale)
854#. Updated depend.cmake to follow CMake IF convention. (Joydeep
855 Biswas)
856#. Stabilize the schur ordering algorithm.
857#. Update license header in split.h.
858#. Enabling -O4 (link-time optimization) only if compiler/linker
859 support it. (Alex Stewart)
860#. Consistent glog path across files.
861#. ceres-solver.spec: Use cleaner, more conventional Release string
862 (Taylor Braun-Jones)
863#. Fix compile bug on RHEL6 due to missing header (Taylor Braun-Jones)
864#. CMake file is less verbose.
865#. Use the latest upstream version of google-test and gmock.
866#. Rationalize some of the variable names in ``Solver::Options``.
867#. Improve Summary::FullReport when line search is used.
868#. Expose line search parameters in ``Solver::Options``.
869#. Fix update of L-BFGS history buffers after they become full. (Alex
870 Stewart)
871#. Fix configuration error on systems without SuiteSparse installed
872 (Sergey Sharybin)
873#. Enforce the read call returns correct value in
874 ``curve_fitting_c.c`` (Arnaud Gelas)
875#. Fix DynamicAutoDiffCostFunction (Richard Stebbing)
876#. Fix Problem::RemoveParameterBlock documentation (Johannes
877 Schönberger)
878#. Fix a logging bug in parameter_block.h
879#. Refactor the preconditioner class structure.
880#. Fix an uninitialized variable warning when building with ``GCC``.
881#. Fix a reallocation bug in
882 ``CreateJacobianBlockSparsityTranspose``. (Yuliy Schwartzburg)
883#. Add a define for O_BINARY.
884#. Fix miniglog-based Android NDK build; now works with NDK r9. (Scott
885 Ettinger)
886
887
8881.6.0
889=====
890
891New Features
892------------
893#. Major Performance improvements.
894
895 a. Schur type solvers (``SPARSE_SCHUR``, ``DENSE_SCHUR``,
896 ``ITERATIVE_SCHUR``) are significantly faster due to custom BLAS
897 routines and fewer heap allocations.
898
899 b. ``SPARSE_SCHUR`` when used with ``CX_SPARSE`` now uses a block
900 AMD for much improved factorization performance.
901
902 c. The jacobian matrix is pre-ordered so that
903 ``SPARSE_NORMAL_CHOLESKY`` and ``SPARSE_SCHUR`` do not have to
904 make copies inside ``CHOLMOD``.
905
906 d. Faster autodiff by replacing division by multplication by inverse.
907
908 e. When compiled without threads, the schur eliminator does not pay
909 the penalty for locking and unlocking mutexes.
910
911#. Users can now use ``linear_solver_ordering`` to affect the
912 fill-reducing ordering used by ``SUITE_SPARSE`` for
913 ``SPARSE_NORMAL_CHOLESKY``.
914#. ``Problem`` can now report the set of parameter blocks it knows about.
915#. ``TrustRegionMinimizer`` uses the evaluator to compute the gradient
916 instead of a matrix vector multiply.
917#. On ``Mac OS``, whole program optimization is enabled.
918#. Users can now use automatic differentiation to define new
919 ``LocalParameterization`` objects. (Sergey Sharybin)
920#. Enable larger tuple sizes for Visual Studio 2012. (Petter Strandmark)
921
922
923Bug Fixes
924---------
925
926#. Update the documentation for ``CostFunction``.
927#. Fixed a typo in the documentation. (Pablo Speciale)
928#. Fix a typo in suitesparse.cc.
929#. Bugfix in ``NumericDiffCostFunction``. (Nicolas Brodu)
930#. Death to BlockSparseMatrixBase.
931#. Change Minimizer::Options::min_trust_region_radius to double.
932#. Update to compile with stricter gcc checks. (Joydeep Biswas)
933#. Do not modify cached CMAKE_CXX_FLAGS_RELEASE. (Sergey Sharybin)
934#. ``<iterator>`` needed for back_insert_iterator. (Petter Strandmark)
935#. Lint cleanup. (William Rucklidge)
936#. Documentation corrections. (Pablo Speciale)
937
938
9391.5.0
940=====
941
942Backward Incompatible API Changes
943---------------------------------
944#. Added ``Problem::Evaluate``. Now you can evaluate a problem or any
945 part of it without calling the solver.
946
947 In light of this the following settings have been deprecated and
948 removed from the API.
949
950 - ``Solver::Options::return_initial_residuals``
951 - ``Solver::Options::return_initial_gradient``
952 - ``Solver::Options::return_initial_jacobian``
953 - ``Solver::Options::return_final_residuals``
954 - ``Solver::Options::return_final_gradient``
955 - ``Solver::Options::return_final_jacobian``
956
957 Instead we recommend using something like this.
958
959 .. code-block:: c++
960
961 Problem problem;
962 // Build problem
963
964 vector<double> initial_residuals;
965 problem.Evaluate(Problem::EvaluateOptions(),
966 NULL, /* No cost */
967 &initial_residuals,
968 NULL, /* No gradient */
969 NULL /* No jacobian */ );
970
971 Solver::Options options;
972 Solver::Summary summary;
973 Solver::Solve(options, &problem, &summary);
974
975 vector<double> final_residuals;
976 problem.Evaluate(Problem::EvaluateOptions(),
977 NULL, /* No cost */
978 &final_residuals,
979 NULL, /* No gradient */
980 NULL /* No jacobian */ );
981
982
983New Features
984------------
985#. Problem now supports removal of ParameterBlocks and
986 ResidualBlocks. There is a space/time tradeoff in doing this which
987 is controlled by
988 ``Problem::Options::enable_fast_parameter_block_removal``.
989
990#. Ceres now supports Line search based optimization algorithms in
991 addition to trust region algorithms. Currently there is support for
992 gradient descent, non-linear conjugate gradient and LBFGS search
993 directions.
994#. Added ``Problem::Evaluate``. Now you can evaluate a problem or any
995 part of it without calling the solver. In light of this the
996 following settings have been deprecated and removed from the API.
997
998 - ``Solver::Options::return_initial_residuals``
999 - ``Solver::Options::return_initial_gradient``
1000 - ``Solver::Options::return_initial_jacobian``
1001 - ``Solver::Options::return_final_residuals``
1002 - ``Solver::Options::return_final_gradient``
1003 - ``Solver::Options::return_final_jacobian``
1004
1005#. New, much improved HTML documentation using Sphinx.
1006#. Changed ``NumericDiffCostFunction`` to take functors like
1007 ``AutoDiffCostFunction``.
1008#. Added support for mixing automatic, analytic and numeric
1009 differentiation. This is done by adding ``CostFunctionToFunctor``
1010 and ``NumericDiffFunctor`` objects to the API.
1011#. Sped up the robust loss function correction logic when residual is
1012 one dimensional.
1013#. Sped up ``DenseQRSolver`` by changing the way dense jacobians are
1014 stored. This is a 200-500% improvement in linear solver performance
1015 depending on the size of the problem.
1016#. ``DENSE_SCHUR`` now supports multi-threading.
1017#. Greatly expanded ``Summary::FullReport``:
1018
1019 - Report the ordering used by the ``LinearSolver``.
1020 - Report the ordering used by the inner iterations.
1021 - Execution timing breakdown into evaluations and linear solves.
1022 - Effective size of the problem solved by the solver, which now
1023 accounts for the size of the tangent space when using a
1024 ``LocalParameterization``.
1025#. Ceres when run at the ``VLOG`` level 3 or higher will report
1026 detailed timing information about its internals.
1027#. Remove extraneous initial and final residual evaluations. This
1028 speeds up the solver a bit.
1029#. Automatic differenatiation with a dynamic number of parameter
1030 blocks. (Based on an idea by Thad Hughes).
1031#. Sped up problem construction and destruction.
1032#. Added matrix adapters to ``rotation.h`` so that the rotation matrix
1033 routines can work with row and column major matrices. (Markus Moll)
1034#. ``SCHUR_JACOBI`` can now be used without ``SuiteSparse``.
1035#. A ``.spec`` file for producing RPMs. (Taylor Braun-Jones)
1036#. ``CMake`` can now build the sphinx documentation (Pablo Speciale)
1037#. Add support for creating a CMake config file during build to make
1038 embedding Ceres in other CMake-using projects easier. (Pablo
1039 Speciale).
1040#. Better error reporting in ``Problem`` for missing parameter blocks.
1041#. A more flexible ``Android.mk`` and a more modular build. If binary
1042 size and/or compile time is a concern, larger parts of the solver
1043 can be disabled at compile time.
1044
1045Bug Fixes
1046---------
1047#. Compilation fixes for MSVC2010 (Sergey Sharybin)
1048#. Fixed "deprecated conversion from string constant to char*"
1049 warnings. (Pablo Speciale)
1050#. Correctly propagate ifdefs when building without Schur eliminator
1051 template specializations.
1052#. Correct handling of ``LIB_SUFFIX`` on Linux. (Yuliy Schwartzburg).
1053#. Code and signature cleanup in ``rotation.h``.
1054#. Make examples independent of internal code.
1055#. Disable unused member in ``gtest`` which results in build error on
1056 OS X with latest Xcode. (Taylor Braun-Jones)
1057#. Pass the correct flags to the linker when using
1058 ``pthreads``. (Taylor Braun-Jones)
1059#. Only use ``cmake28`` macro when building on RHEL6. (Taylor
1060 Braun-Jones)
1061#. Remove ``-Wno-return-type-c-linkage`` when compiling with
1062 GCC. (Taylor Braun-Jones)
1063#. Fix ``No previous prototype`` warnings. (Sergey Sharybin)
1064#. MinGW build fixes. (Sergey Sharybin)
1065#. Lots of minor code and lint fixes. (William Rucklidge)
1066#. Fixed a bug in ``solver_impl.cc`` residual evaluation. (Markus
1067 Moll)
1068#. Fixed variadic evaluation bug in ``AutoDiff``.
1069#. Fixed ``SolverImpl`` tests.
1070#. Fixed a bug in ``DenseSparseMatrix::ToDenseMatrix()``.
1071#. Fixed an initialization bug in ``ProgramEvaluator``.
1072#. Fixes to Android.mk paths (Carlos Hernandez)
1073#. Modify ``nist.cc`` to compute accuracy based on ground truth
1074 solution rather than the ground truth function value.
1075#. Fixed a memory leak in ``cxsparse.cc``. (Alexander Mordvintsev).
1076#. Fixed the install directory for libraries by correctly handling
1077 ``LIB_SUFFIX``. (Taylor Braun-Jones)
1078
10791.4.0
1080=====
1081
1082Backward Incompatible API Changes
1083---------------------------------
1084The new ordering API breaks existing code. Here the common case fixes.
1085
1086**Before**
1087
1088.. code-block:: c++
1089
1090 options.linear_solver_type = ceres::DENSE_SCHUR
1091 options.ordering_type = ceres::SCHUR
1092
1093**After**
1094
1095
1096.. code-block:: c++
1097
1098 options.linear_solver_type = ceres::DENSE_SCHUR
1099
1100
1101**Before**
1102
1103.. code-block:: c++
1104
1105 options.linear_solver_type = ceres::DENSE_SCHUR;
1106 options.ordering_type = ceres::USER;
1107 for (int i = 0; i < num_points; ++i) {
1108 options.ordering.push_back(my_points[i])
1109 }
1110 for (int i = 0; i < num_cameras; ++i) {
1111 options.ordering.push_back(my_cameras[i])
1112 }
1113 options.num_eliminate_blocks = num_points;
1114
1115
1116**After**
1117
1118.. code-block:: c++
1119
1120 options.linear_solver_type = ceres::DENSE_SCHUR;
1121 options.ordering = new ceres::ParameterBlockOrdering;
1122 for (int i = 0; i < num_points; ++i) {
1123 options.linear_solver_ordering->AddElementToGroup(my_points[i], 0);
1124 }
1125 for (int i = 0; i < num_cameras; ++i) {
1126 options.linear_solver_ordering->AddElementToGroup(my_cameras[i], 1);
1127 }
1128
1129
1130New Features
1131------------
1132#. A new richer, more expressive and consistent API for ordering
1133 parameter blocks.
1134#. A non-linear generalization of Ruhe & Wedin's Algorithm II. This
1135 allows the user to use variable projection on separable and
1136 non-separable non-linear least squares problems. With
1137 multithreading, this results in significant improvements to the
1138 convergence behavior of the solver at a small increase in run time.
1139#. An image denoising example using fields of experts. (Petter
1140 Strandmark)
1141#. Defines for Ceres version and ABI version.
1142#. Higher precision timer code where available. (Petter Strandmark)
1143#. Example Makefile for users of Ceres.
1144#. IterationSummary now informs the user when the step is a
1145 non-monotonic step.
1146#. Fewer memory allocations when using ``DenseQRSolver``.
1147#. GradientChecker for testing CostFunctions (William Rucklidge)
1148#. Add support for cost functions with 10 parameter blocks in
1149 ``Problem``. (Fisher)
1150#. Add support for 10 parameter blocks in ``AutoDiffCostFunction``.
1151
1152
1153Bug Fixes
1154---------
1155
1156#. static cast to force Eigen::Index to long conversion
1157#. Change LOG(ERROR) to LOG(WARNING) in ``schur_complement_solver.cc``.
1158#. Remove verbose logging from ``DenseQRSolve``.
1159#. Fix the Android NDK build.
1160#. Better handling of empty and constant Problems.
1161#. Remove an internal header that was leaking into the public API.
1162#. Memory leak in ``trust_region_minimizer.cc``
1163#. Schur ordering was operating on the wrong object (Ricardo Martin)
1164#. MSVC fixes (Petter Strandmark)
1165#. Various fixes to ``nist.cc`` (Markus Moll)
1166#. Fixed a jacobian scaling bug.
1167#. Numerically robust computation of ``model_cost_change``.
1168#. Signed comparison compiler warning fixes (Ricardo Martin)
1169#. Various compiler warning fixes all over.
1170#. Inclusion guard fixes (Petter Strandmark)
1171#. Segfault in test code (Sergey Popov)
1172#. Replaced ``EXPECT/ASSERT_DEATH`` with the more portable
1173 ``EXPECT_DEATH_IF_SUPPORTED`` macros.
1174#. Fixed the camera projection model in Ceres' implementation of
1175 Snavely's camera model. (Ricardo Martin)
1176
1177
11781.3.0
1179=====
1180
1181New Features
1182------------
1183#. Android Port (Scott Ettinger also contributed to the port)
1184#. Windows port. (Changchang Wu and Pierre Moulon also contributed to the port)
1185#. New subspace Dogleg Solver. (Markus Moll)
1186#. Trust region algorithm now supports the option of non-monotonic steps.
1187#. New loss functions ``ArcTanLossFunction``, ``TolerantLossFunction``
1188 and ``ComposedLossFunction``. (James Roseborough).
1189#. New ``DENSE_NORMAL_CHOLESKY`` linear solver, which uses Eigen's
1190 LDLT factorization on the normal equations.
1191#. Cached symbolic factorization when using ``CXSparse``.
1192 (Petter Strandark)
1193#. New example ``nist.cc`` and data from the NIST non-linear
1194 regression test suite. (Thanks to Douglas Bates for suggesting this.)
1195#. The traditional Dogleg solver now uses an elliptical trust
1196 region (Markus Moll)
1197#. Support for returning initial and final gradients & Jacobians.
1198#. Gradient computation support in the evaluators, with an eye
1199 towards developing first order/gradient based solvers.
1200#. A better way to compute ``Solver::Summary::fixed_cost``. (Markus Moll)
1201#. ``CMake`` support for building documentation, separate examples,
1202 installing and uninstalling the library and Gerrit hooks (Arnaud
1203 Gelas)
1204#. ``SuiteSparse4`` support (Markus Moll)
1205#. Support for building Ceres without ``TR1`` (This leads to
1206 slightly slower ``DENSE_SCHUR`` and ``SPARSE_SCHUR`` solvers).
1207#. ``BALProblem`` can now write a problem back to disk.
1208#. ``bundle_adjuster`` now allows the user to normalize and perturb the
1209 problem before solving.
1210#. Solver progress logging to file.
1211#. Added ``Program::ToString`` and ``ParameterBlock::ToString`` to
1212 help with debugging.
1213#. Ability to build Ceres as a shared library (MacOS and Linux only),
1214 associated versioning and build release script changes.
1215#. Portable floating point classification API.
1216
1217
1218Bug Fixes
1219---------
1220#. Fix how invalid step evaluations are handled.
1221#. Change the slop handling around zero for model cost changes to use
1222 relative tolerances rather than absolute tolerances.
1223#. Fix an inadvertant integer to bool conversion. (Petter Strandmark)
1224#. Do not link to ``libgomp`` when building on
1225 windows. (Petter Strandmark)
1226#. Include ``gflags.h`` in ``test_utils.cc``. (Petter
1227 Strandmark)
1228#. Use standard random number generation routines. (Petter Strandmark)
1229#. ``TrustRegionMinimizer`` does not implicitly negate the
1230 steps that it takes. (Markus Moll)
1231#. Diagonal scaling allows for equal upper and lower bounds. (Markus Moll)
1232#. TrustRegionStrategy does not misuse LinearSolver:Summary anymore.
1233#. Fix Eigen3 Row/Column Major storage issue. (Lena Gieseke)
1234#. QuaternionToAngleAxis now guarantees an angle in $[-\pi, \pi]$. (Guoxuan Zhang)
1235#. Added a workaround for a compiler bug in the Android NDK to the
1236 Schur eliminator.
1237#. The sparse linear algebra library is only logged in
1238 Summary::FullReport if it is used.
1239#. Rename the macro ``CERES_DONT_HAVE_PROTOCOL_BUFFERS``
1240 to ``CERES_NO_PROTOCOL_BUFFERS`` for consistency.
1241#. Fix how static structure detection for the Schur eliminator logs
1242 its results.
1243#. Correct example code in the documentation. (Petter Strandmark)
1244#. Fix ``fpclassify.h`` to work with the Android NDK and STLport.
1245#. Fix a memory leak in the ``levenber_marquardt_strategy_test.cc``
1246#. Fix an early return bug in the Dogleg solver. (Markus Moll)
1247#. Zero initialize Jets.
1248#. Moved ``internal/ceres/mock_log.h`` to ``internal/ceres/gmock/mock-log.h``
1249#. Unified file path handling in tests.
1250#. ``data_fitting.cc`` includes ``gflags``
1251#. Renamed Ceres' Mutex class and associated macros to avoid
1252 namespace conflicts.
1253#. Close the BAL problem file after reading it (Markus Moll)
1254#. Fix IsInfinite on Jets.
1255#. Drop alignment requirements for Jets.
1256#. Fixed Jet to integer comparison. (Keith Leung)
1257#. Fix use of uninitialized arrays. (Sebastian Koch & Markus Moll)
1258#. Conditionally compile gflag dependencies.(Casey Goodlett)
1259#. Add ``data_fitting.cc`` to the examples ``CMake`` file.
1260
1261
12621.2.3
1263=====
1264
1265Bug Fixes
1266---------
1267#. ``suitesparse_test`` is enabled even when ``-DSUITESPARSE=OFF``.
1268#. ``FixedArray`` internal struct did not respect ``Eigen``
1269 alignment requirements (Koichi Akabe & Stephan Kassemeyer).
1270#. Fixed ``quadratic.cc`` documentation and code mismatch
1271 (Nick Lewycky).
1272
12731.2.2
1274=====
1275
1276Bug Fixes
1277---------
1278#. Fix constant parameter blocks, and other minor fixes (Markus Moll)
1279#. Fix alignment issues when combining ``Jet`` and
1280 ``FixedArray`` in automatic differeniation.
1281#. Remove obsolete ``build_defs`` file.
1282
12831.2.1
1284=====
1285
1286New Features
1287------------
1288#. Powell's Dogleg solver
1289#. Documentation now has a brief overview of Trust Region methods and
1290 how the Levenberg-Marquardt and Dogleg methods work.
1291
1292Bug Fixes
1293---------
1294#. Destructor for ``TrustRegionStrategy`` was not virtual (Markus
1295 Moll)
1296#. Invalid ``DCHECK`` in ``suitesparse.cc`` (Markus Moll)
1297#. Iteration callbacks were not properly invoked (Luis Alberto
1298 Zarrabeiti)
1299#. Logging level changes in ConjugateGradientsSolver
1300#. VisibilityBasedPreconditioner setup does not account for skipped
1301 camera pairs. This was debugging code.
1302#. Enable SSE support on MacOS
1303#. ``system_test`` was taking too long and too much memory (Koichi
1304 Akabe)
1305
13061.2.0
1307=====
1308
1309New Features
1310------------
1311
1312#. ``CXSparse`` support.
1313#. Block oriented fill reducing orderings. This reduces the
1314 factorization time for sparse ``CHOLMOD`` significantly.
1315#. New Trust region loop with support for multiple trust region step
1316 strategies. Currently only Levenberg-Marquardt is supported, but
1317 this refactoring opens the door for Dog-leg, Stiehaug and others.
1318#. ``CMake`` file restructuring. Builds in ``Release`` mode by default, and now has platform specific tuning flags.
1319#. Re-organized documentation. No new content, but better
1320 organization.
1321
1322
1323Bug Fixes
1324---------
1325
1326#. Fixed integer overflow bug in ``block_random_access_sparse_matrix.cc``.
1327#. Renamed some macros to prevent name conflicts.
1328#. Fixed incorrect input to ``StateUpdatingCallback``.
1329#. Fixes to AutoDiff tests.
1330#. Various internal cleanups.
1331
1332
13331.1.1
1334=====
1335
1336Bug Fixes
1337---------
1338#. Fix a bug in the handling of constant blocks. (Louis Simard)
1339#. Add an optional lower bound to the Levenberg-Marquardt regularizer
1340 to prevent oscillating between well and ill posed linear problems.
1341#. Some internal refactoring and test fixes.
1342
13431.1.0
1344=====
1345
1346New Features
1347------------
1348#. New iterative linear solver for general sparse problems - ``CGNR``
1349 and a block Jacobi preconditioner for it.
1350#. Changed the semantics of how ``SuiteSparse`` dependencies are
1351 checked and used. Now ``SuiteSparse`` is built by default, only if
1352 all of its dependencies are present.
1353#. Automatic differentiation now supports dynamic number of residuals.
1354#. Support for writing the linear least squares problems to disk in
1355 text format so that they can loaded into ``MATLAB``.
1356#. Linear solver results are now checked for nan and infinities.
1357#. Added ``.gitignore`` file.
1358#. A better more robust build system.
1359
1360
1361Bug Fixes
1362---------
1363#. Fixed a strict weak ordering bug in the schur ordering.
1364#. Grammar and typos in the documents and code comments.
1365#. Fixed tests which depended on exact equality between floating point
1366 values.
1367
13681.0.0
1369=====
1370Initial open source release. Nathan Wiegand contributed to the Mac OSX
1371port.
1372
1373
1374Origins
1375=======
1376
1377Ceres Solver grew out of the need for general least squares solving at
1378Google. In early 2010, Sameer Agarwal and Fredrik Schaffalitzky
1379started the development of Ceres Solver. Fredrik left Google shortly
1380thereafter and Keir Mierle stepped in to take his place. After two
1381years of on-and-off development, Ceres Solver was released as open
1382source in May of 2012.