blob: 010b477098c75bc888418250ef423bd801933e7f [file] [log] [blame]
Sameer Agarwal3d87b722013-02-02 00:49:31 -08001.. _chapter-version-history:
2
3===============
4Version History
5===============
6
71.5.0
8=====
9
10New Features
11------------
12
13#. Ceres now supports Line search based optimization algorithms in
14 addition to trust region algorithms. Currently there is support for
15 gradient descent, non-linear conjugate gradient and LBFGS search
16 directions.
17
Sameer Agarwalefb47f32013-02-14 19:44:11 -080018#. New, much improved HTML documentation using Sphinx.
19
Sameer Agarwal3d87b722013-02-02 00:49:31 -080020#. Speedup the robust loss function correction logic when residual is
21 one dimensional.
22
23#. Changed ``NumericDiffCostFunction`` to take functors like
24 ``AutoDiffCostFunction``.
25
26#. Added support for mixing automatic, analytic and numeric
27 differentiation. This is done by adding ``CostFunctionToFunctor``
Sameer Agarwalefb47f32013-02-14 19:44:11 -080028 and ``NumericDiffFunctor`` objects to the API.
Sameer Agarwal3d87b722013-02-02 00:49:31 -080029
Sameer Agarwalefb47f32013-02-14 19:44:11 -080030#. ``Summary::FullReport`` now reports the structure of the ordering
31 used by the ``LinearSolver`` and inner iterations.
32
33#. Ceres when run at the ``VLOG`` level 3 or higher will report
34 detailed timing information about its internals.
35
36#. Remove extraneous initial and final residual evaluations. This
37 speeds up the solver a bit.
38
39#. Automatic differenatiation with a dynamic number of parameter
40 blocks. (Based on an initial implementation by Thad Hughes).
Sameer Agarwal3d87b722013-02-02 00:49:31 -080041
42Bug Fixes
43---------
44
45#. Fixed varidic evaluation bug in ``AutoDiff``.
46
47#. Fixed ``SolverImpl`` tests.
48
49#. Fixed a bug in ``DenseSparseMatrix::ToDenseMatrix()``.
50
51#. Fixed an initialization bug in ``ProgramEvaluator``.
52
Sameer Agarwalefb47f32013-02-14 19:44:11 -080053#. Fixes to Android.mk paths (Carlos Hernandez)
54
55#. Modify ``nist.cc`` to compute accuracy based on ground truth
56 solution rather than the ground truth function value.
57
58#. Fixed a memory leak in ``cxsparse.cc``. (Alexander Mordvintsev).
59
Sameer Agarwal3d87b722013-02-02 00:49:31 -080060
611.4.0
62=====
63
64
65API Changes
66-----------
67
68The new ordering API breaks existing code. Here the common case fixes.
69
70**Before**
71
72.. code-block:: c++
73
74 options.linear_solver_type = ceres::DENSE_SCHUR
75 options.ordering_type = ceres::SCHUR
76
77**After**
78
79
80.. code-block:: c++
81
82 options.linear_solver_type = ceres::DENSE_SCHUR
83
84
85**Before**
86
87.. code-block:: c++
88
89 options.linear_solver_type = ceres::DENSE_SCHUR;
90 options.ordering_type = ceres::USER;
91 for (int i = 0; i < num_points; ++i) {
92 options.ordering.push_back(my_points[i])
93 }
94 for (int i = 0; i < num_cameras; ++i) {
95 options.ordering.push_back(my_cameras[i])
96 }
97 options.num_eliminate_blocks = num_points;
98
99
100**After**
101
102.. code-block:: c++
103
104 options.linear_solver_type = ceres::DENSE_SCHUR;
105 options.ordering = new ceres::ParameterBlockOrdering;
106 for (int i = 0; i < num_points; ++i) {
107 options.linear_solver_ordering->AddElementToGroup(my_points[i], 0);
108 }
109 for (int i = 0; i < num_cameras; ++i) {
110 options.linear_solver_ordering->AddElementToGroup(my_cameras[i], 1);
111 }
112
113
114New Features
115------------
116
117#. A new richer, more expressive and consistent API for ordering
118 parameter blocks.
119
120#. A non-linear generalization of Ruhe & Wedin's Algorithm II. This
121 allows the user to use variable projection on separable and
122 non-separable non-linear least squares problems. With
123 multithreading, this results in significant improvements to the
124 convergence behavior of the solver at a small increase in run time.
125
126#. An image denoising example using fields of experts. (Petter
127 Strandmark)
128
129#. Defines for Ceres version and ABI version.
130
131#. Higher precision timer code where available. (Petter Strandmark)
132
133#. Example Makefile for users of Ceres.
134
135#. IterationSummary now informs the user when the step is a
136 non-monotonic step.
137
138#. Fewer memory allocations when using ``DenseQRSolver``.
139
140#. GradientChecker for testing CostFunctions (William Rucklidge)
141
142#. Add support for cost functions with 10 parameter blocks in
143 ``Problem``. (Fisher)
144
145#. Add support for 10 parameter blocks in ``AutoDiffCostFunction``.
146
147
148Bug Fixes
149---------
150
151#. static cast to force Eigen::Index to long conversion
152
153#. Change LOG(ERROR) to LOG(WARNING) in ``schur_complement_solver.cc``.
154
155#. Remove verbose logging from ``DenseQRSolve``.
156
157#. Fix the Android NDK build.
158
159#. Better handling of empty and constant Problems.
160
161#. Remove an internal header that was leaking into the public API.
162
163#. Memory leak in ``trust_region_minimizer.cc``
164
165#. Schur ordering was operating on the wrong object (Ricardo Martin)
166
167#. MSVC fixes (Petter Strandmark)
168
169#. Various fixes to ``nist.cc`` (Markus Moll)
170
171#. Fixed a jacobian scaling bug.
172
173#. Numerically robust computation of ``model_cost_change``.
174
175#. Signed comparison compiler warning fixes (Ricardo Martin)
176
177#. Various compiler warning fixes all over.
178
179#. Inclusion guard fixes (Petter Strandmark)
180
181#. Segfault in test code (Sergey Popov)
182
183#. Replaced ``EXPECT/ASSERT_DEATH`` with the more portable
184 ``EXPECT_DEATH_IF_SUPPORTED`` macros.
185
186#. Fixed the camera projection model in Ceres' implementation of
187 Snavely's camera model. (Ricardo Martin)
188
189
1901.3.0
191=====
192
193New Features
194------------
195
196#. Android Port (Scott Ettinger also contributed to the port)
197
198#. Windows port. (Changchang Wu and Pierre Moulon also contributed to the port)
199
200#. New subspace Dogleg Solver. (Markus Moll)
201
202#. Trust region algorithm now supports the option of non-monotonic steps.
203
204#. New loss functions ``ArcTanLossFunction``, ``TolerantLossFunction``
205 and ``ComposedLossFunction``. (James Roseborough).
206
207#. New ``DENSE_NORMAL_CHOLESKY`` linear solver, which uses Eigen's
208 LDLT factorization on the normal equations.
209
210#. Cached symbolic factorization when using ``CXSparse``.
211 (Petter Strandark)
212
213#. New example ``nist.cc`` and data from the NIST non-linear
214 regression test suite. (Thanks to Douglas Bates for suggesting this.)
215
216#. The traditional Dogleg solver now uses an elliptical trust
217 region (Markus Moll)
218
219#. Support for returning initial and final gradients & Jacobians.
220
221#. Gradient computation support in the evaluators, with an eye
222 towards developing first order/gradient based solvers.
223
224#. A better way to compute ``Solver::Summary::fixed_cost``. (Markus Moll)
225
226#. ``CMake`` support for building documentation, separate examples,
227 installing and uninstalling the library and Gerrit hooks (Arnaud
228 Gelas)
229
230#. ``SuiteSparse4`` support (Markus Moll)
231
232#. Support for building Ceres without ``TR1`` (This leads to
233 slightly slower ``DENSE_SCHUR`` and ``SPARSE_SCHUR`` solvers).
234
235#. ``BALProblem`` can now write a problem back to disk.
236
237#. ``bundle_adjuster`` now allows the user to normalize and perturb the
238 problem before solving.
239
240#. Solver progress logging to file.
241
242#. Added ``Program::ToString`` and ``ParameterBlock::ToString`` to
243 help with debugging.
244
245#. Ability to build Ceres as a shared library (MacOS and Linux only),
246 associated versioning and build release script changes.
247
248#. Portable floating point classification API.
249
250
251Bug Fixes
252---------
253
254#. Fix how invalid step evaluations are handled.
255
256#. Change the slop handling around zero for model cost changes to use
257 relative tolerances rather than absolute tolerances.
258
259#. Fix an inadvertant integer to bool conversion. (Petter Strandmark)
260
261#. Do not link to ``libgomp`` when building on
262 windows. (Petter Strandmark)
263
264#. Include ``gflags.h`` in ``test_utils.cc``. (Petter
265 Strandmark)
266
267#. Use standard random number generation routines. (Petter Strandmark)
268
269#. ``TrustRegionMinimizer`` does not implicitly negate the
270 steps that it takes. (Markus Moll)
271
272#. Diagonal scaling allows for equal upper and lower bounds. (Markus Moll)
273
274#. TrustRegionStrategy does not misuse LinearSolver:Summary anymore.
275
276#. Fix Eigen3 Row/Column Major storage issue. (Lena Gieseke)
277
278#. QuaternionToAngleAxis now guarantees an angle in $[-\pi, \pi]$. (Guoxuan Zhang)
279
280#. Added a workaround for a compiler bug in the Android NDK to the
281 Schur eliminator.
282
283#. The sparse linear algebra library is only logged in
284 Summary::FullReport if it is used.
285
286#. Rename the macro ``CERES_DONT_HAVE_PROTOCOL_BUFFERS``
287 to ``CERES_NO_PROTOCOL_BUFFERS`` for consistency.
288
289#. Fix how static structure detection for the Schur eliminator logs
290 its results.
291
292#. Correct example code in the documentation. (Petter Strandmark)
293
294#. Fix ``fpclassify.h`` to work with the Android NDK and STLport.
295
296#. Fix a memory leak in the ``levenber_marquardt_strategy_test.cc``
297
298#. Fix an early return bug in the Dogleg solver. (Markus Moll)
299
300#. Zero initialize Jets.
301#. Moved ``internal/ceres/mock_log.h`` to ``internal/ceres/gmock/mock-log.h``
302
303#. Unified file path handling in tests.
304
305#. ``data_fitting.cc`` includes ``gflags``
306
307#. Renamed Ceres' Mutex class and associated macros to avoid
308 namespace conflicts.
309
310#. Close the BAL problem file after reading it (Markus Moll)
311
312#. Fix IsInfinite on Jets.
313
314#. Drop alignment requirements for Jets.
315
316#. Fixed Jet to integer comparison. (Keith Leung)
317
318#. Fix use of uninitialized arrays. (Sebastian Koch & Markus Moll)
319
320#. Conditionally compile gflag dependencies.(Casey Goodlett)
321
322#. Add ``data_fitting.cc`` to the examples ``CMake`` file.
323
324
3251.2.3
326=====
327
328Bug Fixes
329---------
330
331#. ``suitesparse_test`` is enabled even when ``-DSUITESPARSE=OFF``.
332
333#. ``FixedArray`` internal struct did not respect ``Eigen``
334 alignment requirements (Koichi Akabe & Stephan Kassemeyer).
335
336#. Fixed ``quadratic.cc`` documentation and code mismatch
337 (Nick Lewycky).
338
3391.2.2
340=====
341
342Bug Fixes
343---------
344
345#. Fix constant parameter blocks, and other minor fixes (Markus Moll)
346
347#. Fix alignment issues when combining ``Jet`` and
348 ``FixedArray`` in automatic differeniation.
349
350#. Remove obsolete ``build_defs`` file.
351
3521.2.1
353=====
354
355New Features
356------------
357
358#. Powell's Dogleg solver
359
360#. Documentation now has a brief overview of Trust Region methods and
361 how the Levenberg-Marquardt and Dogleg methods work.
362
363Bug Fixes
364---------
365
366#. Destructor for ``TrustRegionStrategy`` was not virtual (Markus Moll)
367
368#. Invalid ``DCHECK`` in ``suitesparse.cc`` (Markus Moll)
369
370#. Iteration callbacks were not properly invoked (Luis Alberto Zarrabeiti)
371
372#. Logging level changes in ConjugateGradientsSolver
373
374#. VisibilityBasedPreconditioner setup does not account for skipped camera pairs. This was debugging code.
375
376#. Enable SSE support on MacOS
377
378#. ``system_test`` was taking too long and too much memory (Koichi Akabe)
379
3801.2.0
381=====
382
383New Features
384------------
385
386#. ``CXSparse`` support.
387
388#. Block oriented fill reducing orderings. This reduces the
389 factorization time for sparse ``CHOLMOD`` significantly.
390
391#. New Trust region loop with support for multiple trust region step
392 strategies. Currently only Levenberg-Marquardt is supported, but
393 this refactoring opens the door for Dog-leg, Stiehaug and others.
394
395#. ``CMake`` file restructuring. Builds in ``Release`` mode by
396 default, and now has platform specific tuning flags.
397
398#. Re-organized documentation. No new content, but better
399 organization.
400
401
402Bug Fixes
403---------
404
405#. Fixed integer overflow bug in ``block_random_access_sparse_matrix.cc``.
406
407#. Renamed some macros to prevent name conflicts.
408
409#. Fixed incorrent input to ``StateUpdatingCallback``.
410
411#. Fixes to AutoDiff tests.
412
413#. Various internal cleanups.
414
415
4161.1.1
417=====
418
419Bug Fixes
420---------
421
422#. Fix a bug in the handling of constant blocks. (Louis Simard)
423
424#. Add an optional lower bound to the Levenberg-Marquardt regularizer
425 to prevent oscillating between well and ill posed linear problems.
426
427#. Some internal refactoring and test fixes.
428
4291.1.0
430=====
431
432New Features
433------------
434
435#. New iterative linear solver for general sparse problems - ``CGNR``
436 and a block Jacobi preconditioner for it.
437
438#. Changed the semantics of how ``SuiteSparse`` dependencies are
439 checked and used. Now ``SuiteSparse`` is built by default, only if
440 all of its dependencies are present.
441
442#. Automatic differentiation now supports dynamic number of residuals.
443
444#. Support for writing the linear least squares problems to disk in
445 text format so that they can loaded into ``MATLAB``.
446
447#. Linear solver results are now checked for nan and infinities.
448
449#. Added ``.gitignore`` file.
450
451#. A better more robust build system.
452
453
454Bug Fixes
455---------
456
457#. Fixed a strict weak ordering bug in the schur ordering.
458
459#. Grammar and typos in the documents and code comments.
460
461#. Fixed tests which depended on exact equality between floating point values.
462
4631.0.0
464=====
465
466Initial Release. Nathan Wiegand contributed to the Mac OSX port.