types.h revision 79397c21138f54fcff6ec067b44b847f1f7e0e98
10ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong// Ceres Solver - A fast non-linear least squares minimizer 20ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong// Copyright 2010, 2011, 2012 Google Inc. All rights reserved. 30ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong// http://code.google.com/p/ceres-solver/ 40ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong// 50ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong// Redistribution and use in source and binary forms, with or without 60ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong// modification, are permitted provided that the following conditions are met: 70ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong// 80ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong// * Redistributions of source code must retain the above copyright notice, 90ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong// this list of conditions and the following disclaimer. 100ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong// * Redistributions in binary form must reproduce the above copyright notice, 110ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong// this list of conditions and the following disclaimer in the documentation 120ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong// and/or other materials provided with the distribution. 130ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong// * Neither the name of Google Inc. nor the names of its contributors may be 140ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong// used to endorse or promote products derived from this software without 150ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong// specific prior written permission. 160ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong// 170ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 180ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 190ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 200ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE 210ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 220ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 230ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 240ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 250ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 260ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 270ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong// POSSIBILITY OF SUCH DAMAGE. 280ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong// 290ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong// Author: sameeragarwal@google.com (Sameer Agarwal) 300ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong// 310ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong// Enums and other top level class definitions. 320ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong// 330ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong// Note: internal/types.cc defines stringification routines for some 340ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong// of these enums. Please update those routines if you extend or 350ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong// remove enums from here. 360ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong 370ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong#ifndef CERES_PUBLIC_TYPES_H_ 380ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong#define CERES_PUBLIC_TYPES_H_ 390ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong 401d2624a10e2c559f8ba9ef89eaa30832c0a83a96Sascha Haeberling#include <string> 411d2624a10e2c559f8ba9ef89eaa30832c0a83a96Sascha Haeberling 420ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong#include "ceres/internal/port.h" 4379397c21138f54fcff6ec067b44b847f1f7e0e98Carlos Hernandez#include "ceres/internal/disable_warnings.h" 440ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong 450ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kongnamespace ceres { 460ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong 470ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong// Basic integer types. These typedefs are in the Ceres namespace to avoid 480ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong// conflicts with other packages having similar typedefs. 490ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kongtypedef int int32; 500ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong 510ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong// Argument type used in interfaces that can optionally take ownership 520ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong// of a passed in argument. If TAKE_OWNERSHIP is passed, the called 530ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong// object takes ownership of the pointer argument, and will call 540ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong// delete on it upon completion. 550ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kongenum Ownership { 560ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong DO_NOT_TAKE_OWNERSHIP, 570ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong TAKE_OWNERSHIP 580ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong}; 590ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong 600ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong// TODO(keir): Considerably expand the explanations of each solver type. 610ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kongenum LinearSolverType { 620ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong // These solvers are for general rectangular systems formed from the 630ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong // normal equations A'A x = A'b. They are direct solvers and do not 640ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong // assume any special problem structure. 650ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong 660ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong // Solve the normal equations using a dense Cholesky solver; based 670ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong // on Eigen. 680ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong DENSE_NORMAL_CHOLESKY, 690ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong 700ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong // Solve the normal equations using a dense QR solver; based on 710ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong // Eigen. 720ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong DENSE_QR, 730ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong 740ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong // Solve the normal equations using a sparse cholesky solver; requires 750ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong // SuiteSparse or CXSparse. 760ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong SPARSE_NORMAL_CHOLESKY, 770ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong 780ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong // Specialized solvers, specific to problems with a generalized 790ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong // bi-partitite structure. 800ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong 810ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong // Solves the reduced linear system using a dense Cholesky solver; 820ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong // based on Eigen. 830ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong DENSE_SCHUR, 840ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong 850ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong // Solves the reduced linear system using a sparse Cholesky solver; 860ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong // based on CHOLMOD. 870ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong SPARSE_SCHUR, 880ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong 890ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong // Solves the reduced linear system using Conjugate Gradients, based 900ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong // on a new Ceres implementation. Suitable for large scale 910ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong // problems. 920ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong ITERATIVE_SCHUR, 930ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong 940ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong // Conjugate gradients on the normal equations. 950ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong CGNR 960ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong}; 970ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong 980ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kongenum PreconditionerType { 990ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong // Trivial preconditioner - the identity matrix. 1000ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong IDENTITY, 1010ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong 1020ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong // Block diagonal of the Gauss-Newton Hessian. 1030ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong JACOBI, 1040ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong 10579397c21138f54fcff6ec067b44b847f1f7e0e98Carlos Hernandez // Note: The following three preconditioners can only be used with 10679397c21138f54fcff6ec067b44b847f1f7e0e98Carlos Hernandez // the ITERATIVE_SCHUR solver. They are well suited for Structure 10779397c21138f54fcff6ec067b44b847f1f7e0e98Carlos Hernandez // from Motion problems. 10879397c21138f54fcff6ec067b44b847f1f7e0e98Carlos Hernandez 1090ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong // Block diagonal of the Schur complement. This preconditioner may 1101d2624a10e2c559f8ba9ef89eaa30832c0a83a96Sascha Haeberling // only be used with the ITERATIVE_SCHUR solver. 1110ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong SCHUR_JACOBI, 1120ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong 1130ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong // Visibility clustering based preconditioners. 1140ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong // 11579397c21138f54fcff6ec067b44b847f1f7e0e98Carlos Hernandez // The following two preconditioners use the visibility structure of 11679397c21138f54fcff6ec067b44b847f1f7e0e98Carlos Hernandez // the scene to determine the sparsity structure of the 11779397c21138f54fcff6ec067b44b847f1f7e0e98Carlos Hernandez // preconditioner. This is done using a clustering algorithm. The 11879397c21138f54fcff6ec067b44b847f1f7e0e98Carlos Hernandez // available visibility clustering algorithms are described below. 11979397c21138f54fcff6ec067b44b847f1f7e0e98Carlos Hernandez // 12079397c21138f54fcff6ec067b44b847f1f7e0e98Carlos Hernandez // Note: Requires SuiteSparse. 1210ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong CLUSTER_JACOBI, 1220ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong CLUSTER_TRIDIAGONAL 1230ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong}; 1240ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong 12579397c21138f54fcff6ec067b44b847f1f7e0e98Carlos Hernandezenum VisibilityClusteringType { 12679397c21138f54fcff6ec067b44b847f1f7e0e98Carlos Hernandez // Canonical views algorithm as described in 12779397c21138f54fcff6ec067b44b847f1f7e0e98Carlos Hernandez // 12879397c21138f54fcff6ec067b44b847f1f7e0e98Carlos Hernandez // "Scene Summarization for Online Image Collections", Ian Simon, Noah 12979397c21138f54fcff6ec067b44b847f1f7e0e98Carlos Hernandez // Snavely, Steven M. Seitz, ICCV 2007. 13079397c21138f54fcff6ec067b44b847f1f7e0e98Carlos Hernandez // 13179397c21138f54fcff6ec067b44b847f1f7e0e98Carlos Hernandez // This clustering algorithm can be quite slow, but gives high 13279397c21138f54fcff6ec067b44b847f1f7e0e98Carlos Hernandez // quality clusters. The original visibility based clustering paper 13379397c21138f54fcff6ec067b44b847f1f7e0e98Carlos Hernandez // used this algorithm. 13479397c21138f54fcff6ec067b44b847f1f7e0e98Carlos Hernandez CANONICAL_VIEWS, 13579397c21138f54fcff6ec067b44b847f1f7e0e98Carlos Hernandez 13679397c21138f54fcff6ec067b44b847f1f7e0e98Carlos Hernandez // The classic single linkage algorithm. It is extremely fast as 13779397c21138f54fcff6ec067b44b847f1f7e0e98Carlos Hernandez // compared to CANONICAL_VIEWS, but can give slightly poorer 13879397c21138f54fcff6ec067b44b847f1f7e0e98Carlos Hernandez // results. For problems with large number of cameras though, this 13979397c21138f54fcff6ec067b44b847f1f7e0e98Carlos Hernandez // is generally a pretty good option. 14079397c21138f54fcff6ec067b44b847f1f7e0e98Carlos Hernandez // 14179397c21138f54fcff6ec067b44b847f1f7e0e98Carlos Hernandez // If you are using SCHUR_JACOBI preconditioner and have SuiteSparse 14279397c21138f54fcff6ec067b44b847f1f7e0e98Carlos Hernandez // available, CLUSTER_JACOBI and CLUSTER_TRIDIAGONAL in combination 14379397c21138f54fcff6ec067b44b847f1f7e0e98Carlos Hernandez // with the SINGLE_LINKAGE algorithm will generally give better 14479397c21138f54fcff6ec067b44b847f1f7e0e98Carlos Hernandez // results. 14579397c21138f54fcff6ec067b44b847f1f7e0e98Carlos Hernandez SINGLE_LINKAGE 14679397c21138f54fcff6ec067b44b847f1f7e0e98Carlos Hernandez}; 14779397c21138f54fcff6ec067b44b847f1f7e0e98Carlos Hernandez 1480ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kongenum SparseLinearAlgebraLibraryType { 1490ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong // High performance sparse Cholesky factorization and approximate 1500ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong // minimum degree ordering. 1510ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong SUITE_SPARSE, 1520ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong 15379397c21138f54fcff6ec067b44b847f1f7e0e98Carlos Hernandez // A lightweight replacment for SuiteSparse, which does not require 15479397c21138f54fcff6ec067b44b847f1f7e0e98Carlos Hernandez // a LAPACK/BLAS implementation. Consequently, its performance is 15579397c21138f54fcff6ec067b44b847f1f7e0e98Carlos Hernandez // also a bit lower than SuiteSparse. 15679397c21138f54fcff6ec067b44b847f1f7e0e98Carlos Hernandez CX_SPARSE, 15779397c21138f54fcff6ec067b44b847f1f7e0e98Carlos Hernandez 15879397c21138f54fcff6ec067b44b847f1f7e0e98Carlos Hernandez // Eigen's sparse linear algebra routines. In particular Ceres uses 15979397c21138f54fcff6ec067b44b847f1f7e0e98Carlos Hernandez // the Simplicial LDLT routines. 16079397c21138f54fcff6ec067b44b847f1f7e0e98Carlos Hernandez EIGEN_SPARSE 1610ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong}; 1620ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong 163399f7d09e0c45af54b77b4ab9508d6f23759b927Scott Ettingerenum DenseLinearAlgebraLibraryType { 164399f7d09e0c45af54b77b4ab9508d6f23759b927Scott Ettinger EIGEN, 165399f7d09e0c45af54b77b4ab9508d6f23759b927Scott Ettinger LAPACK 166399f7d09e0c45af54b77b4ab9508d6f23759b927Scott Ettinger}; 167399f7d09e0c45af54b77b4ab9508d6f23759b927Scott Ettinger 1680ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong// Logging options 1690ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong// The options get progressively noisier. 1700ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kongenum LoggingType { 1710ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong SILENT, 1720ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong PER_MINIMIZER_ITERATION 1730ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong}; 1740ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong 1751d2624a10e2c559f8ba9ef89eaa30832c0a83a96Sascha Haeberlingenum MinimizerType { 1761d2624a10e2c559f8ba9ef89eaa30832c0a83a96Sascha Haeberling LINE_SEARCH, 1771d2624a10e2c559f8ba9ef89eaa30832c0a83a96Sascha Haeberling TRUST_REGION 1781d2624a10e2c559f8ba9ef89eaa30832c0a83a96Sascha Haeberling}; 1791d2624a10e2c559f8ba9ef89eaa30832c0a83a96Sascha Haeberling 1801d2624a10e2c559f8ba9ef89eaa30832c0a83a96Sascha Haeberlingenum LineSearchDirectionType { 1811d2624a10e2c559f8ba9ef89eaa30832c0a83a96Sascha Haeberling // Negative of the gradient. 1821d2624a10e2c559f8ba9ef89eaa30832c0a83a96Sascha Haeberling STEEPEST_DESCENT, 1831d2624a10e2c559f8ba9ef89eaa30832c0a83a96Sascha Haeberling 1841d2624a10e2c559f8ba9ef89eaa30832c0a83a96Sascha Haeberling // A generalization of the Conjugate Gradient method to non-linear 1851d2624a10e2c559f8ba9ef89eaa30832c0a83a96Sascha Haeberling // functions. The generalization can be performed in a number of 1861d2624a10e2c559f8ba9ef89eaa30832c0a83a96Sascha Haeberling // different ways, resulting in a variety of search directions. The 1871d2624a10e2c559f8ba9ef89eaa30832c0a83a96Sascha Haeberling // precise choice of the non-linear conjugate gradient algorithm 1881d2624a10e2c559f8ba9ef89eaa30832c0a83a96Sascha Haeberling // used is determined by NonlinerConjuateGradientType. 1891d2624a10e2c559f8ba9ef89eaa30832c0a83a96Sascha Haeberling NONLINEAR_CONJUGATE_GRADIENT, 1901d2624a10e2c559f8ba9ef89eaa30832c0a83a96Sascha Haeberling 1911d2624a10e2c559f8ba9ef89eaa30832c0a83a96Sascha Haeberling // BFGS, and it's limited memory approximation L-BFGS, are quasi-Newton 1921d2624a10e2c559f8ba9ef89eaa30832c0a83a96Sascha Haeberling // algorithms that approximate the Hessian matrix by iteratively refining 1931d2624a10e2c559f8ba9ef89eaa30832c0a83a96Sascha Haeberling // an initial estimate with rank-one updates using the gradient at each 1941d2624a10e2c559f8ba9ef89eaa30832c0a83a96Sascha Haeberling // iteration. They are a generalisation of the Secant method and satisfy 1951d2624a10e2c559f8ba9ef89eaa30832c0a83a96Sascha Haeberling // the Secant equation. The Secant equation has an infinium of solutions 1961d2624a10e2c559f8ba9ef89eaa30832c0a83a96Sascha Haeberling // in multiple dimensions, as there are N*(N+1)/2 degrees of freedom in a 1971d2624a10e2c559f8ba9ef89eaa30832c0a83a96Sascha Haeberling // symmetric matrix but only N conditions are specified by the Secant 1981d2624a10e2c559f8ba9ef89eaa30832c0a83a96Sascha Haeberling // equation. The requirement that the Hessian approximation be positive 1991d2624a10e2c559f8ba9ef89eaa30832c0a83a96Sascha Haeberling // definite imposes another N additional constraints, but that still leaves 2001d2624a10e2c559f8ba9ef89eaa30832c0a83a96Sascha Haeberling // remaining degrees-of-freedom. (L)BFGS methods uniquely deteremine the 2011d2624a10e2c559f8ba9ef89eaa30832c0a83a96Sascha Haeberling // approximate Hessian by imposing the additional constraints that the 2021d2624a10e2c559f8ba9ef89eaa30832c0a83a96Sascha Haeberling // approximation at the next iteration must be the 'closest' to the current 2031d2624a10e2c559f8ba9ef89eaa30832c0a83a96Sascha Haeberling // approximation (the nature of how this proximity is measured is actually 2041d2624a10e2c559f8ba9ef89eaa30832c0a83a96Sascha Haeberling // the defining difference between a family of quasi-Newton methods including 2051d2624a10e2c559f8ba9ef89eaa30832c0a83a96Sascha Haeberling // (L)BFGS & DFP). (L)BFGS is currently regarded as being the best known 2061d2624a10e2c559f8ba9ef89eaa30832c0a83a96Sascha Haeberling // general quasi-Newton method. 2071d2624a10e2c559f8ba9ef89eaa30832c0a83a96Sascha Haeberling // 2081d2624a10e2c559f8ba9ef89eaa30832c0a83a96Sascha Haeberling // The principal difference between BFGS and L-BFGS is that whilst BFGS 2091d2624a10e2c559f8ba9ef89eaa30832c0a83a96Sascha Haeberling // maintains a full, dense approximation to the (inverse) Hessian, L-BFGS 2101d2624a10e2c559f8ba9ef89eaa30832c0a83a96Sascha Haeberling // maintains only a window of the last M observations of the parameters and 2111d2624a10e2c559f8ba9ef89eaa30832c0a83a96Sascha Haeberling // gradients. Using this observation history, the calculation of the next 2121d2624a10e2c559f8ba9ef89eaa30832c0a83a96Sascha Haeberling // search direction can be computed without requiring the construction of the 2131d2624a10e2c559f8ba9ef89eaa30832c0a83a96Sascha Haeberling // full dense inverse Hessian approximation. This is particularly important 2141d2624a10e2c559f8ba9ef89eaa30832c0a83a96Sascha Haeberling // for problems with a large number of parameters, where storage of an N-by-N 2151d2624a10e2c559f8ba9ef89eaa30832c0a83a96Sascha Haeberling // matrix in memory would be prohibitive. 2161d2624a10e2c559f8ba9ef89eaa30832c0a83a96Sascha Haeberling // 2171d2624a10e2c559f8ba9ef89eaa30832c0a83a96Sascha Haeberling // For more details on BFGS see: 2181d2624a10e2c559f8ba9ef89eaa30832c0a83a96Sascha Haeberling // 2191d2624a10e2c559f8ba9ef89eaa30832c0a83a96Sascha Haeberling // Broyden, C.G., "The Convergence of a Class of Double-rank Minimization 2201d2624a10e2c559f8ba9ef89eaa30832c0a83a96Sascha Haeberling // Algorithms,"; J. Inst. Maths. Applics., Vol. 6, pp 76–90, 1970. 2211d2624a10e2c559f8ba9ef89eaa30832c0a83a96Sascha Haeberling // 2221d2624a10e2c559f8ba9ef89eaa30832c0a83a96Sascha Haeberling // Fletcher, R., "A New Approach to Variable Metric Algorithms," 2231d2624a10e2c559f8ba9ef89eaa30832c0a83a96Sascha Haeberling // Computer Journal, Vol. 13, pp 317–322, 1970. 2241d2624a10e2c559f8ba9ef89eaa30832c0a83a96Sascha Haeberling // 2251d2624a10e2c559f8ba9ef89eaa30832c0a83a96Sascha Haeberling // Goldfarb, D., "A Family of Variable Metric Updates Derived by Variational 2261d2624a10e2c559f8ba9ef89eaa30832c0a83a96Sascha Haeberling // Means," Mathematics of Computing, Vol. 24, pp 23–26, 1970. 2271d2624a10e2c559f8ba9ef89eaa30832c0a83a96Sascha Haeberling // 2281d2624a10e2c559f8ba9ef89eaa30832c0a83a96Sascha Haeberling // Shanno, D.F., "Conditioning of Quasi-Newton Methods for Function 2291d2624a10e2c559f8ba9ef89eaa30832c0a83a96Sascha Haeberling // Minimization," Mathematics of Computing, Vol. 24, pp 647–656, 1970. 2301d2624a10e2c559f8ba9ef89eaa30832c0a83a96Sascha Haeberling // 2311d2624a10e2c559f8ba9ef89eaa30832c0a83a96Sascha Haeberling // For more details on L-BFGS see: 2321d2624a10e2c559f8ba9ef89eaa30832c0a83a96Sascha Haeberling // 2331d2624a10e2c559f8ba9ef89eaa30832c0a83a96Sascha Haeberling // Nocedal, J. (1980). "Updating Quasi-Newton Matrices with Limited 2341d2624a10e2c559f8ba9ef89eaa30832c0a83a96Sascha Haeberling // Storage". Mathematics of Computation 35 (151): 773–782. 2351d2624a10e2c559f8ba9ef89eaa30832c0a83a96Sascha Haeberling // 2361d2624a10e2c559f8ba9ef89eaa30832c0a83a96Sascha Haeberling // Byrd, R. H.; Nocedal, J.; Schnabel, R. B. (1994). 2371d2624a10e2c559f8ba9ef89eaa30832c0a83a96Sascha Haeberling // "Representations of Quasi-Newton Matrices and their use in 2381d2624a10e2c559f8ba9ef89eaa30832c0a83a96Sascha Haeberling // Limited Memory Methods". Mathematical Programming 63 (4): 2391d2624a10e2c559f8ba9ef89eaa30832c0a83a96Sascha Haeberling // 129–156. 2401d2624a10e2c559f8ba9ef89eaa30832c0a83a96Sascha Haeberling // 2411d2624a10e2c559f8ba9ef89eaa30832c0a83a96Sascha Haeberling // A general reference for both methods: 2421d2624a10e2c559f8ba9ef89eaa30832c0a83a96Sascha Haeberling // 2431d2624a10e2c559f8ba9ef89eaa30832c0a83a96Sascha Haeberling // Nocedal J., Wright S., Numerical Optimization, 2nd Ed. Springer, 1999. 2441d2624a10e2c559f8ba9ef89eaa30832c0a83a96Sascha Haeberling LBFGS, 2451d2624a10e2c559f8ba9ef89eaa30832c0a83a96Sascha Haeberling BFGS, 2461d2624a10e2c559f8ba9ef89eaa30832c0a83a96Sascha Haeberling}; 2471d2624a10e2c559f8ba9ef89eaa30832c0a83a96Sascha Haeberling 2481d2624a10e2c559f8ba9ef89eaa30832c0a83a96Sascha Haeberling// Nonliner conjugate gradient methods are a generalization of the 2491d2624a10e2c559f8ba9ef89eaa30832c0a83a96Sascha Haeberling// method of Conjugate Gradients for linear systems. The 2501d2624a10e2c559f8ba9ef89eaa30832c0a83a96Sascha Haeberling// generalization can be carried out in a number of different ways 2511d2624a10e2c559f8ba9ef89eaa30832c0a83a96Sascha Haeberling// leading to number of different rules for computing the search 2521d2624a10e2c559f8ba9ef89eaa30832c0a83a96Sascha Haeberling// direction. Ceres provides a number of different variants. For more 2531d2624a10e2c559f8ba9ef89eaa30832c0a83a96Sascha Haeberling// details see Numerical Optimization by Nocedal & Wright. 2541d2624a10e2c559f8ba9ef89eaa30832c0a83a96Sascha Haeberlingenum NonlinearConjugateGradientType { 2551d2624a10e2c559f8ba9ef89eaa30832c0a83a96Sascha Haeberling FLETCHER_REEVES, 25679397c21138f54fcff6ec067b44b847f1f7e0e98Carlos Hernandez POLAK_RIBIERE, 2571d2624a10e2c559f8ba9ef89eaa30832c0a83a96Sascha Haeberling HESTENES_STIEFEL, 2581d2624a10e2c559f8ba9ef89eaa30832c0a83a96Sascha Haeberling}; 2591d2624a10e2c559f8ba9ef89eaa30832c0a83a96Sascha Haeberling 2601d2624a10e2c559f8ba9ef89eaa30832c0a83a96Sascha Haeberlingenum LineSearchType { 2611d2624a10e2c559f8ba9ef89eaa30832c0a83a96Sascha Haeberling // Backtracking line search with polynomial interpolation or 2621d2624a10e2c559f8ba9ef89eaa30832c0a83a96Sascha Haeberling // bisection. 2631d2624a10e2c559f8ba9ef89eaa30832c0a83a96Sascha Haeberling ARMIJO, 2641d2624a10e2c559f8ba9ef89eaa30832c0a83a96Sascha Haeberling WOLFE, 2651d2624a10e2c559f8ba9ef89eaa30832c0a83a96Sascha Haeberling}; 2661d2624a10e2c559f8ba9ef89eaa30832c0a83a96Sascha Haeberling 2670ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong// Ceres supports different strategies for computing the trust region 2680ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong// step. 2690ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kongenum TrustRegionStrategyType { 2700ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong // The default trust region strategy is to use the step computation 2710ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong // used in the Levenberg-Marquardt algorithm. For more details see 2720ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong // levenberg_marquardt_strategy.h 2730ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong LEVENBERG_MARQUARDT, 2740ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong 2750ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong // Powell's dogleg algorithm interpolates between the Cauchy point 2760ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong // and the Gauss-Newton step. It is particularly useful if the 2770ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong // LEVENBERG_MARQUARDT algorithm is making a large number of 2780ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong // unsuccessful steps. For more details see dogleg_strategy.h. 2790ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong // 2800ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong // NOTES: 2810ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong // 2820ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong // 1. This strategy has not been experimented with or tested as 2830ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong // extensively as LEVENBERG_MARQUARDT, and therefore it should be 2840ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong // considered EXPERIMENTAL for now. 2850ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong // 2860ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong // 2. For now this strategy should only be used with exact 2870ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong // factorization based linear solvers, i.e., SPARSE_SCHUR, 2880ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong // DENSE_SCHUR, DENSE_QR and SPARSE_NORMAL_CHOLESKY. 2890ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong DOGLEG 2900ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong}; 2910ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong 2920ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong// Ceres supports two different dogleg strategies. 2930ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong// The "traditional" dogleg method by Powell and the 2940ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong// "subspace" method described in 2950ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong// R. H. Byrd, R. B. Schnabel, and G. A. Shultz, 2960ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong// "Approximate solution of the trust region problem by minimization 2970ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong// over two-dimensional subspaces", Mathematical Programming, 2980ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong// 40 (1988), pp. 247--263 2990ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kongenum DoglegType { 3000ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong // The traditional approach constructs a dogleg path 3010ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong // consisting of two line segments and finds the furthest 3020ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong // point on that path that is still inside the trust region. 3030ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong TRADITIONAL_DOGLEG, 3040ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong 3050ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong // The subspace approach finds the exact minimum of the model 3060ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong // constrained to the subspace spanned by the dogleg path. 3070ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong SUBSPACE_DOGLEG 3080ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong}; 3090ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong 31079397c21138f54fcff6ec067b44b847f1f7e0e98Carlos Hernandezenum TerminationType { 31179397c21138f54fcff6ec067b44b847f1f7e0e98Carlos Hernandez // Minimizer terminated because one of the convergence criterion set 31279397c21138f54fcff6ec067b44b847f1f7e0e98Carlos Hernandez // by the user was satisfied. 31379397c21138f54fcff6ec067b44b847f1f7e0e98Carlos Hernandez // 31479397c21138f54fcff6ec067b44b847f1f7e0e98Carlos Hernandez // 1. (new_cost - old_cost) < function_tolerance * old_cost; 31579397c21138f54fcff6ec067b44b847f1f7e0e98Carlos Hernandez // 2. max_i |gradient_i| < gradient_tolerance 31679397c21138f54fcff6ec067b44b847f1f7e0e98Carlos Hernandez // 3. |step|_2 <= parameter_tolerance * ( |x|_2 + parameter_tolerance) 31779397c21138f54fcff6ec067b44b847f1f7e0e98Carlos Hernandez // 31879397c21138f54fcff6ec067b44b847f1f7e0e98Carlos Hernandez // The user's parameter blocks will be updated with the solution. 31979397c21138f54fcff6ec067b44b847f1f7e0e98Carlos Hernandez CONVERGENCE, 3200ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong 32179397c21138f54fcff6ec067b44b847f1f7e0e98Carlos Hernandez // The solver ran for maximum number of iterations or maximum amount 32279397c21138f54fcff6ec067b44b847f1f7e0e98Carlos Hernandez // of time specified by the user, but none of the convergence 32379397c21138f54fcff6ec067b44b847f1f7e0e98Carlos Hernandez // criterion specified by the user were met. The user's parameter 32479397c21138f54fcff6ec067b44b847f1f7e0e98Carlos Hernandez // blocks will be updated with the solution found so far. 3250ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong NO_CONVERGENCE, 3260ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong 32779397c21138f54fcff6ec067b44b847f1f7e0e98Carlos Hernandez // The minimizer terminated because of an error. The user's 32879397c21138f54fcff6ec067b44b847f1f7e0e98Carlos Hernandez // parameter blocks will not be updated. 32979397c21138f54fcff6ec067b44b847f1f7e0e98Carlos Hernandez FAILURE, 3300ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong 3310ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong // Using an IterationCallback object, user code can control the 3320ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong // minimizer. The following enums indicate that the user code was 3330ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong // responsible for termination. 33479397c21138f54fcff6ec067b44b847f1f7e0e98Carlos Hernandez // 33579397c21138f54fcff6ec067b44b847f1f7e0e98Carlos Hernandez // Minimizer terminated successfully because a user 33679397c21138f54fcff6ec067b44b847f1f7e0e98Carlos Hernandez // IterationCallback returned SOLVER_TERMINATE_SUCCESSFULLY. 33779397c21138f54fcff6ec067b44b847f1f7e0e98Carlos Hernandez // 33879397c21138f54fcff6ec067b44b847f1f7e0e98Carlos Hernandez // The user's parameter blocks will be updated with the solution. 33979397c21138f54fcff6ec067b44b847f1f7e0e98Carlos Hernandez USER_SUCCESS, 3400ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong 34179397c21138f54fcff6ec067b44b847f1f7e0e98Carlos Hernandez // Minimizer terminated because because a user IterationCallback 34279397c21138f54fcff6ec067b44b847f1f7e0e98Carlos Hernandez // returned SOLVER_ABORT. 34379397c21138f54fcff6ec067b44b847f1f7e0e98Carlos Hernandez // 34479397c21138f54fcff6ec067b44b847f1f7e0e98Carlos Hernandez // The user's parameter blocks will not be updated. 34579397c21138f54fcff6ec067b44b847f1f7e0e98Carlos Hernandez USER_FAILURE 3460ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong}; 3470ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong 3480ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong// Enums used by the IterationCallback instances to indicate to the 3490ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong// solver whether it should continue solving, the user detected an 3500ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong// error or the solution is good enough and the solver should 3510ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong// terminate. 3520ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kongenum CallbackReturnType { 3530ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong // Continue solving to next iteration. 3540ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong SOLVER_CONTINUE, 3550ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong 3560ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong // Terminate solver, and do not update the parameter blocks upon 3570ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong // return. Unless the user has set 3580ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong // Solver:Options:::update_state_every_iteration, in which case the 3590ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong // state would have been updated every iteration 3600ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong // anyways. Solver::Summary::termination_type is set to USER_ABORT. 3610ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong SOLVER_ABORT, 3620ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong 3630ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong // Terminate solver, update state and 3640ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong // return. Solver::Summary::termination_type is set to USER_SUCCESS. 3650ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong SOLVER_TERMINATE_SUCCESSFULLY 3660ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong}; 3670ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong 3680ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong// The format in which linear least squares problems should be logged 3690ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong// when Solver::Options::lsqp_iterations_to_dump is non-empty. 3700ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kongenum DumpFormatType { 3710ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong // Print the linear least squares problem in a human readable format 3720ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong // to stderr. The Jacobian is printed as a dense matrix. The vectors 3730ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong // D, x and f are printed as dense vectors. This should only be used 3740ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong // for small problems. 3750ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong CONSOLE, 3760ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong 3770ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong // Write out the linear least squares problem to the directory 3780ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong // pointed to by Solver::Options::lsqp_dump_directory as text files 3790ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong // which can be read into MATLAB/Octave. The Jacobian is dumped as a 3800ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong // text file containing (i,j,s) triplets, the vectors D, x and f are 3810ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong // dumped as text files containing a list of their values. 3820ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong // 3830ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong // A MATLAB/octave script called lm_iteration_???.m is also output, 3840ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong // which can be used to parse and load the problem into memory. 3850ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong TEXTFILE 3860ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong}; 3870ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong 38879397c21138f54fcff6ec067b44b847f1f7e0e98Carlos Hernandez// For SizedCostFunction and AutoDiffCostFunction, DYNAMIC can be 38979397c21138f54fcff6ec067b44b847f1f7e0e98Carlos Hernandez// specified for the number of residuals. If specified, then the 39079397c21138f54fcff6ec067b44b847f1f7e0e98Carlos Hernandez// number of residuas for that cost function can vary at runtime. 3910ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kongenum DimensionType { 3920ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong DYNAMIC = -1 3930ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong}; 3940ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong 3951d2624a10e2c559f8ba9ef89eaa30832c0a83a96Sascha Haeberlingenum NumericDiffMethod { 3961d2624a10e2c559f8ba9ef89eaa30832c0a83a96Sascha Haeberling CENTRAL, 3971d2624a10e2c559f8ba9ef89eaa30832c0a83a96Sascha Haeberling FORWARD 3981d2624a10e2c559f8ba9ef89eaa30832c0a83a96Sascha Haeberling}; 3991d2624a10e2c559f8ba9ef89eaa30832c0a83a96Sascha Haeberling 4001d2624a10e2c559f8ba9ef89eaa30832c0a83a96Sascha Haeberlingenum LineSearchInterpolationType { 4011d2624a10e2c559f8ba9ef89eaa30832c0a83a96Sascha Haeberling BISECTION, 4021d2624a10e2c559f8ba9ef89eaa30832c0a83a96Sascha Haeberling QUADRATIC, 4031d2624a10e2c559f8ba9ef89eaa30832c0a83a96Sascha Haeberling CUBIC 4041d2624a10e2c559f8ba9ef89eaa30832c0a83a96Sascha Haeberling}; 4051d2624a10e2c559f8ba9ef89eaa30832c0a83a96Sascha Haeberling 4061d2624a10e2c559f8ba9ef89eaa30832c0a83a96Sascha Haeberlingenum CovarianceAlgorithmType { 4071d2624a10e2c559f8ba9ef89eaa30832c0a83a96Sascha Haeberling DENSE_SVD, 40879397c21138f54fcff6ec067b44b847f1f7e0e98Carlos Hernandez SUITE_SPARSE_QR, 40979397c21138f54fcff6ec067b44b847f1f7e0e98Carlos Hernandez EIGEN_SPARSE_QR 4101d2624a10e2c559f8ba9ef89eaa30832c0a83a96Sascha Haeberling}; 4111d2624a10e2c559f8ba9ef89eaa30832c0a83a96Sascha Haeberling 41279397c21138f54fcff6ec067b44b847f1f7e0e98Carlos HernandezCERES_EXPORT const char* LinearSolverTypeToString( 41379397c21138f54fcff6ec067b44b847f1f7e0e98Carlos Hernandez LinearSolverType type); 41479397c21138f54fcff6ec067b44b847f1f7e0e98Carlos HernandezCERES_EXPORT bool StringToLinearSolverType(string value, 41579397c21138f54fcff6ec067b44b847f1f7e0e98Carlos Hernandez LinearSolverType* type); 4160ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong 41779397c21138f54fcff6ec067b44b847f1f7e0e98Carlos HernandezCERES_EXPORT const char* PreconditionerTypeToString(PreconditionerType type); 41879397c21138f54fcff6ec067b44b847f1f7e0e98Carlos HernandezCERES_EXPORT bool StringToPreconditionerType(string value, 41979397c21138f54fcff6ec067b44b847f1f7e0e98Carlos Hernandez PreconditionerType* type); 4200ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong 42179397c21138f54fcff6ec067b44b847f1f7e0e98Carlos HernandezCERES_EXPORT const char* VisibilityClusteringTypeToString( 42279397c21138f54fcff6ec067b44b847f1f7e0e98Carlos Hernandez VisibilityClusteringType type); 42379397c21138f54fcff6ec067b44b847f1f7e0e98Carlos HernandezCERES_EXPORT bool StringToVisibilityClusteringType(string value, 42479397c21138f54fcff6ec067b44b847f1f7e0e98Carlos Hernandez VisibilityClusteringType* type); 42579397c21138f54fcff6ec067b44b847f1f7e0e98Carlos Hernandez 42679397c21138f54fcff6ec067b44b847f1f7e0e98Carlos HernandezCERES_EXPORT const char* SparseLinearAlgebraLibraryTypeToString( 4270ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong SparseLinearAlgebraLibraryType type); 42879397c21138f54fcff6ec067b44b847f1f7e0e98Carlos HernandezCERES_EXPORT bool StringToSparseLinearAlgebraLibraryType( 4290ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong string value, 4300ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong SparseLinearAlgebraLibraryType* type); 4310ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong 43279397c21138f54fcff6ec067b44b847f1f7e0e98Carlos HernandezCERES_EXPORT const char* DenseLinearAlgebraLibraryTypeToString( 433399f7d09e0c45af54b77b4ab9508d6f23759b927Scott Ettinger DenseLinearAlgebraLibraryType type); 43479397c21138f54fcff6ec067b44b847f1f7e0e98Carlos HernandezCERES_EXPORT bool StringToDenseLinearAlgebraLibraryType( 435399f7d09e0c45af54b77b4ab9508d6f23759b927Scott Ettinger string value, 436399f7d09e0c45af54b77b4ab9508d6f23759b927Scott Ettinger DenseLinearAlgebraLibraryType* type); 437399f7d09e0c45af54b77b4ab9508d6f23759b927Scott Ettinger 43879397c21138f54fcff6ec067b44b847f1f7e0e98Carlos HernandezCERES_EXPORT const char* TrustRegionStrategyTypeToString( 43979397c21138f54fcff6ec067b44b847f1f7e0e98Carlos Hernandez TrustRegionStrategyType type); 44079397c21138f54fcff6ec067b44b847f1f7e0e98Carlos HernandezCERES_EXPORT bool StringToTrustRegionStrategyType(string value, 4410ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong TrustRegionStrategyType* type); 4420ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong 44379397c21138f54fcff6ec067b44b847f1f7e0e98Carlos HernandezCERES_EXPORT const char* DoglegTypeToString(DoglegType type); 44479397c21138f54fcff6ec067b44b847f1f7e0e98Carlos HernandezCERES_EXPORT bool StringToDoglegType(string value, DoglegType* type); 4450ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong 44679397c21138f54fcff6ec067b44b847f1f7e0e98Carlos HernandezCERES_EXPORT const char* MinimizerTypeToString(MinimizerType type); 44779397c21138f54fcff6ec067b44b847f1f7e0e98Carlos HernandezCERES_EXPORT bool StringToMinimizerType(string value, MinimizerType* type); 4481d2624a10e2c559f8ba9ef89eaa30832c0a83a96Sascha Haeberling 44979397c21138f54fcff6ec067b44b847f1f7e0e98Carlos HernandezCERES_EXPORT const char* LineSearchDirectionTypeToString( 45079397c21138f54fcff6ec067b44b847f1f7e0e98Carlos Hernandez LineSearchDirectionType type); 45179397c21138f54fcff6ec067b44b847f1f7e0e98Carlos HernandezCERES_EXPORT bool StringToLineSearchDirectionType(string value, 4521d2624a10e2c559f8ba9ef89eaa30832c0a83a96Sascha Haeberling LineSearchDirectionType* type); 4531d2624a10e2c559f8ba9ef89eaa30832c0a83a96Sascha Haeberling 45479397c21138f54fcff6ec067b44b847f1f7e0e98Carlos HernandezCERES_EXPORT const char* LineSearchTypeToString(LineSearchType type); 45579397c21138f54fcff6ec067b44b847f1f7e0e98Carlos HernandezCERES_EXPORT bool StringToLineSearchType(string value, LineSearchType* type); 4561d2624a10e2c559f8ba9ef89eaa30832c0a83a96Sascha Haeberling 45779397c21138f54fcff6ec067b44b847f1f7e0e98Carlos HernandezCERES_EXPORT const char* NonlinearConjugateGradientTypeToString( 4581d2624a10e2c559f8ba9ef89eaa30832c0a83a96Sascha Haeberling NonlinearConjugateGradientType type); 45979397c21138f54fcff6ec067b44b847f1f7e0e98Carlos HernandezCERES_EXPORT bool StringToNonlinearConjugateGradientType( 4601d2624a10e2c559f8ba9ef89eaa30832c0a83a96Sascha Haeberling string value, 4611d2624a10e2c559f8ba9ef89eaa30832c0a83a96Sascha Haeberling NonlinearConjugateGradientType* type); 4621d2624a10e2c559f8ba9ef89eaa30832c0a83a96Sascha Haeberling 46379397c21138f54fcff6ec067b44b847f1f7e0e98Carlos HernandezCERES_EXPORT const char* LineSearchInterpolationTypeToString( 4641d2624a10e2c559f8ba9ef89eaa30832c0a83a96Sascha Haeberling LineSearchInterpolationType type); 46579397c21138f54fcff6ec067b44b847f1f7e0e98Carlos HernandezCERES_EXPORT bool StringToLineSearchInterpolationType( 4661d2624a10e2c559f8ba9ef89eaa30832c0a83a96Sascha Haeberling string value, 4671d2624a10e2c559f8ba9ef89eaa30832c0a83a96Sascha Haeberling LineSearchInterpolationType* type); 4681d2624a10e2c559f8ba9ef89eaa30832c0a83a96Sascha Haeberling 46979397c21138f54fcff6ec067b44b847f1f7e0e98Carlos HernandezCERES_EXPORT const char* CovarianceAlgorithmTypeToString( 4701d2624a10e2c559f8ba9ef89eaa30832c0a83a96Sascha Haeberling CovarianceAlgorithmType type); 47179397c21138f54fcff6ec067b44b847f1f7e0e98Carlos HernandezCERES_EXPORT bool StringToCovarianceAlgorithmType( 4721d2624a10e2c559f8ba9ef89eaa30832c0a83a96Sascha Haeberling string value, 4731d2624a10e2c559f8ba9ef89eaa30832c0a83a96Sascha Haeberling CovarianceAlgorithmType* type); 4741d2624a10e2c559f8ba9ef89eaa30832c0a83a96Sascha Haeberling 47579397c21138f54fcff6ec067b44b847f1f7e0e98Carlos HernandezCERES_EXPORT const char* TerminationTypeToString(TerminationType type); 4760ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong 47779397c21138f54fcff6ec067b44b847f1f7e0e98Carlos HernandezCERES_EXPORT bool IsSchurType(LinearSolverType type); 47879397c21138f54fcff6ec067b44b847f1f7e0e98Carlos HernandezCERES_EXPORT bool IsSparseLinearAlgebraLibraryTypeAvailable( 4790ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong SparseLinearAlgebraLibraryType type); 48079397c21138f54fcff6ec067b44b847f1f7e0e98Carlos HernandezCERES_EXPORT bool IsDenseLinearAlgebraLibraryTypeAvailable( 481399f7d09e0c45af54b77b4ab9508d6f23759b927Scott Ettinger DenseLinearAlgebraLibraryType type); 4820ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong 4830ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong} // namespace ceres 4840ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong 48579397c21138f54fcff6ec067b44b847f1f7e0e98Carlos Hernandez#include "ceres/internal/reenable_warnings.h" 48679397c21138f54fcff6ec067b44b847f1f7e0e98Carlos Hernandez 4870ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong#endif // CERES_PUBLIC_TYPES_H_ 488