gtsam  3.2.1
gtsam
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
NonlinearOptimizerParams.h
Go to the documentation of this file.
1 /* ----------------------------------------------------------------------------
2 
3  * GTSAM Copyright 2010, Georgia Tech Research Corporation,
4  * Atlanta, Georgia 30332-0415
5  * All Rights Reserved
6  * Authors: Frank Dellaert, et al. (see THANKS for the full author list)
7 
8  * See LICENSE for the license information
9 
10  * -------------------------------------------------------------------------- */
11 
21 #pragma once
22 
24 #include <gtsam/linear/SubgraphSolver.h>
25 #include <boost/optional.hpp>
26 #include <string>
27 
28 namespace gtsam {
29 
33 class GTSAM_EXPORT NonlinearOptimizerParams {
34 public:
36  enum Verbosity {
37  SILENT, TERMINATION, ERROR, VALUES, DELTA, LINEAR
38  };
39 
43  double errorTol;
45 
47  maxIterations(100), relativeErrorTol(1e-5), absoluteErrorTol(1e-5), errorTol(
48  0.0), verbosity(SILENT), linearSolverType(MULTIFRONTAL_CHOLESKY) {
49  }
50 
51  virtual ~NonlinearOptimizerParams() {
52  }
53  virtual void print(const std::string& str = "") const;
54 
55  int getMaxIterations() const {
56  return maxIterations;
57  }
58  double getRelativeErrorTol() const {
59  return relativeErrorTol;
60  }
61  double getAbsoluteErrorTol() const {
62  return absoluteErrorTol;
63  }
64  double getErrorTol() const {
65  return errorTol;
66  }
67  std::string getVerbosity() const {
68  return verbosityTranslator(verbosity);
69  }
70 
71  void setMaxIterations(int value) {
72  maxIterations = value;
73  }
74  void setRelativeErrorTol(double value) {
75  relativeErrorTol = value;
76  }
77  void setAbsoluteErrorTol(double value) {
78  absoluteErrorTol = value;
79  }
80  void setErrorTol(double value) {
81  errorTol = value;
82  }
83  void setVerbosity(const std::string &src) {
84  verbosity = verbosityTranslator(src);
85  }
86 
87  static Verbosity verbosityTranslator(const std::string &s) ;
88  static std::string verbosityTranslator(Verbosity value) ;
89 
90  // Successive Linearization Parameters
91 
92 public:
93 
97  MULTIFRONTAL_CHOLESKY,
98  MULTIFRONTAL_QR,
99  SEQUENTIAL_CHOLESKY,
100  SEQUENTIAL_QR,
101  Iterative, /* Experimental Flag */
102  CHOLMOD, /* Experimental Flag */
103  };
104 
106  boost::optional<Ordering> ordering;
107  IterativeOptimizationParameters::shared_ptr iterativeParams;
108 
109  inline bool isMultifrontal() const {
110  return (linearSolverType == MULTIFRONTAL_CHOLESKY)
111  || (linearSolverType == MULTIFRONTAL_QR);
112  }
113 
114  inline bool isSequential() const {
115  return (linearSolverType == SEQUENTIAL_CHOLESKY)
116  || (linearSolverType == SEQUENTIAL_QR);
117  }
118 
119  inline bool isCholmod() const {
120  return (linearSolverType == CHOLMOD);
121  }
122 
123  inline bool isIterative() const {
124  return (linearSolverType == Iterative);
125  }
126 
127  GaussianFactorGraph::Eliminate getEliminationFunction() const {
128  switch (linearSolverType) {
129  case MULTIFRONTAL_CHOLESKY:
130  case SEQUENTIAL_CHOLESKY:
131  return EliminatePreferCholesky;
132 
133  case MULTIFRONTAL_QR:
134  case SEQUENTIAL_QR:
135  return EliminateQR;
136 
137  default:
138  throw std::runtime_error(
139  "Nonlinear optimization parameter \"factorization\" is invalid");
140  }
141  }
142 
143  std::string getLinearSolverType() const {
144  return linearSolverTranslator(linearSolverType);
145  }
146 
147  void setLinearSolverType(const std::string& solver) {
148  linearSolverType = linearSolverTranslator(solver);
149  }
150 
151  void setIterativeParams(const boost::shared_ptr<IterativeOptimizationParameters> params);
152 
153  void setOrdering(const Ordering& ordering) {
154  this->ordering = ordering;
155  }
156 
157 private:
158  std::string linearSolverTranslator(LinearSolverType linearSolverType) const;
159  LinearSolverType linearSolverTranslator(
160  const std::string& linearSolverType) const;
161 };
162 
163 // For backward compatibility:
164 typedef NonlinearOptimizerParams SuccessiveLinearizationParams;
165 
166 } /* namespace gtsam */
LinearSolverType
See NonlinearOptimizerParams::linearSolverType.
Definition: NonlinearOptimizerParams.h:96
LinearSolverType linearSolverType
The type of linear solver to use in the nonlinear optimizer.
Definition: NonlinearOptimizerParams.h:105
double errorTol
The maximum total error to stop iterating (default 0.0)
Definition: NonlinearOptimizerParams.h:43
The common parameters for Nonlinear optimizers.
Definition: NonlinearOptimizerParams.h:33
double absoluteErrorTol
The maximum absolute error decrease to stop iterating (default 1e-5)
Definition: NonlinearOptimizerParams.h:42
double relativeErrorTol
The maximum relative error decrease to stop iterating (default 1e-5)
Definition: NonlinearOptimizerParams.h:41
void print(const Matrix &A, const string &s, ostream &stream)
print a matrix
Definition: Matrix.cpp:183
IterativeOptimizationParameters::shared_ptr iterativeParams
The container for iterativeOptimization parameters. used in CG Solvers.
Definition: NonlinearOptimizerParams.h:107
int maxIterations
The maximum iterations to stop iterating (default 100)
Definition: NonlinearOptimizerParams.h:40
boost::function< EliminationResult(const FactorGraphType &, const Ordering &)> Eliminate
The function type that does a single dense elimination step on a subgraph.
Definition: EliminateableFactorGraph.h:89
boost::optional< Ordering > ordering
The variable elimination ordering, or empty to use COLAMD (default: empty)
Definition: NonlinearOptimizerParams.h:106
Verbosity
See NonlinearOptimizerParams::verbosity.
Definition: NonlinearOptimizerParams.h:36
Verbosity verbosity
The printing verbosity during optimization (default SILENT)
Definition: NonlinearOptimizerParams.h:44
Linear Factor Graph where all factors are Gaussians.