%!TEX root = ceres-solver.tex

\chapter{Version History}
\section*{1.4.0}
\subsection{API Changes}
The new ordering API breaks existing code. Here the common case fixes.
\subsubsection{Before}
\begin{minted}[mathescape]{c++}
options.linear_solver_type = ceres::DENSE_SCHUR
options.ordering_type = ceres::SCHUR
\end{minted}
\subsubsection{After}
\begin{minted}[mathescape]{c++}
options.linear_solver_type = ceres::DENSE_SCHUR
\end{minted}
\subsubsection{Before}
\begin{minted}[mathescape]{c++}
options.linear_solver_type = ceres::DENSE_SCHUR;
options.ordering_type = ceres::USER;
for (int i = 0; i < num_points; ++i) {
  options.ordering.push_back(my_points[i])
}
for (int i = 0; i < num_cameras; ++i) {
  options.ordering.push_back(my_cameras[i])
}
options.num_eliminate_blocks = num_points;
\end{minted}
\subsubsection{After}
\begin{minted}[mathescape]{c++}
options.linear_solver_type = ceres::DENSE_SCHUR;
options.ordering = new ceres::ParameterBlockOrdering;
for (int i = 0; i < num_points; ++i) {
  options.linear_solver_ordering->AddElementToGroup(my_points[i], 0);
}
for (int i = 0; i < num_cameras; ++i) {
  options.linear_solver_ordering->AddElementToGroup(my_cameras[i], 1);
}
\end{minted}
\subsection{New Features}
\begin{itemize}
\item A new richer, more expressive and consistent API for ordering
  parameter blocks.
\item A non-linear generalization of Ruhe \& Wedin's Algorithm
  II. This allows the user to use variable projection on separable and
  non-separable non-linear least squares problems. With
  multithreading, this results in significant improvements to the
  convergence behavior of the solver at a small increase in run time.
\item An image denoising example using fields of experts. (Petter
  Strandmark)
\item Defines for Ceres version and ABI version.
\item Higher precision timer code where available. (Petter Strandmark)
\item Example Makefile for users of Ceres.
\item IterationSummary now informs the user when the step is a
  non-monotonic step.
\end{itemize}
\subsection{Bug Fixes}
\begin{itemize}
\item Various fixes to \texttt{nist.cc} (Markus Moll)
\item Fixed a jacobian scaling bug.
\item Numerically robust computation of \texttt{model\_cost\_change}.
\item Signed comparison compiler warning fixes (Ricardo Martin)
\item Various compiler warning fixes all over.
\item Inclusion guard fixes (Petter Strandmark)
\item Segfault in test code (Sergey Popov)
\item Replaced EXPECT/ASSERT\_DEATH with the more portable
  EXPECT\_DEATH\_IF]\_SUPPORTED macros.
\item Fixed the camera projection model in Ceres' implementation of
  Snavely's camera model. (Ricardo Martin)
\end{itemize}


\section*{1.3.0}
\subsection{New Features}
\begin{itemize}
\item Android Port (Scott Ettinger also contributed to the port)
\item Windows port. (Changchang Wu and Pierre Moulon also contributed to the port)
\item New subspace Dogleg Solver. (Markus Moll)
\item Trust region algorithm now supports the option of non-monotonic steps.
\item New loss functions \texttt{ArcTanLossFunction,
    TolerantLossFunction} and \texttt{ComposedLossFunction}. (James Roseborough).
\item New \texttt{DENSE\_NORMAL\_CHOLESKY} linear solver, which uses Eigen's
  LDLT factorization on the normal equations.
\item Cached symbolic factorization when using \texttt{CXSparse}.
  (Petter Strandark)
\item New example \texttt{nist.cc} and data from the NIST non-linear
  regression test suite. (Thanks to Douglas Bates for suggesting this.)
\item The traditional Dogleg solver now uses an elliptical trust
  region (Markus Moll)
\item Support for returning initial and final gradients \& Jacobians.
\item Gradient computation support in the evaluators, with an eye
  towards developing first order/gradient based solvers.
\item A better way to compute \texttt{Solver::Summary::fixed\_cost}. (Markus Moll)
\item \texttt{CMake} support for building documentation, separate examples,
  installing and uninstalling the library and Gerrit hooks (Arnaud
  Gelas)
\item \texttt{SuiteSparse4} support (Markus Moll)
\item Support for building Ceres without \texttt{TR1} (This leads to
  slightly slower \texttt{DENSE\_SCHUR} and \texttt{SPARSE\_SCHUR} solvers).
\item \texttt{BALProblem} can now write a problem back to disk.
\item \texttt{bundle\_adjuster} now allows the user to normalize and perturb the
  problem before solving.
\item Solver progress logging to file.
\item Added \texttt{Program::ToString} and
  \texttt{ParameterBlock::ToString}  to help with debugging.
\item Ability to build Ceres as a shared library (MacOS and Linux only), associated versioning and build release script changes.
\item Portable floating point classification API.
\end{itemize}

\subsection{Bug Fixes}
\begin{itemize}
\item Fix how invalid step evaluations are handled.
\item Change the slop handling around zero for model cost changes to use
relative tolerances rather than absolute tolerances.
\item Fix an inadvertant integer to bool conversion. (Petter Strandmark)
\item Do not link to \texttt{libgomp} when building on
  windows. (Petter Strandmark)
\item Include \texttt{gflags.h} in \texttt{test\_utils.cc}. (Petter
  Strandmark)
\item Use standard random number generation routines. (Petter Strandmark)
\item \texttt{TrustRegionMinimizer} does not implicitly negate the
  steps that it takes. (Markus Moll)
