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