IterativeSolver.cpp
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 #include <boost/algorithm/string.hpp>
23 #include <iostream>
24 
25 using namespace std;
26 
27 namespace gtsam {
28 
29 /*****************************************************************************/
30 string IterativeOptimizationParameters::getVerbosity() const {
31  return verbosityTranslator(verbosity_);
32 }
33 
34 /*****************************************************************************/
35 void IterativeOptimizationParameters::setVerbosity(const string &src) {
36  verbosity_ = verbosityTranslator(src);
37 }
38 
39 /*****************************************************************************/
41  print(cout);
42 }
43 
44 /*****************************************************************************/
45 void IterativeOptimizationParameters::print(ostream &os) const {
46  os << "IterativeOptimizationParameters:" << endl << "verbosity: "
47  << verbosityTranslator(verbosity_) << endl;
48 }
49 
50 /*****************************************************************************/
51 ostream& operator<<(ostream &os, const IterativeOptimizationParameters &p) {
52  p.print(os);
53  return os;
54 }
55 
56 /*****************************************************************************/
57 IterativeOptimizationParameters::Verbosity IterativeOptimizationParameters::verbosityTranslator(
58  const string &src) {
59  string s = src;
60  boost::algorithm::to_upper(s);
61  if (s == "SILENT")
62  return IterativeOptimizationParameters::SILENT;
63  else if (s == "COMPLEXITY")
64  return IterativeOptimizationParameters::COMPLEXITY;
65  else if (s == "ERROR")
66  return IterativeOptimizationParameters::ERROR;
67  /* default is default */
68  else
69  return IterativeOptimizationParameters::SILENT;
70 }
71 
72 /*****************************************************************************/
73 string IterativeOptimizationParameters::verbosityTranslator(
75  if (verbosity == SILENT)
76  return "SILENT";
77  else if (verbosity == COMPLEXITY)
78  return "COMPLEXITY";
79  else if (verbosity == ERROR)
80  return "ERROR";
81  else
82  return "UNKNOWN";
83 }
84 
85 /*****************************************************************************/
87  boost::optional<const KeyInfo&> keyInfo,
88  boost::optional<const std::map<Key, Vector>&> lambda) {
89  return optimize(gfg, keyInfo ? *keyInfo : KeyInfo(gfg),
90  lambda ? *lambda : std::map<Key, Vector>());
91 }
92 
93 /*****************************************************************************/
95  const KeyInfo &keyInfo, const std::map<Key, Vector> &lambda) {
96  return optimize(gfg, keyInfo, lambda, keyInfo.x0());
97 }
98 
99 /****************************************************************************/
100 KeyInfo::KeyInfo(const GaussianFactorGraph &fg, const Ordering &ordering) :
101  ordering_(ordering) {
102  initialize(fg);
103 }
104 
105 /****************************************************************************/
107  ordering_(Ordering::Natural(fg)) {
108  initialize(fg);
109 }
110 
111 /****************************************************************************/
113  const map<Key, size_t> colspec = fg.getKeyDimMap();
114  const size_t n = ordering_.size();
115  size_t start = 0;
116 
117  for (size_t i = 0; i < n; ++i) {
118  const Key key = ordering_[i];
119  const auto it_key = colspec.find(key);
120  if (it_key==colspec.end())
121  throw std::runtime_error("KeyInfo: Inconsistency in key-dim map");
122  const size_t dim = it_key->second;
123  this->emplace(key, KeyInfoEntry(i, dim, start));
124  start += dim;
125  }
126  numCols_ = start;
127 }
128 
129 /****************************************************************************/
130 vector<size_t> KeyInfo::colSpec() const {
131  std::vector<size_t> result(size(), 0);
132  for ( const auto &item: *this ) {
133  result[item.second.index] = item.second.dim;
134  }
135  return result;
136 }
137 
138 /****************************************************************************/
141  for ( const auto &item: *this ) {
142  result.emplace(item.first, Vector::Zero(item.second.dim));
143  }
144  return result;
145 }
146 
147 /****************************************************************************/
149  return Vector::Zero(numCols_);
150 }
151 
152 }
153 
void print(const Matrix &A, const string &s, ostream &stream)
Definition: Matrix.cpp:155
static enum @843 ordering
int n
Definition: Half.h:150
std::map< Key, size_t > getKeyDimMap() const
Scalar Scalar int size
Definition: benchVecAdd.cpp:17
Factor Graph Values.
VectorValues x0() const
Return VectorValues with zeros, of correct dimension.
Eigen::VectorXd Vector
Definition: Vector.h:38
Values result
RealScalar s
Linear Factor Graph where all factors are Gaussians.
Some support classes for iterative solvers.
KeyInfo()
Default Constructor.
cout<< "The eigenvalues of A are:"<< endl<< ces.eigenvalues()<< endl;cout<< "The matrix of eigenvectors, V, is:"<< endl<< ces.eigenvectors()<< endl<< endl;complex< float > lambda
const mpreal dim(const mpreal &a, const mpreal &b, mp_rnd_t r=mpreal::get_default_rnd())
Definition: mpreal.h:2201
traits
Definition: chartTesting.h:28
std::vector< size_t > colSpec() const
Return a vector of dimensions ordered by ordering()
ofstream os("timeSchurFactors.csv")
float * p
int optimize(const SfmData &db, const NonlinearFactorGraph &graph, const Values &initial, bool separateCalibration=false)
Definition: timeSFMBAL.h:63
ostream & operator<<(ostream &os, const IterativeOptimizationParameters &p)
std::pair< VectorValues::iterator, bool > emplace(Key j, Args &&...args)
Definition: VectorValues.h:183
std::uint64_t Key
Integer nonlinear key type.
Definition: types.h:61
Vector x0vector() const
Return zero Vector of correct dimension.
void initialize(const GaussianFactorGraph &fg)


gtsam
Author(s):
autogenerated on Sat May 8 2021 02:42:22