blob: 159340a5ab96fa0a64c2393b0ed3c05209bc086c [file] [log] [blame]
Sameer Agarwal8ed29a72012-06-07 17:04:25 -07001%!TEX root = ceres-solver.tex
2
3\chapter{Version History}
Sameer Agarwalfaf88a12012-09-26 10:38:20 -07004\section*{1.4.0}
5\subsection{API Changes}
6The new ordering API breaks existing code. Here the common case fixes.
7\subsubsection{Before}
8\begin{minted}[mathescape]{c++}
9options.linear_solver_type = ceres::DENSE_SCHUR
10options.ordering_type = ceres::SCHUR
11\end{minted}
12\subsubsection{After}
13\begin{minted}[mathescape]{c++}
14options.linear_solver_type = ceres::DENSE_SCHUR
15\end{minted}
16\subsubsection{Before}
17\begin{minted}[mathescape]{c++}
18options.linear_solver_type = ceres::DENSE_SCHUR;
19options.ordering_type = ceres::USER;
20for (int i = 0; i < num_points; ++i) {
21 options.ordering.push_back(my_points[i])
22}
23for (int i = 0; i < num_cameras; ++i) {
24 options.ordering.push_back(my_cameras[i])
25}
26options.num_eliminate_blocks = num_points;
27\end{minted}
28\subsubsection{After}
29\begin{minted}[mathescape]{c++}
30options.linear_solver_type = ceres::DENSE_SCHUR;
Sameer Agarwal68b32a92012-10-06 23:10:51 -070031options.ordering = new ceres::ParameterBlockOrdering;
Sameer Agarwalfaf88a12012-09-26 10:38:20 -070032for (int i = 0; i < num_points; ++i) {
Sameer Agarwal68b32a92012-10-06 23:10:51 -070033 options.linear_solver_ordering->AddElementToGroup(my_points[i], 0);
Sameer Agarwalfaf88a12012-09-26 10:38:20 -070034}
35for (int i = 0; i < num_cameras; ++i) {
Sameer Agarwal68b32a92012-10-06 23:10:51 -070036 options.linear_solver_ordering->AddElementToGroup(my_cameras[i], 1);
Sameer Agarwalfaf88a12012-09-26 10:38:20 -070037}
38\end{minted}
39\subsection{New Features}
40\begin{itemize}
41\item A new richer, more expressive and consistent API for ordering
42 parameter blocks.
43\item A non-linear generalization of Ruhe \& Wedin's Algorithm
44 II. This allows the user to use variable projection on separable and
45 non-separable non-linear least squares problems. With
46 multithreading, this results in significant improvements to the
47 convergence behavior of the solver at a small increase in run time.
48\item An image denoising example using fields of experts. (Petter
49 Strandmark)
50\item Defines for Ceres version and ABI version.
51\item Higher precision timer code where available. (Petter Strandmark)
52\item Example Makefile for users of Ceres.
53\item IterationSummary now informs the user when the step is a
54 non-monotonic step.
Sameer Agarwalf5a7d9a2012-10-12 12:31:11 -070055\item Fewer memory allocations when using \texttt{DenseQRSolver}.
Sameer Agarwal8af9ebf2012-11-17 15:13:22 -080056\item GradientChecker for testing CostFunctions (William Rucklidge)
57\item Add support for cost functions with 10 parameter blocks in
58 Problem. (Fisher)
59\item Add support for 10 parameter blocks in AutoDiffCostFunction.
Sameer Agarwalfaf88a12012-09-26 10:38:20 -070060\end{itemize}
Sameer Agarwalf5a7d9a2012-10-12 12:31:11 -070061
Sameer Agarwalfaf88a12012-09-26 10:38:20 -070062\subsection{Bug Fixes}
63\begin{itemize}
Sameer Agarwal8af9ebf2012-11-17 15:13:22 -080064\item static cast to force Eigen::Index to long conversion
65\item Change LOG(ERROR) to LOG(WARNING) in \texttt{schur\_complement\_solver.cc}.
66\item Remove verbose logging from \texttt{DenseQRSolve}.
67\item Fix the Android NDK build.
Sameer Agarwalf5a7d9a2012-10-12 12:31:11 -070068\item Better handling of empty and constant Problems.
69\item Remove an internal header that was leaking into the public API.
70\item Memory leak in \texttt{trust\_region\_minimizer.cc}
71\item Schur ordering was operating on the wrong object (Ricardo Martin)
72\item MSVC fixes (Petter Strandmark)
Sameer Agarwalfaf88a12012-09-26 10:38:20 -070073\item Various fixes to \texttt{nist.cc} (Markus Moll)
74\item Fixed a jacobian scaling bug.
75\item Numerically robust computation of \texttt{model\_cost\_change}.
76\item Signed comparison compiler warning fixes (Ricardo Martin)
77\item Various compiler warning fixes all over.
78\item Inclusion guard fixes (Petter Strandmark)
79\item Segfault in test code (Sergey Popov)
80\item Replaced EXPECT/ASSERT\_DEATH with the more portable
Sameer Agarwal8af9ebf2012-11-17 15:13:22 -080081 EXPECT\_DEATH\_IF\_SUPPORTED macros.
Sameer Agarwalfaf88a12012-09-26 10:38:20 -070082\item Fixed the camera projection model in Ceres' implementation of
83 Snavely's camera model. (Ricardo Martin)
84\end{itemize}
85
86
Sameer Agarwal3e3b8922012-07-19 10:34:16 -070087\section*{1.3.0}
88\subsection{New Features}
89\begin{itemize}
Sameer Agarwal17624202012-08-22 10:01:31 -070090\item Android Port (Scott Ettinger also contributed to the port)
Sameer Agarwal3e3b8922012-07-19 10:34:16 -070091\item Windows port. (Changchang Wu and Pierre Moulon also contributed to the port)
Sameer Agarwal17624202012-08-22 10:01:31 -070092\item New subspace Dogleg Solver. (Markus Moll)
93\item Trust region algorithm now supports the option of non-monotonic steps.
94\item New loss functions \texttt{ArcTanLossFunction,
95 TolerantLossFunction} and \texttt{ComposedLossFunction}. (James Roseborough).
96\item New \texttt{DENSE\_NORMAL\_CHOLESKY} linear solver, which uses Eigen's
Sameer Agarwal122cf832012-08-24 16:28:27 -070097 LDLT factorization on the normal equations.
Sameer Agarwal98bf14d2012-08-30 10:26:44 -070098\item Cached symbolic factorization when using \texttt{CXSparse}.
99 (Petter Strandark)
Sameer Agarwal0b776b52012-08-30 15:26:17 -0700100\item New example \texttt{nist.cc} and data from the NIST non-linear
101 regression test suite. (Thanks to Douglas Bates for suggesting this.)
Sameer Agarwal17624202012-08-22 10:01:31 -0700102\item The traditional Dogleg solver now uses an elliptical trust
103 region (Markus Moll)
104\item Support for returning initial and final gradients \& Jacobians.
105\item Gradient computation support in the evaluators, with an eye
106 towards developing first order/gradient based solvers.
Sameer Agarwal3e3b8922012-07-19 10:34:16 -0700107\item A better way to compute \texttt{Solver::Summary::fixed\_cost}. (Markus Moll)
Sameer Agarwal122cf832012-08-24 16:28:27 -0700108\item \texttt{CMake} support for building documentation, separate examples,
Sameer Agarwal17624202012-08-22 10:01:31 -0700109 installing and uninstalling the library and Gerrit hooks (Arnaud
110 Gelas)
Sameer Agarwal122cf832012-08-24 16:28:27 -0700111\item \texttt{SuiteSparse4} support (Markus Moll)
Sameer Agarwal17624202012-08-22 10:01:31 -0700112\item Support for building Ceres without \texttt{TR1} (This leads to
113 slightly slower \texttt{DENSE\_SCHUR} and \texttt{SPARSE\_SCHUR} solvers).
114\item \texttt{BALProblem} can now write a problem back to disk.
Sameer Agarwal8b641402012-08-29 05:41:22 -0700115\item \texttt{bundle\_adjuster} now allows the user to normalize and perturb the
Sameer Agarwal17624202012-08-22 10:01:31 -0700116 problem before solving.
117\item Solver progress logging to file.
118\item Added \texttt{Program::ToString} and
119 \texttt{ParameterBlock::ToString} to help with debugging.
120\item Ability to build Ceres as a shared library (MacOS and Linux only), associated versioning and build release script changes.
Sameer Agarwal3e3b8922012-07-19 10:34:16 -0700121\item Portable floating point classification API.
122\end{itemize}
123
124\subsection{Bug Fixes}
125\begin{itemize}
Sameer Agarwal0b776b52012-08-30 15:26:17 -0700126\item Fix how invalid step evaluations are handled.
127\item Change the slop handling around zero for model cost changes to use
128relative tolerances rather than absolute tolerances.
129\item Fix an inadvertant integer to bool conversion. (Petter Strandmark)
Sameer Agarwal8b641402012-08-29 05:41:22 -0700130\item Do not link to \texttt{libgomp} when building on
131 windows. (Petter Strandmark)
Sameer Agarwal98bf14d2012-08-30 10:26:44 -0700132\item Include \texttt{gflags.h} in \texttt{test\_utils.cc}. (Petter
Sameer Agarwal8b641402012-08-29 05:41:22 -0700133 Strandmark)
134\item Use standard random number generation routines. (Petter Strandmark)
Sameer Agarwal17624202012-08-22 10:01:31 -0700135\item \texttt{TrustRegionMinimizer} does not implicitly negate the
136 steps that it takes. (Markus Moll)
Sameer Agarwal8b641402012-08-29 05:41:22 -0700137\item Diagonal scaling allows for equal upper and lower bounds. (Markus Moll)
Sameer Agarwal17624202012-08-22 10:01:31 -0700138\item TrustRegionStrategy does not misuse LinearSolver:Summary anymore.
139\item Fix Eigen3 Row/Column Major storage issue. (Lena Gieseke)
140\item QuaternionToAngleAxis now guarantees an angle in $[-\pi, \pi]$. (Guoxuan Zhang)
141\item Added a workaround for a compiler bug in the Android NDK to the
142 Schur eliminator.
143\item The sparse linear algebra library is only logged in
144 Summary::FullReport if it is used.
145\item Rename the macro \texttt{CERES\_DONT\_HAVE\_PROTOCOL\_BUFFERS}
146 to \texttt{CERES\_NO\_PROTOCOL\_BUFFERS} for consistency.
147\item Fix how static structure detection for the Schur eliminator logs
148 its results.
149\item Correct example code in the documentation. (Petter Strandmark)
150\item Fix \texttt{fpclassify.h} to work with the Android NDK and STLport.
151\item Fix a memory leak in the \texttt{levenber\_marquardt\_strategy\_test.cc}
152\item Fix an early return bug in the Dogleg solver. (Markus Moll)
153\item Zero initialize Jets.
154\item Moved \texttt{internal/ceres/mock\_log.h} to \texttt{internal/ceres/gmock/mock-log.h}
155\item Unified file path handling in tests.
156\item \texttt{data\_fitting.cc} includes \texttt{gflags}
157\item Renamed Ceres' Mutex class and associated macros to avoid
158 namespace conflicts.
159\item Close the BAL problem file after reading it (Markus Moll)
Sameer Agarwal3e3b8922012-07-19 10:34:16 -0700160\item Fix IsInfinite on Jets.
161\item Drop alignment requirements for Jets.
162\item Fixed Jet to integer comparison. (Keith Leung)
163\item Fix use of uninitialized arrays. (Sebastian Koch \& Markus Moll)
164\item Conditionally compile gflag dependencies.(Casey Goodlett)
Sameer Agarwal122cf832012-08-24 16:28:27 -0700165\item Add \texttt{data\_fitting.cc } to the examples \texttt{CMake} file.
Sameer Agarwal3e3b8922012-07-19 10:34:16 -0700166\end{itemize}
167
Sameer Agarwal57a34582012-06-24 12:42:36 -0700168\section*{1.2.3}
169\subsection{Bug Fixes}
170\begin{itemize}
171\item \texttt{suitesparse\_test} is enabled even when \texttt{-DSUITESPARSE=OFF}.
172\item \texttt{FixedArray} internal struct did not respect \texttt{Eigen}
Sameer Agarwal3e3b8922012-07-19 10:34:16 -0700173 alignment requirements (Koichi Akabe \& Stephan Kassemeyer).
Sameer Agarwal57a34582012-06-24 12:42:36 -0700174\item Fixed \texttt{quadratic.cc} documentation and code mismatch
Sameer Agarwal3e3b8922012-07-19 10:34:16 -0700175 (Nick Lewycky).
Sameer Agarwal57a34582012-06-24 12:42:36 -0700176\end{itemize}
Keir Mierle29937702012-06-19 00:39:32 -0700177\section*{1.2.2}
178\subsection{Bug Fixes}
179\begin{itemize}
Sameer Agarwal3e3b8922012-07-19 10:34:16 -0700180\item Fix constant parameter blocks, and other minor fixes (Markus Moll)
Sameer Agarwal57a34582012-06-24 12:42:36 -0700181\item Fix alignment issues when combining \texttt{Jet} and
182 \texttt{FixedArray} in automatic differeniation.
183\item Remove obsolete \texttt{build\_defs} file.
Keir Mierle29937702012-06-19 00:39:32 -0700184\end{itemize}
Sameer Agarwal97fb6d92012-06-17 10:08:19 -0700185\section*{1.2.1}
186\subsection{New Features}
187\begin{itemize}
Keir Mierle64f14102012-06-18 00:57:59 -0700188\item Powell's Dogleg solver
189\item Documentation now has a brief overview of Trust Region methods and how the Levenberg-Marquardt and Dogleg methods work.
Sameer Agarwal97fb6d92012-06-17 10:08:19 -0700190\end{itemize}
191\subsection{Bug Fixes}
192\begin{itemize}
Sameer Agarwal3e3b8922012-07-19 10:34:16 -0700193\item Destructor for \texttt{TrustRegionStrategy} was not virtual (Markus Moll)
194\item Invalid \texttt{DCHECK} in \texttt{suitesparse.cc} (Markus Moll)
195\item Iteration callbacks were not properly invoked (Luis Alberto Zarrabeiti)
Keir Mierle64f14102012-06-18 00:57:59 -0700196\item Logging level changes in ConjugateGradientsSolver
197\item VisibilityBasedPreconditioner setup does not account for skipped camera pairs. This was debugging code.
198\item Enable SSE support on MacOS
Sameer Agarwal3e3b8922012-07-19 10:34:16 -0700199\item \texttt{system\_test} was taking too long and too much memory (Koichi Akabe)
Sameer Agarwal97fb6d92012-06-17 10:08:19 -0700200\end{itemize}
Sameer Agarwal8ed29a72012-06-07 17:04:25 -0700201\section*{1.2.0}
202\subsection{New Features}
203\begin{itemize}
204\item \texttt{CXSparse} support.
205\item Block oriented fill reducing orderings. This
206reduces the factorization time for sparse
207\texttt{CHOLMOD} significantly.
208\item New Trust region loop with support for multiple
209trust region step strategies. Currently only Levenberg-Marquardt is supported, but this refactoring opens the door for Dog-leg, Stiehaug and others.
Sameer Agarwal122cf832012-08-24 16:28:27 -0700210\item \texttt{CMake} file restructuring. Builds in \texttt{Release} mode by default, and now has platform specific tuning flags.
Sameer Agarwal8ed29a72012-06-07 17:04:25 -0700211\item Re-organized documentation. No new content, but better organization.
212\end{itemize}
213
214\subsection{Bug Fixes}
215\begin{itemize}
216\item Fixed integer overflow bug in \texttt{block\_random\_access\_sparse\_matrix.cc}.
217\item Renamed some macros to prevent name conflicts.
218\item Fixed incorrent input to \texttt{StateUpdatingCallback}.
219\item Fixes to AutoDiff tests.
220\item Various internal cleanups.
221\end{itemize}
222
223\section*{1.1.1}
224\subsection{Bug Fixes}
225\begin{itemize}
Sameer Agarwal3e3b8922012-07-19 10:34:16 -0700226\item Fix a bug in the handling of constant blocks. (Louis Simard)
Sameer Agarwal8ed29a72012-06-07 17:04:25 -0700227\item Add an optional lower bound to the Levenberg-Marquardt regularizer to prevent oscillating between well and ill posed linear problems.
228\item Some internal refactoring and test fixes.
229\end{itemize}
230\section{1.1.0}
231\subsection{New Features}
232\begin{itemize}
233\item New iterative linear solver for general sparse problems - \texttt{CGNR} and a block Jacobi preconditioner for it.
234\item Changed the semantics of how \texttt{SuiteSparse} dependencies are checked and used. Now \texttt{SuiteSparse} is built by default, only if all of its dependencies are present.
235\item Automatic differentiation now supports dynamic number of residuals.
236\item Support for writing the linear least squares problems to disk in text format so that they can loaded into \texttt{MATLAB}.
237\item Linear solver results are now checked for nan and infinities.
238\item Added \texttt{.gitignore} file.
239\item A better more robust build system.
240\end{itemize}
241
242\subsection{Bug Fixes}
243\begin{itemize}
244\item Fixed a strict weak ordering bug in the schur ordering.
245\item Grammar and typos in the documents and code comments.
246\item Fixed tests which depended on exact equality between floating point values.
247\end{itemize}
248\section*{1.0.0}
Keir Mierle64f14102012-06-18 00:57:59 -0700249Initial Release.