gtsam
Loading...
Searching...
No Matches
HybridGaussianConditional.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
20
21#pragma once
22
23#include <gtsam/discrete/DecisionTree-inl.h>
32
33namespace gtsam {
34
35class HybridValues;
36
55class GTSAM_EXPORT HybridGaussianConditional
56 : public HybridGaussianFactor,
57 public Conditional<HybridGaussianFactor, HybridGaussianConditional> {
58 public:
59 using This = HybridGaussianConditional;
60 using shared_ptr = std::shared_ptr<This>;
61 using BaseFactor = HybridGaussianFactor;
63
66
67 private:
70 double negLogConstant_;
71
73 bool pruned_ = false;
74
75 public:
78
81
90 const DiscreteKey &discreteParent,
91 const std::vector<GaussianConditional::shared_ptr> &conditionals);
92
102 const DiscreteKey &discreteParent, Key key,
103 const std::vector<std::pair<Vector, double>> &parameters);
104
116 const DiscreteKey &discreteParent, Key key, const Matrix &A, Key parent,
117 const std::vector<std::pair<Vector, double>> &parameters);
118
132 const DiscreteKey &discreteParent, Key key, //
133 const Matrix &A1, Key parent1, const Matrix &A2, Key parent2,
134 const std::vector<std::pair<Vector, double>> &parameters);
135
145 HybridGaussianConditional(const DiscreteKeys &discreteParents,
147
159 HybridGaussianConditional(const DiscreteKeys &discreteParents,
160 const FactorValuePairs &pairs, bool pruned = false);
161
165
167 bool equals(const HybridFactor &lf, double tol = 1e-9) const override;
168
170 void print(
171 const std::string &s = "HybridGaussianConditional\n",
172 const KeyFormatter &formatter = DefaultKeyFormatter) const override;
173
177
180 const DiscreteValues &discreteValues) const;
181
184 const DiscreteValues &discreteValues) const {
185 return choose(discreteValues);
186 }
187
189 size_t nrComponents() const;
190
192 KeyVector continuousParents() const;
193
202 inline double negLogConstant() const override { return negLogConstant_; }
203
208 std::shared_ptr<HybridGaussianFactor> likelihood(
209 const VectorValues &given) const;
210
213 const Conditionals conditionals() const;
214
221 double logProbability(const HybridValues &values) const override;
222
224 double evaluate(const HybridValues &values) const override;
225
227 double operator()(const HybridValues &values) const {
228 return evaluate(values);
229 }
230
238 HybridGaussianConditional::shared_ptr prune(
239 const DiscreteConditional &discreteProbs) const;
240
242 bool pruned() const { return pruned_; }
243
245 std::shared_ptr<Factor> restrict(
246 const DiscreteValues &discreteValues) const override;
247
249
250 private:
252 struct Helper;
253
255 HybridGaussianConditional(const DiscreteKeys &discreteParents,
256 Helper &&helper, bool pruned = false);
257
259 bool allFrontalsGiven(const VectorValues &given) const;
260
261#if GTSAM_ENABLE_BOOST_SERIALIZATION
263 friend class boost::serialization::access;
264 template <class Archive>
265 void serialize(Archive &ar, const unsigned int /*version*/) {
266 ar &BOOST_SERIALIZATION_BASE_OBJECT_NVP(BaseFactor);
267 ar &BOOST_SERIALIZATION_BASE_OBJECT_NVP(BaseConditional);
268 }
269#endif
270};
271
273std::set<DiscreteKey> DiscreteKeysAsSet(const DiscreteKeys &discreteKeys);
274
275// traits
276template <>
278 : public Testable<HybridGaussianConditional> {};
279
280} // namespace gtsam
specialized key for discrete variables
Decision Tree for use in DiscreteFactors.
A set of GaussianFactors, indexed by a set of discrete keys.
Base class for conditional densities.
Conditional Gaussian Base class.
std::pair< Key, size_t > DiscreteKey
Key type for discrete variables.
Definition DiscreteKey.h:38
Global functions in a separate testing namespace.
Definition chartTesting.h:28
KeyFormatter DefaultKeyFormatter
Assign default key formatter.
Definition Key.cpp:30
FastVector< Key > KeyVector
Define collection type once and for all - also used in wrappers.
Definition Key.h:91
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::set< DiscreteKey > DiscreteKeysAsSet(const DiscreteKeys &discreteKeys)
Return the DiscreteKey vector as a set.
Definition HybridGaussianConditional.cpp:309
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
a decision tree is a function from assignments to values.
Definition DecisionTree.h:62
Discrete Conditional Density Derives from DecisionTreeFactor.
Definition DiscreteConditional.h:40
DiscreteKeys is a set of keys that can be assembled using the & operator.
Definition DiscreteKey.h:41
A map from keys to values.
Definition DiscreteValues.h:34
Base class for truly hybrid probabilistic factors.
Definition HybridFactor.h:51
A conditional of gaussian conditionals indexed by discrete variables, as part of a Bayes Network.
Definition HybridGaussianConditional.h:57
HybridGaussianConditional()=default
Default constructor, mainly for serialization.
bool pruned() const
Return true if the conditional has already been pruned.
Definition HybridGaussianConditional.h:242
DecisionTree< Key, GaussianConditional::shared_ptr > Conditionals
typedef for Decision Tree of Gaussian Conditionals
Definition HybridGaussianConditional.h:65
void print(const std::string &s="HybridGaussianConditional\n", const KeyFormatter &formatter=DefaultKeyFormatter) const override
Print utility.
Definition HybridGaussianConditional.cpp:228
bool equals(const HybridFactor &lf, double tol=1e-9) const override
Test equality with base HybridFactor.
Definition HybridGaussianConditional.cpp:210
double operator()(const HybridValues &values) const
Evaluate probability density, sugar.
Definition HybridGaussianConditional.h:227
GaussianConditional::shared_ptr operator()(const DiscreteValues &discreteValues) const
Syntactic sugar for choose.
Definition HybridGaussianConditional.h:183
double negLogConstant() const override
Return log normalization constant in negative log space.
Definition HybridGaussianConditional.h:202
GaussianConditional::shared_ptr choose(const DiscreteValues &discreteValues) const
Return the conditional Gaussian for the given discrete assignment.
Definition HybridGaussianConditional.cpp:192
double evaluate(const HybridValues &values) const override
Calculate probability density for given values.
Definition HybridGaussianConditional.cpp:360
const Conditionals conditionals() const
Get Conditionals DecisionTree (dynamic cast from factors).
Definition HybridGaussianConditional.cpp:176
HybridGaussianFactor()=default
Default constructor, mainly for serialization.
DecisionTree< Key, GaussianFactorValuePair > FactorValuePairs
typedef for Decision Tree of Gaussian factors and arbitrary value.
Definition HybridGaussianFactor.h:69
HybridValues represents a collection of DiscreteValues and VectorValues.
Definition HybridValues.h:37
std::shared_ptr< This > shared_ptr
shared_ptr to this class
Definition GaussianConditional.h:46
VectorValues represents a collection of vector-valued variables associated each with a unique integer...
Definition VectorValues.h:73