Home | History | Annotate | Download | only in source
      1 ========
      2 Features
      3 ========
      4 .. _chapter-features:
      5 
      6 * **Code Quality** - Ceres Solver has been used in production at
      7   Google for more than three years now. It is used to solve a wide
      8   variety of problems, both in size and complexity. The code runs on
      9   Google's data centers, desktops and on cellphones. It is clean,
     10   extensively tested and well documented code that is actively
     11   developed and supported.
     12 
     13 * **Modeling API** - It is rarely the case that one starts with the
     14   exact and complete formulation of the problem that one is trying to
     15   solve. Ceres's modeling API has been designed so that the user can
     16   easily build and modify the objective function, one term at a
     17   time. And to do so without worrying about how the solver is going to
     18   deal with the resulting changes in the sparsity/structure of the
     19   underlying problem. Indeed we take great care to separate the
     20   modeling of the optimization problem from solving it. The two can be
     21   done more or less completely independently of each other.
     22 
     23   - **Derivatives** Supplying derivatives is perhaps the most tedious
     24     and error prone part of using an optimization library.  Ceres
     25     ships with `automatic`_ and `numeric`_ differentiation. So you
     26     never have to compute derivatives by hand (unless you really want
     27     to). Not only this, Ceres allows you to mix automatic, numeric and
     28     analytical derivatives in any combination that you want.
     29 
     30   - **Robust Loss Functions** Most non-linear least squares problems
     31     involve data. If there is data, there will be outliers. Ceres
     32     allows the user to *shape* their residuals using robust loss
     33     functions to reduce the influence of outliers.
     34 
     35   - **Local Parameterization** In many cases, some parameters lie on a
     36     manifold other than Euclidean space, e.g., rotation matrices. In
     37     such cases, the user can specify the geometry of the local tangent
     38     space by specifying a LocalParameterization object.
     39 
     40 * **Solver Choice** Depending on the size, sparsity structure, time &
     41   memory budgets, and solution quality requiremnts, different
     42   optimization algorithms will suit different needs. To this end,
     43   Ceres Solver comes with a variety of optimization algorithms, some
     44   of them the result of the author's own research.
     45 
     46   - **Trust Region Solvers** - Ceres supports Levenberg-Marquardt,
     47     Powell's Dogleg, and Subspace dogleg methods. The key
     48     computational cost in all of these methods is the solution of a
     49     linear system. To this end Ceres ships with a variety of linear
     50     solvers - dense QR and dense Cholesky factorization (using
     51     `Eigen`_ or `LAPACK`_) for dense problems, sparse Cholesky
     52     factorization (`SuiteSparse`_ or `CXSparse`_) for large sparse
     53     problems custom Schur complement based dense, sparse, and
     54     iterative linear solvers for `bundle adjustment`_ problems.
     55 
     56   - **Line Search Solvers** - When the problem size is so large that
     57     storing and factoring the Jacobian is not feasible or a low
     58     accuracy solution is required cheaply, Ceres offers a number of
     59     line search based algorithms. This includes a number of variants
     60     of Non-linear Conjugate Gradients, BFGS and LBFGS.
     61 
     62 * **Speed** - Ceres code has been extensively optimized, with C++
     63   templating, hand written linear algebra routines and OpenMP based
     64   multithreading of the Jacobian evaluation and the linear solvers.
     65 
     66 * **Solution Quality** Ceres is the best performing solver on the NIST
     67   problem set used by Mondragon and Borchers for benchmarking
     68   non-linear least squares solvers.
     69 
     70 * **Covariance estimation** - Evaluate the sensitivity/uncertainty of
     71   the solution by evaluating all or part of the covariance
     72   matrix. Ceres is one of the few solvers that allows you to to do
     73   this analysis at scale.
     74 
     75 * **Community** Since its release as an open source software, Ceres
     76   has developed an active developer community that contributes new
     77   features, bug fixes and support.
     78 
     79 * **Portability** - Runs on *Linux*, *Windows*, *Mac OS X*, *Android*
     80   *and iOS*.
     81 
     82 * **BSD Licensed** The BSD license offers the flexibility to ship your
     83   application
     84 
     85 .. _solution quality: https://groups.google.com/forum/#!topic/ceres-solver/UcicgMPgbXw
     86 .. _bundle adjustment: http://en.wikipedia.org/wiki/Bundle_adjustment
     87 .. _SuiteSparse: http://www.cise.ufl.edu/research/sparse/SuiteSparse/
     88 .. _Eigen: http://eigen.tuxfamily.org/
     89 .. _LAPACK: http://www.netlib.org/lapack/
     90 .. _CXSparse: https://www.cise.ufl.edu/research/sparse/CXSparse/
     91 .. _automatic: http://en.wikipedia.org/wiki/Automatic_differentiation
     92 .. _numeric: http://en.wikipedia.org/wiki/Numerical_differentiation
     93