ConcurrentBatchSmoother.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 
19 // \callgraph
20 #pragma once
21 
24 #include <queue>
25 
26 namespace gtsam {
27 
31 class GTSAM_UNSTABLE_EXPORT ConcurrentBatchSmoother : public ConcurrentSmoother {
32 
33 public:
34  typedef boost::shared_ptr<ConcurrentBatchSmoother> shared_ptr;
36 
38  struct Result {
39  size_t iterations;
40  size_t lambdas;
42  size_t linearVariables;
43  double error;
44 
46  Result() : iterations(0), lambdas(0), nonlinearVariables(0), linearVariables(0), error(0) {};
47 
49  size_t getIterations() const { return iterations; }
50  size_t getLambdas() const { return lambdas; }
51  size_t getNonlinearVariables() const { return nonlinearVariables; }
52  size_t getLinearVariables() const { return linearVariables; }
53  double getError() const { return error; }
54  };
55 
58 
60  ~ConcurrentBatchSmoother() override {};
61 
63  void print(const std::string& s = "Concurrent Batch Smoother:\n", const KeyFormatter& keyFormatter = DefaultKeyFormatter) const override;
64 
66  bool equals(const ConcurrentSmoother& rhs, double tol = 1e-9) const override;
67 
70  return factors_;
71  }
72 
74  const Values& getLinearizationPoint() const {
75  return theta_;
76  }
77 
79  const Ordering& getOrdering() const {
80  return ordering_;
81  }
82 
84  const VectorValues& getDelta() const {
85  return delta_;
86  }
87 
92  return theta_.retract(delta_);
93  }
94 
100  template<class VALUE>
101  VALUE calculateEstimate(Key key) const {
102  const Vector delta = delta_.at(key);
103  return theta_.at<VALUE>(key).retract(delta);
104  }
105 
120  virtual Result update(const NonlinearFactorGraph& newFactors = NonlinearFactorGraph(), const Values& newTheta = Values(),
121  const boost::optional< std::vector<size_t> >& removeFactorIndices = boost::none);
122 
127  void presync() override;
128 
135  void getSummarizedFactors(NonlinearFactorGraph& summarizedFactors, Values& separatorValues) override;
136 
146  void synchronize(const NonlinearFactorGraph& smootherFactors, const Values& smootherValues,
147  const NonlinearFactorGraph& summarizedFactors, const Values& separatorValues) override;
148 
153  void postsync() override;
154 
155 protected:
156 
163  std::queue<size_t> availableSlots_;
165  std::vector<size_t> filterSummarizationSlots_;
166 
167  // Storage for information to be sent to the filter
169 
170 private:
171 
177  std::vector<size_t> insertFactors(const NonlinearFactorGraph& factors);
178 
183  void removeFactors(const std::vector<size_t>& slots);
184 
186  void reorder();
187 
189  Result optimize();
190 
192  void updateSmootherSummarization();
193 
195  static void PrintNonlinearFactor(const NonlinearFactor::shared_ptr& factor,
196  const std::string& indent = "", const KeyFormatter& keyFormatter = DefaultKeyFormatter);
197 
199  static void PrintLinearFactor(const GaussianFactor::shared_ptr& factor,
200  const std::string& indent = "", const KeyFormatter& keyFormatter = DefaultKeyFormatter);
201 
202 }; // ConcurrentBatchSmoother
203 
206 
208 template<>
209 struct traits<ConcurrentBatchSmoother> : public Testable<ConcurrentBatchSmoother> {
210 };
211 
212 } //\ namespace gtsam
void print(const Matrix &A, const string &s, ostream &stream)
Definition: Matrix.cpp:155
NonlinearFactorGraph smootherSummarization_
A temporary holding place for calculated smoother summarization.
def update(text)
Definition: relicense.py:46
size_t nonlinearVariables
The number of variables that can be relinearized.
size_t lambdas
The number of different L-M lambda factors that were tried during optimization.
Ordering ordering_
The current ordering used to calculate the linear deltas.
Values separatorValues_
The linearization points of the separator variables. These should not be updated during optimization...
GaussianFactorGraph factors(list_of(factor1)(factor2)(factor3))
VectorValues delta_
The current set of linear deltas from the linearization point.
Values retract(const VectorValues &delta) const
Definition: Values.cpp:109
ConcurrentBatchSmoother(const LevenbergMarquardtParams &parameters=LevenbergMarquardtParams())
static const KeyFormatter DefaultKeyFormatter
Definition: Key.h:43
const Values & getLinearizationPoint() const
size_t getIterations() const
Getter methods.
const VectorValues & getDelta() const
ConcurrentBatchSmoother::Result ConcurrentBatchSmootherResult
Typedef for Matlab wrapping.
Point3 optimize(const NonlinearFactorGraph &graph, const Values &values, Key landmarkKey)
Eigen::VectorXd Vector
Definition: Vector.h:38
ConcurrentSmoother Base
typedef for base class
size_t iterations
The number of optimizer iterations performed.
double error
The final factor graph error.
boost::shared_ptr< This > shared_ptr
VariableIndex variableIndex_
The current variable index, which allows efficient factor lookup by variable.
std::function< std::string(Key)> KeyFormatter
Typedef for a function to format a key, i.e. to convert it to a string.
Definition: Key.h:35
const Ordering & getOrdering() const
A nonlinear optimizer that uses the Levenberg-Marquardt trust-region scheme.
Array< double, 1, 3 > e(1./3., 0.5, 2.)
RealScalar s
LevenbergMarquardtParams parameters_
LM parameters.
Values theta_
Current linearization point of all variables in the smoother.
boost::shared_ptr< This > shared_ptr
shared_ptr to this class
size_t linearVariables
The number of variables that must keep a constant linearization point.
static ConjugateGradientParameters parameters
traits
Definition: chartTesting.h:28
std::vector< float > Values
std::vector< size_t > filterSummarizationSlots_
The slots in factor graph that correspond to the current filter summarization factors.
NonlinearFactorGraph factors_
The set of all factors currently in the smoother.
void synchronize(ConcurrentFilter &filter, ConcurrentSmoother &smoother)
static double error
Definition: testRot3.cpp:39
const NonlinearFactorGraph & getFactors() const
const G double tol
Definition: Group.h:83
Base classes for the &#39;filter&#39; and &#39;smoother&#39; portion of the Concurrent Filtering and Smoothing archit...
std::queue< size_t > availableSlots_
The set of available factor graph slots caused by deleting factors.
std::uint64_t Key
Integer nonlinear key type.
Definition: types.h:61
boost::shared_ptr< ConcurrentBatchSmoother > shared_ptr


gtsam
Author(s):
autogenerated on Sat May 8 2021 02:41:49