gtsam
Loading...
Searching...
No Matches
HybridBayesNet.h
Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
2 * GTSAM Copyright 2010, Georgia Tech Research Corporation,
3 * Atlanta, Georgia 30332-0415
4 * All Rights Reserved
5 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)
6 * See LICENSE for the license information
7 * -------------------------------------------------------------------------- */
8
17
18#pragma once
19
27
28namespace gtsam {
29
37class GTSAM_EXPORT HybridBayesNet : public BayesNet<HybridConditional> {
38 public:
39 using Base = BayesNet<HybridConditional>;
40 using This = HybridBayesNet;
41 using ConditionalType = HybridConditional;
42 using shared_ptr = std::shared_ptr<HybridBayesNet>;
43 using sharedConditional = std::shared_ptr<ConditionalType>;
44
47
49 HybridBayesNet() = default;
50
53 std::initializer_list<HybridConditional::shared_ptr> conditionals)
54 : Base(conditionals) {}
55
59
61 void print(const std::string &s = "", const KeyFormatter &formatter =
62 DefaultKeyFormatter) const override;
63
65 bool equals(const This &fg, double tol = 1e-9) const;
66
70
76 void push_back(std::shared_ptr<HybridConditional> conditional) {
77 factors_.push_back(conditional);
78 }
79
87 void push_back(HybridConditional &&conditional) {
88 factors_.push_back(
89 std::make_shared<HybridConditional>(std::move(conditional)));
90 }
91
102 template <class CONDITIONAL>
103 void push_back(const std::shared_ptr<CONDITIONAL> &conditional) {
104 factors_.push_back(std::make_shared<HybridConditional>(conditional));
105 }
106
115 template <class CONDITIONAL, class... Args>
116 void emplace_shared(Args &&...args) {
117 auto cond = std::allocate_shared<CONDITIONAL>(
118 Eigen::aligned_allocator<CONDITIONAL>(), std::forward<Args>(args)...);
119 factors_.push_back(std::make_shared<HybridConditional>(std::move(cond)));
120 }
121
129 DiscreteBayesNet discreteMarginal() const;
130
139 GaussianBayesNet choose(const DiscreteValues &assignment) const;
140
142 double evaluate(const HybridValues &values) const;
143
145 double operator()(const HybridValues &values) const {
146 return evaluate(values);
147 }
148
155 DiscreteValues mpe() const;
156
164 HybridValues optimize() const;
165
173 VectorValues optimize(const DiscreteValues &assignment) const;
174
187 HybridValues sample(const HybridValues &given,
188 std::mt19937_64 *rng = nullptr) const;
189
200 HybridValues sample(std::mt19937_64 *rng = nullptr) const;
201
215 HybridBayesNet prune(size_t maxNrLeaves,
216 const std::optional<double> &marginalThreshold = {},
217 DiscreteValues *fixedValues = nullptr) const;
218
223 using Base::error;
224
238 AlgebraicDecisionTree<Key> errorTree(
239 const VectorValues &continuousValues) const;
240
241 using BayesNet::logProbability; // expose HybridValues version
242
251 double negLogConstant(const std::optional<DiscreteValues>& discrete = {}) const;
252
262 AlgebraicDecisionTree<Key> discretePosterior(
263 const VectorValues &continuousValues) const;
264
269 HybridGaussianFactorGraph toFactorGraph(
270 const VectorValues &measurements) const;
272
273 private:
274#if GTSAM_ENABLE_BOOST_SERIALIZATION
276 friend class boost::serialization::access;
277 template <class ARCHIVE>
278 void serialize(ARCHIVE &ar, const unsigned int /*version*/) {
279 ar &BOOST_SERIALIZATION_BASE_OBJECT_NVP(Base);
280 }
281#endif
282};
283
285template <>
286struct traits<HybridBayesNet> : public Testable<HybridBayesNet> {};
287
288} // namespace gtsam
Bayes network.
Chordal Bayes Net, the result of eliminating a factor graph.
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
Point3 optimize(const NonlinearFactorGraph &graph, const Values &values, Key landmarkKey)
Optimize for triangulation.
Definition triangulation.cpp:178
void print(const Matrix &A, const string &s, ostream &stream)
print without optional string, must specify cout yourself
Definition Matrix.cpp:143
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
A manifold defines a space in which there is a notion of a linear tangent space that can be centered ...
Definition Group.h:37
Template to create a binary predicate.
Definition Testable.h:112
A helper that implements the traits interface for GTSAM types.
Definition Testable.h:152
A Bayes net made from discrete conditional distributions.
Definition DiscreteBayesNet.h:38
A map from keys to values.
Definition DiscreteValues.h:34
A hybrid Bayes net is a collection of HybridConditionals, which can have discrete conditionals,...
Definition HybridBayesNet.h:37
void push_back(const std::shared_ptr< CONDITIONAL > &conditional)
Add a conditional to the Bayes net.
Definition HybridBayesNet.h:103
void emplace_shared(Args &&...args)
Preferred: Emplace a conditional directly using arguments.
Definition HybridBayesNet.h:116
void push_back(HybridConditional &&conditional)
Move a HybridConditional into a shared pointer and add.
Definition HybridBayesNet.h:87
void push_back(std::shared_ptr< HybridConditional > conditional)
Add a hybrid conditional using a shared_ptr.
Definition HybridBayesNet.h:76
HybridBayesNet()=default
Construct empty Bayes net.
double operator()(const HybridValues &values) const
Evaluate hybrid probability density for given HybridValues, sugar.
Definition HybridBayesNet.h:145
double evaluate(const HybridValues &values) const
Evaluate hybrid probability density for given HybridValues.
Definition HybridBayesNet.cpp:261
HybridBayesNet(std::initializer_list< HybridConditional::shared_ptr > conditionals)
Constructor that takes an initializer list of shared pointers.
Definition HybridBayesNet.h:52
Hybrid Conditional Density.
Definition HybridConditional.h:62
HybridValues represents a collection of DiscreteValues and VectorValues.
Definition HybridValues.h:37
BayesNet()
Definition BayesNet.h:48
FastVector< sharedFactor > factors_
concept check, makes sure FACTOR defines print and equals
Definition FactorGraph.h:92
GaussianBayesNet is a Bayes net made from linear-Gaussian conditionals.
Definition GaussianBayesNet.h:36
VectorValues represents a collection of vector-valued variables associated each with a unique integer...
Definition VectorValues.h:73
The Factor::error simply extracts the.
The Factor::error simply extracts the.