aboutsummaryrefslogtreecommitdiff
path: root/docs/source/features.rst
diff options
context:
space:
mode:
Diffstat (limited to 'docs/source/features.rst')
-rw-r--r--docs/source/features.rst92
1 files changed, 92 insertions, 0 deletions
diff --git a/docs/source/features.rst b/docs/source/features.rst
new file mode 100644
index 0000000..50f22e7
--- /dev/null
+++ b/docs/source/features.rst
@@ -0,0 +1,92 @@
+========
+Features
+========
+.. _chapter-features:
+
+* **Code Quality** - Ceres Solver has been used in production at
+ Google for more than three years now. It is used to solve a wide
+ variety of problems, both in size and complexity. The code runs on
+ Google's data centers, desktops and on cellphones. It is clean,
+ extensively tested and well documented code that is actively
+ developed and supported.
+
+* **Modeling API** - It is rarely the case that one starts with the
+ exact and complete formulation of the problem that one is trying to
+ solve. Ceres's modeling API has been designed so that the user can
+ easily build and modify the objective function, one term at a
+ time. And to do so without worrying about how the solver is going to
+ deal with the resulting changes in the sparsity/structure of the
+ underlying problem. Indeed we take great care to separate the
+ modeling of the optimization problem from solving it. The two can be
+ done more or less completely independently of each other.
+
+ - **Derivatives** Supplying derivatives is perhaps the most tedious
+ and error prone part of using an optimization library. Ceres
+ ships with `automatic`_ and `numeric`_ differentiation. So you
+ never have to compute derivatives by hand (unless you really want
+ to). Not only this, Ceres allows you to mix automatic, numeric and
+ analytical derivatives in any combination that you want.
+
+ - **Robust Loss Functions** Most non-linear least squares problems
+ involve data. If there is data, there will be outliers. Ceres
+ allows the user to *shape* their residuals using robust loss
+ functions to reduce the influence of outliers.
+
+ - **Local Parameterization** In many cases, some parameters lie on a
+ manifold other than Euclidean space, e.g., rotation matrices. In
+ such cases, the user can specify the geometry of the local tangent
+ space by specifying a LocalParameterization object.
+
+* **Solver Choice** Depending on the size, sparsity structure, time &
+ memory budgets, and solution quality requiremnts, different
+ optimization algorithms will suit different needs. To this end,
+ Ceres Solver comes with a variety of optimization algorithms, some
+ of them the result of the author's own research.
+
+ - **Trust Region Solvers** - Ceres supports Levenberg-Marquardt,
+ Powell's Dogleg, and Subspace dogleg methods. The key
+ computational cost in all of these methods is the solution of a
+ linear system. To this end Ceres ships with a variety of linear
+ solvers - dense QR and dense Cholesky factorization (using
+ `Eigen`_ or `LAPACK`_) for dense problems, sparse Cholesky
+ factorization (`SuiteSparse`_ or `CXSparse`_) for large sparse
+ problems custom Schur complement based dense, sparse, and
+ iterative linear solvers for `bundle adjustment`_ problems.
+
+ - **Line Search Solvers** - When the problem size is so large that
+ storing and factoring the Jacobian is not feasible or a low
+ accuracy solution is required cheaply, Ceres offers a number of
+ line search based algorithms. This includes a number of variants
+ of Non-linear Conjugate Gradients, BFGS and LBFGS.
+
+* **Speed** - Ceres code has been extensively optimized, with C++
+ templating, hand written linear algebra routines and OpenMP based
+ multithreading of the Jacobian evaluation and the linear solvers.
+
+* **Solution Quality** Ceres is the best performing solver on the NIST
+ problem set used by Mondragon and Borchers for benchmarking
+ non-linear least squares solvers.
+
+* **Covariance estimation** - Evaluate the sensitivity/uncertainty of
+ the solution by evaluating all or part of the covariance
+ matrix. Ceres is one of the few solvers that allows you to to do
+ this analysis at scale.
+
+* **Community** Since its release as an open source software, Ceres
+ has developed an active developer community that contributes new
+ features, bug fixes and support.
+
+* **Portability** - Runs on *Linux*, *Windows*, *Mac OS X*, *Android*
+ *and iOS*.
+
+* **BSD Licensed** The BSD license offers the flexibility to ship your
+ application
+
+.. _solution quality: https://groups.google.com/forum/#!topic/ceres-solver/UcicgMPgbXw
+.. _bundle adjustment: http://en.wikipedia.org/wiki/Bundle_adjustment
+.. _SuiteSparse: http://www.cise.ufl.edu/research/sparse/SuiteSparse/
+.. _Eigen: http://eigen.tuxfamily.org/
+.. _LAPACK: http://www.netlib.org/lapack/
+.. _CXSparse: https://www.cise.ufl.edu/research/sparse/CXSparse/
+.. _automatic: http://en.wikipedia.org/wiki/Automatic_differentiation
+.. _numeric: http://en.wikipedia.org/wiki/Numerical_differentiation