24 #include <gtsam/linear/Preconditioner.h> 30 #include <gtsam/dllexport.h> 32 #include <boost/serialization/nvp.hpp> 33 #include <boost/shared_ptr.hpp> 40 namespace serialization {
48 class GaussianBayesNet;
49 class GaussianFactorGraph;
57 SubgraphEdge(
const size_t index,
const double weight = 1.0): index_(index), weight_(weight) {}
58 inline size_t index()
const {
return index_; }
59 inline double weight()
const {
return weight_; }
60 inline bool isUnitWeight()
const {
return (weight_ == 1.0); }
61 friend std::ostream &operator<<(std::ostream &os,
const SubgraphEdge &edge);
63 friend class boost::serialization::access;
64 template<
class Archive>
65 void serialize(Archive & ar,
const unsigned int ) {
66 ar & BOOST_SERIALIZATION_NVP(index_);
67 ar & BOOST_SERIALIZATION_NVP(weight_);
74 typedef boost::shared_ptr<Subgraph> shared_ptr;
75 typedef std::vector<shared_ptr> vector_shared_ptr;
76 typedef std::vector<SubgraphEdge> Edges;
77 typedef std::vector<size_t> EdgeIndices;
78 typedef Edges::iterator iterator;
79 typedef Edges::const_iterator const_iterator;
87 Subgraph(
const Edges &edges) : edges_(edges) {}
88 Subgraph(
const std::vector<size_t> &indices) ;
90 inline const Edges& edges()
const {
return edges_; }
91 inline size_t size()
const {
return edges_.size(); }
92 EdgeIndices edgeIndices()
const;
94 iterator begin() {
return edges_.begin(); }
95 const_iterator begin()
const {
return edges_.begin(); }
96 iterator end() {
return edges_.end(); }
97 const_iterator end()
const {
return edges_.end(); }
99 void save(
const std::string &fn)
const;
100 static shared_ptr load(
const std::string &fn);
101 friend std::ostream &operator<<(std::ostream &os,
const Subgraph &subgraph);
104 friend class boost::serialization::access;
105 template<
class Archive>
106 void serialize(Archive & ar,
const unsigned int ) {
107 ar & BOOST_SERIALIZATION_NVP(edges_);
114 typedef boost::shared_ptr<SubgraphBuilderParameters> shared_ptr;
123 enum SkeletonWeight {
130 enum AugmentationWeight {
134 } augmentationWeight_ ;
139 : skeleton_(KRUSKAL), skeletonWeight_(RANDOM), augmentationWeight_(SKELETON), complexity_(1.0) {}
144 virtual void print(std::ostream &os)
const ;
147 static Skeleton skeletonTranslator(
const std::string &s);
148 static std::string skeletonTranslator(Skeleton w);
149 static SkeletonWeight skeletonWeightTranslator(
const std::string &s);
150 static std::string skeletonWeightTranslator(SkeletonWeight w);
151 static AugmentationWeight augmentationWeightTranslator(
const std::string &s);
152 static std::string augmentationWeightTranslator(AugmentationWeight w);
160 typedef boost::shared_ptr<SubgraphBuilder> shared_ptr;
161 typedef std::vector<double> Weights;
174 std::vector<size_t> sample(
const std::vector<double> &weights,
const size_t t)
const ;
183 typedef boost::shared_ptr<SubgraphPreconditionerParameters> shared_ptr;
185 : Base(), builderParams_(p) {}
200 typedef boost::shared_ptr<SubgraphPreconditioner> shared_ptr;
201 typedef boost::shared_ptr<const GaussianBayesNet> sharedBayesNet;
202 typedef boost::shared_ptr<const GaussianFactorGraph> sharedFG;
203 typedef boost::shared_ptr<const VectorValues> sharedValues;
204 typedef boost::shared_ptr<const Errors> sharedErrors;
231 void print(
const std::string& s =
"SubgraphPreconditioner")
const;
234 const sharedFG&
Ab2()
const {
return Ab2_; }
237 const sharedBayesNet&
Rc1()
const {
return Rc1_; }
240 const sharedErrors
b2bar()
const {
return b2bar_; }
261 void transposeMultiplyAdd2(
double alpha, Errors::const_iterator begin,
289 virtual void solve(
const Vector& y, Vector &x)
const;
290 virtual void transposeSolve(
const Vector& y, Vector& x)
const ;
295 const std::map<Key,Vector> &lambda
308 boost::shared_ptr<GaussianFactorGraph>
313 template <
typename Container>
314 std::vector<size_t> sort_idx(
const Container &src)
316 typedef typename Container::value_type T;
317 const size_t n = src.size() ;
318 std::vector<std::pair<size_t,T> > tmp;
320 for (
size_t i = 0 ; i < n ; i++ )
321 tmp.push_back(std::make_pair(i, src[i]));
324 std::stable_sort(tmp.begin(), tmp.end()) ;
327 std::vector<size_t> idx; idx.reserve(n);
328 for (
size_t i = 0 ; i < n ; i++ ) {
329 idx.push_back(tmp[i].first) ;
const sharedFG & Ab2() const
Access Ab2.
Definition: SubgraphPreconditioner.h:234
Definition: Preconditioner.h:24
Definition: SubgraphPreconditioner.h:181
Chordal Bayes Net, the result of eliminating a factor graph.
void save(const Matrix &A, const string &s, const string &filename)
save a matrix to file, which can be loaded by matlab
Definition: Matrix.cpp:161
void print(const Matrix &A, const string &s, ostream &stream)
print without optional string, must specify cout yourself
Definition: Matrix.cpp:140
Typedefs for easier changing of types.
Subgraph conditioner class, as explained in the RSS 2010 submission.
Definition: SubgraphPreconditioner.h:197
typedef and functions to augment Eigen's VectorXd
Handy data structure for iterative solvers.
Definition: IterativeSolver.h:139
Definition: Preconditioner.h:64
This class represents a collection of vector-valued variables associated each with a unique integer i...
Definition: VectorValues.h:90
Definition: SubgraphPreconditioner.h:52
const sharedErrors b2bar() const
Access b2bar.
Definition: SubgraphPreconditioner.h:240
Definition: SubgraphPreconditioner.h:156
Some support classes for iterative solvers.
Point2 operator*(double s, const Point2 &p)
multiply with scalar
Definition: Point2.h:170
Vector operator^(const Matrix &A, const Vector &v)
overload ^ for trans(A)*v We transpose the vectors for speed.
Definition: Matrix.cpp:129
Definition: SubgraphPreconditioner.h:112
A thin wrapper around std::vector that uses boost's pool_allocator.
Linear Factor Graph where all factors are Gaussians.
Definition: SubgraphPreconditioner.h:72
A Linear Factor Graph is a factor graph where all factors are Gaussian, i.e.
Definition: GaussianFactorGraph.h:65
vector of errors
Definition: Errors.h:34
A thin wrapper around std::map that uses boost's fast_pool_allocator.
const sharedBayesNet & Rc1() const
Access Rc1.
Definition: SubgraphPreconditioner.h:237
Global functions in a separate testing namespace.
Definition: chartTesting.h:28