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 <iostream>
23 
24 using namespace std;
25 
26 namespace gtsam {
27 
28 /*****************************************************************************/
29 string IterativeOptimizationParameters::getVerbosity() const {
30  return verbosityTranslator(verbosity_);
31 }
32 
33 /*****************************************************************************/
34 void IterativeOptimizationParameters::setVerbosity(const string &src) {
35  verbosity_ = verbosityTranslator(src);
36 }
37 
38 /*****************************************************************************/
40  print(cout);
41 }
42 
43 /*****************************************************************************/
44 void IterativeOptimizationParameters::print(ostream &os) const {
45  os << "IterativeOptimizationParameters:" << endl << "verbosity: "
46  << verbosityTranslator(verbosity_) << endl;
47 }
48 
49 /*****************************************************************************/
50 ostream& operator<<(ostream &os, const IterativeOptimizationParameters &p) {
51  p.print(os);
52  return os;
53 }
54 
55 /*****************************************************************************/
56 IterativeOptimizationParameters::Verbosity IterativeOptimizationParameters::verbosityTranslator(
57  const string &src) {
58  string s = src;
59  // Convert to upper case
60  std::transform(s.begin(), s.end(), s.begin(), ::toupper);
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  const KeyInfo* keyInfo, const std::map<Key, Vector>* lambda) {
88  return optimize(gfg, keyInfo ? *keyInfo : KeyInfo(gfg),
89  lambda ? *lambda : std::map<Key, Vector>());
90 }
91 
92 /*****************************************************************************/
94  const KeyInfo &keyInfo, const std::map<Key, Vector> &lambda) {
95  return optimize(gfg, keyInfo, lambda, keyInfo.x0());
96 }
97 
98 /****************************************************************************/
99 KeyInfo::KeyInfo(const GaussianFactorGraph &fg, const Ordering &ordering) :
100  ordering_(ordering) {
101  initialize(fg);
102 }
103 
104 /****************************************************************************/
106  ordering_(Ordering::Natural(fg)) {
107  initialize(fg);
108 }
109 
110 /****************************************************************************/
112  const map<Key, size_t> colspec = fg.getKeyDimMap();
113  const size_t n = ordering_.size();
114  size_t start = 0;
115 
116  for (size_t i = 0; i < n; ++i) {
117  const Key key = ordering_[i];
118  const auto it_key = colspec.find(key);
119  if (it_key==colspec.end())
120  throw std::runtime_error("KeyInfo: Inconsistency in key-dim map");
121  const size_t dim = it_key->second;
122  this->emplace(key, KeyInfoEntry(i, dim, start));
123  start += dim;
124  }
125  numCols_ = start;
126 }
127 
128 /****************************************************************************/
129 vector<size_t> KeyInfo::colSpec() const {
130  std::vector<size_t> result(size(), 0);
131  for ( const auto &item: *this ) {
132  result[item.second.index] = item.second.dim;
133  }
134  return result;
135 }
136 
137 /****************************************************************************/
140  for ( const auto &item: *this ) {
141  result.emplace(item.first, Vector::Zero(item.second.dim));
142  }
143  return result;
144 }
145 
146 /****************************************************************************/
148  return Vector::Zero(numCols_);
149 }
150 
151 }
152 
gtsam::KeyInfo::ordering_
Ordering ordering_
Definition: IterativeSolver.h:133
Eigen::internal::print
EIGEN_STRONG_INLINE Packet4f print(const Packet4f &a)
Definition: NEON/PacketMath.h:3115
GaussianFactorGraph.h
Linear Factor Graph where all factors are Gaussians.
gtsam::KeyInfo::x0
VectorValues x0() const
Return VectorValues with zeros, of correct dimension.
Definition: IterativeSolver.cpp:138
s
RealScalar s
Definition: level1_cplx_impl.h:126
optimize
int optimize(const SfmData &db, const NonlinearFactorGraph &graph, const Values &initial, bool separateCalibration=false)
Definition: timeSFMBAL.h:64
gtsam::operator<<
ostream & operator<<(ostream &os, const IterativeOptimizationParameters &p)
Definition: IterativeSolver.cpp:50
os
ofstream os("timeSchurFactors.csv")
gtsam::Vector
Eigen::VectorXd Vector
Definition: Vector.h:38
result
Values result
Definition: OdometryOptimize.cpp:8
gtsam::KeyInfo
Definition: IterativeSolver.h:125
size
Scalar Scalar int size
Definition: benchVecAdd.cpp:17
n
int n
Definition: BiCGSTAB_simple.cpp:1
gtsam::GaussianFactorGraph
Definition: GaussianFactorGraph.h:73
gtsam::VectorValues
Definition: VectorValues.h:74
IterativeSolver.h
Some support classes for iterative solvers.
gtsam::KeyInfo::colSpec
std::vector< size_t > colSpec() const
Return a vector of dimensions ordered by ordering()
Definition: IterativeSolver.cpp:129
gtsam::KeyInfo::x0vector
Vector x0vector() const
Return zero Vector of correct dimension.
Definition: IterativeSolver.cpp:147
VectorValues.h
Factor Graph Values.
transform
EIGEN_DONT_INLINE void transform(const Transformation &t, Data &data)
Definition: geometry.cpp:25
gtsam::IterativeOptimizationParameters::Verbosity
Verbosity
Definition: IterativeSolver.h:48
lambda
static double lambda[]
Definition: jv.c:524
ordering
static enum @1096 ordering
key
const gtsam::Symbol key('X', 0)
gtsam
traits
Definition: chartTesting.h:28
gtsam::GaussianFactorGraph::getKeyDimMap
std::map< Key, size_t > getKeyDimMap() const
Definition: GaussianFactorGraph.cpp:57
gtsam::KeyInfo::initialize
void initialize(const GaussianFactorGraph &fg)
Definition: IterativeSolver.cpp:111
std
Definition: BFloat16.h:88
p
float * p
Definition: Tutorial_Map_using.cpp:9
gtsam::IterativeOptimizationParameters
Definition: IterativeSolver.h:43
gtsam::KeyInfo::numCols_
size_t numCols_
Definition: IterativeSolver.h:134
gtsam::Key
std::uint64_t Key
Integer nonlinear key type.
Definition: types.h:97
gtsam::KeyInfo::KeyInfo
KeyInfo()
Default Constructor.
Definition: IterativeSolver.h:141
gtsam::Ordering
Definition: inference/Ordering.h:33
i
int i
Definition: BiCGSTAB_step_by_step.cpp:9
gtsam::KeyInfoEntry
Definition: IterativeSolver.h:113


gtsam
Author(s):
autogenerated on Thu Jun 13 2024 03:02:46