version_history.rst 74 KB

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