\item Diagonal scaling allows for equal upper and lower bounds. (Markus Moll)
\item TrustRegionStrategy does not misuse LinearSolver:Summary anymore.
\item Fix Eigen3 Row/Column Major storage issue. (Lena Gieseke)
\item QuaternionToAngleAxis now guarantees an angle in $[-\pi, \pi]$. (Guoxuan Zhang)
\item Added a workaround for a compiler bug in the Android NDK to the
  Schur eliminator.
\item The sparse linear algebra library is only logged in
  Summary::FullReport if it is used.
\item Rename the macro \texttt{CERES\_DONT\_HAVE\_PROTOCOL\_BUFFERS}
  to \texttt{CERES\_NO\_PROTOCOL\_BUFFERS} for consistency.
\item Fix how static structure detection for the Schur eliminator logs
  its results.
\item Correct example code in the documentation. (Petter Strandmark)
\item Fix \texttt{fpclassify.h} to work with the Android NDK and STLport.
\item Fix a memory leak in the \texttt{levenber\_marquardt\_strategy\_test.cc}
\item Fix an early return bug in the Dogleg solver. (Markus Moll)
\item Zero initialize Jets.
\item Moved \texttt{internal/ceres/mock\_log.h} to \texttt{internal/ceres/gmock/mock-log.h}
\item Unified file path handling in tests.
\item \texttt{data\_fitting.cc} includes \texttt{gflags}
\item Renamed Ceres' Mutex class and associated macros to avoid
  namespace conflicts.
\item Close the BAL problem file after reading it (Markus Moll)
\item Fix IsInfinite on Jets.
\item Drop alignment requirements for Jets.
\item Fixed Jet to integer comparison. (Keith Leung)
\item Fix use of uninitialized arrays. (Sebastian Koch \& Markus Moll)
\item Conditionally compile gflag dependencies.(Casey Goodlett)
\item Add \texttt{data\_fitting.cc } to the examples \texttt{CMake} file.
\end{itemize}

\section*{1.2.3}
\subsection{Bug Fixes}
\begin{itemize}
\item \texttt{suitesparse\_test} is enabled even when \texttt{-DSUITESPARSE=OFF}.
\item \texttt{FixedArray} internal struct did not respect \texttt{Eigen}
  alignment requirements (Koichi Akabe \& Stephan Kassemeyer).
\item Fixed \texttt{quadratic.cc} documentation and code mismatch
  (Nick Lewycky).
\end{itemize}
\section*{1.2.2}
\subsection{Bug Fixes}
\begin{itemize}
\item Fix constant parameter blocks, and other minor fixes (Markus Moll)
\item Fix alignment issues when combining \texttt{Jet} and
  \texttt{FixedArray} in automatic differeniation.
\item Remove obsolete \texttt{build\_defs} file.
\end{itemize}
\section*{1.2.1}
\subsection{New Features}
\begin{itemize}
\item Powell's Dogleg solver
\item Documentation now has a brief overview of Trust Region methods and how the Levenberg-Marquardt and Dogleg methods work.
\end{itemize}
\subsection{Bug Fixes}
\begin{itemize}
\item Destructor for \texttt{TrustRegionStrategy} was not virtual (Markus Moll)
\item Invalid \texttt{DCHECK} in \texttt{suitesparse.cc} (Markus Moll)
\item Iteration callbacks were not properly invoked (Luis Alberto Zarrabeiti)
\item Logging level changes in ConjugateGradientsSolver
\item VisibilityBasedPreconditioner setup does not account for skipped camera pairs. This was debugging code.
\item Enable SSE support on MacOS
\item \texttt{system\_test} was taking too long and too much memory (Koichi Akabe)
\end{itemize}
\section*{1.2.0}
\subsection{New Features}
\begin{itemize}
\item \texttt{CXSparse} support.
\item Block oriented fill reducing orderings. This
reduces the factorization time for sparse
\texttt{CHOLMOD} significantly.
\item New Trust region loop with support for multiple
trust region step strategies. Currently only Levenberg-Marquardt is supported, but this refactoring opens the door for Dog-leg, Stiehaug and others.
\item \texttt{CMake} file restructuring.  Builds in \texttt{Release} mode by default, and now has platform specific tuning flags.
\item Re-organized documentation. No new content, but better organization.
\end{itemize}

\subsection{Bug Fixes}
\begin{itemize}
\item Fixed integer overflow bug in \texttt{block\_random\_access\_sparse\_matrix.cc}.
\item Renamed some macros to prevent name conflicts.
\item Fixed incorrent input to \texttt{StateUpdatingCallback}.
\item Fixes to AutoDiff tests.
\item Various internal cleanups.
\end{itemize}

\section*{1.1.1}
\subsection{Bug Fixes}
\begin{itemize}
\item Fix a bug in the handling of constant blocks. (Louis Simard)
\item Add an optional lower bound to the Levenberg-Marquardt regularizer to prevent oscillating between well and ill posed linear problems.
\item Some internal refactoring and test fixes.
\end{itemize}
\section{1.1.0}
\subsection{New Features}
\begin{itemize}
\item New iterative linear solver for general sparse problems - \texttt{CGNR} and a block Jacobi preconditioner for it.
\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.
\item Automatic differentiation now supports dynamic number of residuals.
\item Support for writing the linear least squares problems to disk in text format so that they can loaded into \texttt{MATLAB}.
\item Linear solver results are now checked for nan and infinities.
\item Added \texttt{.gitignore} file.
\item A better more robust build system.
\end{itemize}

\subsection{Bug Fixes}
\begin{itemize}
\item Fixed a strict weak ordering bug in the schur ordering.
\item Grammar and typos in the documents and code comments.
\item Fixed tests which depended on exact equality between floating point values.
\end{itemize}
\section*{1.0.0}
Initial Release.
