gtsam  4.0.0
gtsam
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 
22 #pragma once
23 
26 #include <boost/optional.hpp>
27 #include <string>
28 
29 namespace gtsam {
30 
34 class GTSAM_EXPORT NonlinearOptimizerParams {
35 public:
37  enum Verbosity {
38  SILENT, TERMINATION, ERROR, VALUES, DELTA, LINEAR
39  };
40 
41  size_t maxIterations;
44  double errorTol;
47 
49  maxIterations(100), relativeErrorTol(1e-5), absoluteErrorTol(1e-5), errorTol(
50  0.0), verbosity(SILENT), orderingType(Ordering::COLAMD),
51  linearSolverType(MULTIFRONTAL_CHOLESKY) {}
52 
53  virtual ~NonlinearOptimizerParams() {
54  }
55  virtual void print(const std::string& str = "") const;
56 
57  size_t getMaxIterations() const {
58  return maxIterations;
59  }
60  double getRelativeErrorTol() const {
61  return relativeErrorTol;
62  }
63  double getAbsoluteErrorTol() const {
64  return absoluteErrorTol;
65  }
66  double getErrorTol() const {
67  return errorTol;
68  }
69  std::string getVerbosity() const {
70  return verbosityTranslator(verbosity);
71  }
72 
73  void setMaxIterations(int value) {
74  maxIterations = value;
75  }
76  void setRelativeErrorTol(double value) {
77  relativeErrorTol = value;
78  }
79  void setAbsoluteErrorTol(double value) {
80  absoluteErrorTol = value;
81  }
82  void setErrorTol(double value) {
83  errorTol = value;
84  }
85  void setVerbosity(const std::string &src) {
86  verbosity = verbosityTranslator(src);
87  }
88 
89  static Verbosity verbosityTranslator(const std::string &s) ;
90  static std::string verbosityTranslator(Verbosity value) ;
91 
92  // Successive Linearization Parameters
93 
94 public:
95 
99  MULTIFRONTAL_CHOLESKY,
100  MULTIFRONTAL_QR,
101  SEQUENTIAL_CHOLESKY,
102  SEQUENTIAL_QR,
103  Iterative, /* Experimental Flag */
104  CHOLMOD, /* Experimental Flag */
105  };
106 
108  boost::optional<Ordering> ordering;
109  IterativeOptimizationParameters::shared_ptr iterativeParams;
110 
111  inline bool isMultifrontal() const {
112  return (linearSolverType == MULTIFRONTAL_CHOLESKY)
113  || (linearSolverType == MULTIFRONTAL_QR);
114  }
115 
116  inline bool isSequential() const {
117  return (linearSolverType == SEQUENTIAL_CHOLESKY)
118  || (linearSolverType == SEQUENTIAL_QR);
119  }
120 
121  inline bool isCholmod() const {
122  return (linearSolverType == CHOLMOD);
123  }
124 
125  inline bool isIterative() const {
126  return (linearSolverType == Iterative);
127  }
128 
129  GaussianFactorGraph::Eliminate getEliminationFunction() const {
130  switch (linearSolverType) {
131  case MULTIFRONTAL_CHOLESKY:
132  case SEQUENTIAL_CHOLESKY:
133  return EliminatePreferCholesky;
134 
135  case MULTIFRONTAL_QR:
136  case SEQUENTIAL_QR:
137  return EliminateQR;
138 
139  default:
140  throw std::runtime_error(
141  "Nonlinear optimization parameter \"factorization\" is invalid");
142  }
143  }
144 
145  std::string getLinearSolverType() const {
146  return linearSolverTranslator(linearSolverType);
147  }
148 
149  void setLinearSolverType(const std::string& solver) {
150  linearSolverType = linearSolverTranslator(solver);
151  }
152 
153  void setIterativeParams(const boost::shared_ptr<IterativeOptimizationParameters> params);
154 
155  void setOrdering(const Ordering& ordering) {
156  this->ordering = ordering;
157  this->orderingType = Ordering::CUSTOM;
158  }
159 
160  std::string getOrderingType() const {
161  return orderingTypeTranslator(orderingType);
162  }
163 
164  // Note that if you want to use a custom ordering, you must set the ordering directly, this will switch to custom type
165  void setOrderingType(const std::string& ordering){
166  orderingType = orderingTypeTranslator(ordering);
167  }
168 
169 private:
170  std::string linearSolverTranslator(LinearSolverType linearSolverType) const;
171 
172  LinearSolverType linearSolverTranslator(const std::string& linearSolverType) const;
173 
174  std::string orderingTypeTranslator(Ordering::OrderingType type) const;
175 
176  Ordering::OrderingType orderingTypeTranslator(const std::string& type) const;
177 
178 };
179 
180 // For backward compatibility:
182 
183 } /* namespace gtsam */
Verbosity verbosity
The printing verbosity during optimization (default SILENT)
Definition: NonlinearOptimizerParams.h:45
LinearSolverType linearSolverType
The type of linear solver to use in the nonlinear optimizer.
Definition: NonlinearOptimizerParams.h:107
void print(const Matrix &A, const string &s, ostream &stream)
print without optional string, must specify cout yourself
Definition: Matrix.cpp:140
Subgraph Solver from IROS 2010.
size_t maxIterations
The maximum iterations to stop iterating (default 100)
Definition: NonlinearOptimizerParams.h:41
OrderingType
Type of ordering to use.
Definition: Ordering.h:40
LinearSolverType
See NonlinearOptimizerParams::linearSolverType.
Definition: NonlinearOptimizerParams.h:98
double absoluteErrorTol
The maximum absolute error decrease to stop iterating (default 1e-5)
Definition: NonlinearOptimizerParams.h:43
IterativeOptimizationParameters::shared_ptr iterativeParams
The container for iterativeOptimization parameters. used in CG Solvers.
Definition: NonlinearOptimizerParams.h:109
Definition: Ordering.h:33
std::pair< GaussianConditional::shared_ptr, JacobianFactor::shared_ptr > EliminateQR(const GaussianFactorGraph &factors, const Ordering &keys)
Multiply all factors and eliminate the given keys from the resulting factor using a QR variant that h...
Definition: JacobianFactor.cpp:712
double relativeErrorTol
The maximum relative error decrease to stop iterating (default 1e-5)
Definition: NonlinearOptimizerParams.h:42
The common parameters for Nonlinear optimizers.
Definition: NonlinearOptimizerParams.h:34
Verbosity
See NonlinearOptimizerParams::verbosity.
Definition: NonlinearOptimizerParams.h:37
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
Linear Factor Graph where all factors are Gaussians.
double errorTol
The maximum total error to stop iterating (default 0.0)
Definition: NonlinearOptimizerParams.h:44
boost::optional< Ordering > ordering
The variable elimination ordering, or empty to use COLAMD (default: empty)
Definition: NonlinearOptimizerParams.h:108
Ordering::OrderingType orderingType
The method of ordering use during variable elimination (default COLAMD)
Definition: NonlinearOptimizerParams.h:46
Global functions in a separate testing namespace.
Definition: chartTesting.h:28