gtsam
Loading...
Searching...
No Matches
GaussianConditional.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
17
18// \callgraph
19
20#pragma once
21
25#include <gtsam/inference/Conditional-inst.h>
27
28#include <random> // for std::mt19937_64
29
30namespace gtsam {
31
40 class GTSAM_EXPORT GaussianConditional :
41 public JacobianFactor,
42 public Conditional<JacobianFactor, GaussianConditional>
43 {
44 public:
46 typedef std::shared_ptr<This> shared_ptr;
49
52
55
57 GaussianConditional(Key key, const Vector& d, const Matrix& R,
58 const SharedDiagonal& sigmas = SharedDiagonal());
59
61 GaussianConditional(Key key, const Vector& d, const Matrix& R, Key parent1,
62 const Matrix& S,
63 const SharedDiagonal& sigmas = SharedDiagonal());
64
66 GaussianConditional(Key key, const Vector& d, const Matrix& R, Key parent1,
67 const Matrix& S, Key parent2, const Matrix& T,
68 const SharedDiagonal& sigmas = SharedDiagonal());
69
73 template<typename TERMS>
74 GaussianConditional(const TERMS& terms,
75 size_t nrFrontals, const Vector& d,
76 const SharedDiagonal& sigmas = SharedDiagonal());
77
88 template <typename KEYS>
89 GaussianConditional(const KEYS& keys, size_t nrFrontals,
90 const VerticalBlockMatrix& augmentedMatrix,
91 const SharedDiagonal& sigmas = SharedDiagonal());
92
103 template <typename KEYS>
104 GaussianConditional(const KEYS& keys, size_t nrFrontals,
105 VerticalBlockMatrix&& augmentedMatrix,
106 const SharedDiagonal& sigmas = SharedDiagonal());
107
109 static GaussianConditional FromMeanAndStddev(Key key, const Vector& mu,
110 double sigma);
111
113 static GaussianConditional FromMeanAndStddev(Key key, const Matrix& A,
114 Key parent, const Vector& b,
115 double sigma);
116
119 static GaussianConditional FromMeanAndStddev(Key key, //
120 const Matrix& A1, Key parent1,
121 const Matrix& A2, Key parent2,
122 const Vector& b, double sigma);
123
125 template<typename... Args>
126 static shared_ptr sharedMeanAndStddev(Args&&... args) {
127 return std::make_shared<This>(FromMeanAndStddev(std::forward<Args>(args)...));
128 }
129
137 template<typename ITERATOR>
138 static shared_ptr Combine(ITERATOR firstConditional, ITERATOR lastConditional);
139
143
145 void print(
146 const std::string& = "GaussianConditional",
147 const KeyFormatter& formatter = DefaultKeyFormatter) const override;
148
150 bool equals(const GaussianFactor&cg, double tol = 1e-9) const override;
151
155
164 double negLogConstant() const override;
165
173 double logProbability(const VectorValues& x) const;
174
180 double evaluate(const VectorValues& x) const;
181
183 double operator()(const VectorValues& x) const {
184 return evaluate(x);
185 }
186
200 VectorValues solve(const VectorValues& parents) const;
201
202 VectorValues solveOtherRHS(const VectorValues& parents, const VectorValues& rhs) const;
203
205 void solveTransposeInPlace(VectorValues& gy) const;
206
209 const VectorValues& frontalValues) const;
210
212 JacobianFactor::shared_ptr likelihood(const Vector& frontal) const;
213
220 VectorValues sample(std::mt19937_64* rng = nullptr) const;
221
229 VectorValues sample(const VectorValues& parentsValues,
230 std::mt19937_64* rng = nullptr) const;
231
235
237 constABlock R() const { return Ab_.range(0, nrFrontals()); }
238
240 constABlock S() const { return Ab_.range(nrFrontals(), size()); }
241
243 constABlock S(const_iterator it) const { return BaseFactor::getA(it); }
244
246 const constBVector d() const { return BaseFactor::getb(); }
247
259 inline double determinant() const { return exp(logDeterminant()); }
260
272 double logDeterminant() const;
273
277
282 double logProbability(const HybridValues& x) const override;
283
288 double evaluate(const HybridValues& x) const override;
289
290 using Conditional::operator(); // Expose evaluate(const HybridValues&) method..
291 using JacobianFactor::error; // Expose error(const HybridValues&) method..
292
294
295 private:
296#if GTSAM_ENABLE_BOOST_SERIALIZATION
298 friend class boost::serialization::access;
299 template<class Archive>
300 void serialize(Archive & ar, const unsigned int /*version*/) {
301 ar & BOOST_SERIALIZATION_BASE_OBJECT_NVP(BaseFactor);
302 ar & BOOST_SERIALIZATION_BASE_OBJECT_NVP(BaseConditional);
303 }
304#endif
305 }; // GaussianConditional
306
308template<>
309struct traits<GaussianConditional> : public Testable<GaussianConditional> {};
310
311} // \ namespace gtsam
312
Base class for conditional densities.
Conditional Gaussian Base class.
Factor Graph Values.
Included from all GTSAM files.
Global functions in a separate testing namespace.
Definition chartTesting.h:28
KeyFormatter DefaultKeyFormatter
Assign default key formatter.
Definition Key.cpp:30
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
std::uint64_t Key
Integer nonlinear key type.
Definition types.h:43
A manifold defines a space in which there is a notion of a linear tangent space that can be centered ...
Definition Group.h:37
A helper that implements the traits interface for GTSAM types.
Definition Testable.h:152
This class stores a dense matrix and allows it to be accessed as a collection of vertical blocks.
Definition VerticalBlockMatrix.h:47
HybridValues represents a collection of DiscreteValues and VectorValues.
Definition HybridValues.h:37
size_t nrFrontals() const
Definition Conditional.h:133
KeyVector::const_iterator const_iterator
Const iterator over keys.
Definition Factor.h:83
size_t size() const
Definition Factor.h:160
A GaussianConditional functions as the node in a Bayes network.
Definition GaussianConditional.h:43
GaussianConditional This
Typedef to this class.
Definition GaussianConditional.h:45
double logDeterminant() const
Compute the log determinant of the R matrix.
Definition GaussianConditional.cpp:173
double logProbability(const VectorValues &x) const
Calculate log-probability log(evaluate(x)) for given values x: -error(x) - 0.5 * n*log(2*pi) - 0....
Definition GaussianConditional.cpp:201
constABlock S(const_iterator it) const
Get a view of the S matrix for the variable pointed to by the given key iterator.
Definition GaussianConditional.h:243
constABlock R() const
Return a view of the upper-triangular R block of the conditional.
Definition GaussianConditional.h:237
JacobianFactor BaseFactor
Typedef to our factor base class.
Definition GaussianConditional.h:47
GaussianConditional()
default constructor needed for serialization
Definition GaussianConditional.h:54
Conditional< BaseFactor, This > BaseConditional
Typedef to our conditional base class.
Definition GaussianConditional.h:48
static GaussianConditional FromMeanAndStddev(Key key, const Vector &mu, double sigma)
Construct from mean mu and standard deviation sigma.
Definition GaussianConditional.cpp:66
bool equals(const GaussianFactor &cg, double tol=1e-9) const override
equals function
Definition GaussianConditional.cpp:133
double evaluate(const VectorValues &x) const
Calculate probability density for given values x: exp(logProbability(x)) == exp(-GaussianFactor::erro...
Definition GaussianConditional.cpp:210
static shared_ptr Combine(ITERATOR firstConditional, ITERATOR lastConditional)
Combine several GaussianConditional into a single dense GC.
double determinant() const
Compute the determinant of the R matrix.
Definition GaussianConditional.h:259
double operator()(const VectorValues &x) const
Evaluate probability density, sugar.
Definition GaussianConditional.h:183
double negLogConstant() const override
Return the negative log of the normalization constant.
Definition GaussianConditional.cpp:186
static shared_ptr sharedMeanAndStddev(Args &&... args)
Create shared pointer by forwarding arguments to fromMeanAndStddev.
Definition GaussianConditional.h:126
constABlock S() const
Get a view of the parent blocks.
Definition GaussianConditional.h:240
void print(const std::string &="GaussianConditional", const KeyFormatter &formatter=DefaultKeyFormatter) const override
print
Definition GaussianConditional.cpp:101
std::shared_ptr< This > shared_ptr
shared_ptr to this class
Definition GaussianConditional.h:46
const constBVector d() const
Get a view of the r.h.s.
Definition GaussianConditional.h:246
An abstract virtual base class for JacobianFactor and HessianFactor.
Definition GaussianFactor.h:39
const constBVector getb() const
Get a view of the r.h.s.
Definition JacobianFactor.h:344
JacobianFactor(const GaussianFactor &gf)
Convert from other GaussianFactor.
Definition JacobianFactor.cpp:51
double error(const VectorValues &c) const override
0.5*(A*x-b)'D(A*x-b).
Definition JacobianFactor.cpp:570
std::shared_ptr< This > shared_ptr
shared_ptr to this class
Definition JacobianFactor.h:97
constABlock getA(const_iterator variable) const
Get a view of the A matrix for the variable pointed to by the given key iterator.
Definition JacobianFactor.h:347
VectorValues represents a collection of vector-valued variables associated each with a unique integer...
Definition VectorValues.h:73