gtsam
Loading...
Searching...
No Matches
HybridGaussianFactorGraph.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
18
19#pragma once
20
31
32#include <optional>
33
34namespace gtsam {
35
36// Forward declarations
39class HybridBayesNet;
41class HybridBayesTree;
44class TableFactor;
45class JacobianFactor;
46class HybridValues;
47
56GTSAM_EXPORT
57std::pair<std::shared_ptr<HybridConditional>, std::shared_ptr<Factor>>
58EliminateHybrid(const HybridGaussianFactorGraph& factors, const Ordering& keys);
59
66GTSAM_EXPORT const Ordering
68
69/* ************************************************************************* */
70template <>
76 typedef HybridConditional
78 typedef HybridBayesNet
85 static std::pair<std::shared_ptr<ConditionalType>,
86 std::shared_ptr<FactorType>>
87 DefaultEliminate(const FactorGraphType& factors, const Ordering& keys) {
88 return EliminateHybrid(factors, keys);
89 }
90
92 const FactorGraphType& graph,
93 std::optional<std::reference_wrapper<const VariableIndex>>) {
94 return HybridOrdering(graph);
95 }
96};
97
106 : public HybridFactorGraph,
107 public EliminateableFactorGraph<HybridGaussianFactorGraph> {
108 protected:
110 template <typename FACTOR>
111 using IsGaussian = typename std::enable_if<
112 std::is_base_of<GaussianFactor, FACTOR>::value>::type;
113
114 public:
115 using Base = HybridFactorGraph;
118 using BaseEliminateable = EliminateableFactorGraph<This>;
119 using shared_ptr = std::shared_ptr<This>;
120
123
126
129
131 template <class CONTAINER>
132 explicit HybridGaussianFactorGraph(const CONTAINER& factors)
133 : Base(factors) {}
134
140 HybridGaussianFactorGraph(std::initializer_list<sharedFactor> factors)
141 : Base(factors) {}
142
148 template <class DERIVEDFACTOR>
150 : Base(graph) {}
151
155
156 void print(
157 const std::string& s = "HybridGaussianFactorGraph",
158 const KeyFormatter& keyFormatter = DefaultKeyFormatter) const override;
159
168 void printErrors(
169 const HybridValues& values,
170 const std::string& str = "HybridGaussianFactorGraph: ",
171 const KeyFormatter& keyFormatter = DefaultKeyFormatter,
173 printCondition = FactorErrorPredicate{
174 [](const Factor*, double, size_t) { return true; }}) const;
175
176 // bool equals(const This& fg, double tol = 1e-9) const override;
177
181
183 using Base::error;
184
194 AlgebraicDecisionTree<Key> errorTree(
195 const VectorValues& continuousValues) const;
196
203 double probPrime(const HybridValues& values) const;
204
215 AlgebraicDecisionTree<Key> discretePosterior(
216 const VectorValues& continuousValues) const;
217
227 HybridGaussianProductFactor collectProductFactor() const;
228
235 std::pair<std::shared_ptr<HybridConditional>, std::shared_ptr<Factor>>
236 eliminate(const Ordering& keys) const;
238
250 GaussianFactorGraph choose(const DiscreteValues& assignment) const;
251
254 return choose(assignment);
255 }
256
263 DiscreteFactorGraph discreteFactors() const;
264};
265
266// traits
267template <>
269 : public Testable<HybridGaussianFactorGraph> {};
270
271} // namespace gtsam
specialized key for discrete variables
A set of GaussianFactors, indexed by a set of discrete keys.
Factor graph with utilities for hybrid factors.
Factor Graph Base Class.
Predicate used to filter factor-graph error output.
Variable elimination algorithms for factor graphs.
A factor with a quadratic error function - a Gaussian.
Factor Graph Values.
std::pair< HybridConditional::shared_ptr, std::shared_ptr< Factor > > EliminateHybrid(const HybridGaussianFactorGraph &factors, const Ordering &keys)
Main elimination function for HybridGaussianFactorGraph.
Definition HybridGaussianFactorGraph.cpp:507
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
void print(const Matrix &A, const string &s, ostream &stream)
print without optional string, must specify cout yourself
Definition Matrix.cpp:143
const Ordering HybridOrdering(const HybridGaussianFactorGraph &graph)
Return a Colamd constrained ordering where the discrete keys are eliminated after the continuous keys...
Definition HybridGaussianFactorGraph.cpp:88
std::function< bool(const Factor *, double, std::size_t)> FactorErrorPredicate
Predicate used to select factor errors for graph diagnostics.
Definition FactorErrorPredicate.h:27
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
A helper that implements the traits interface for GTSAM types.
Definition Testable.h:152
A discrete probabilistic factor.
Definition DecisionTreeFactor.h:42
A Discrete Factor Graph is a factor graph where all factors are Discrete, i.e.
Definition DiscreteFactorGraph.h:100
A map from keys to values.
Definition DiscreteValues.h:34
A discrete probabilistic factor optimized for sparsity.
Definition TableFactor.h:51
A hybrid Bayes net is a collection of HybridConditionals, which can have discrete conditionals,...
Definition HybridBayesNet.h:37
A Bayes tree representing a Hybrid density.
Definition HybridBayesTree.h:62
Hybrid Conditional Density.
Definition HybridConditional.h:62
Elimination Tree type for Hybrid Factor Graphs.
Definition HybridEliminationTree.h:32
HybridFactorGraph()=default
Default constructor.
HybridConditional ConditionalType
Type of conditionals from elimination.
Definition HybridGaussianFactorGraph.h:77
HybridGaussianFactorGraph FactorGraphType
Type of the factor graph (e.g.
Definition HybridGaussianFactorGraph.h:74
HybridJunctionTree JunctionTreeType
Type of Junction tree.
Definition HybridGaussianFactorGraph.h:83
HybridEliminationTree EliminationTreeType
Type of elimination tree.
Definition HybridGaussianFactorGraph.h:81
static std::pair< std::shared_ptr< ConditionalType >, std::shared_ptr< FactorType > > DefaultEliminate(const FactorGraphType &factors, const Ordering &keys)
The default dense elimination function.
Definition HybridGaussianFactorGraph.h:87
Factor FactorType
Type of factors in factor graph.
Definition HybridGaussianFactorGraph.h:72
static Ordering DefaultOrderingFunc(const FactorGraphType &graph, std::optional< std::reference_wrapper< const VariableIndex > >)
The default ordering generation function.
Definition HybridGaussianFactorGraph.h:91
HybridBayesTree BayesTreeType
Type of Bayes tree.
Definition HybridGaussianFactorGraph.h:82
HybridBayesNet BayesNetType
Type of Bayes net from sequential elimination.
Definition HybridGaussianFactorGraph.h:79
Definition HybridGaussianFactorGraph.h:107
HybridGaussianFactorGraph This
this class
Definition HybridGaussianFactorGraph.h:116
KeyVector Indices
map from keys to values
Definition HybridGaussianFactorGraph.h:122
std::shared_ptr< This > shared_ptr
shared_ptr to This
Definition HybridGaussianFactorGraph.h:119
typename std::enable_if< std::is_base_of< GaussianFactor, FACTOR >::value >::type IsGaussian
Check if FACTOR type is derived from GaussianFactor.
Definition HybridGaussianFactorGraph.h:111
gtsam::Values Values
backwards compatibility
Definition HybridGaussianFactorGraph.h:121
HybridGaussianFactorGraph()=default
Default constructor.
GaussianFactorGraph choose(const DiscreteValues &assignment) const
Get the GaussianFactorGraph at a given discrete assignment.
Definition HybridGaussianFactorGraph.cpp:634
HybridGaussianFactorGraph(std::initializer_list< sharedFactor > factors)
Construct from an initializer lists of GaussianFactor shared pointers.
Definition HybridGaussianFactorGraph.h:140
HybridGaussianFactorGraph(const FactorGraph< DERIVEDFACTOR > &graph)
Implicit copy/downcast constructor to override explicit template container constructor.
Definition HybridGaussianFactorGraph.h:149
GaussianFactorGraph operator()(const DiscreteValues &assignment) const
Syntactic sugar for choose.
Definition HybridGaussianFactorGraph.h:253
HybridGaussianFactorGraph(const CONTAINER &factors)
Construct from container of factors (shared_ptr or plain objects).
Definition HybridGaussianFactorGraph.h:132
An EliminatableClusterTree, i.e., a set of variable clusters with factors, arranged in a tree,...
Definition HybridJunctionTree.h:53
HybridValues represents a collection of DiscreteValues and VectorValues.
Definition HybridValues.h:37
A factor graph is a bipartite graph with factor nodes connected to variable nodes.
Definition FactorGraph.h:58
Traits class for eliminateable factor graphs, specifies the types that result from elimination,...
Definition EliminateableFactorGraph.h:38
EliminateableFactorGraph is a base class for factor graphs that contains elimination algorithms.
Definition EliminateableFactorGraph.h:59
Definition Factor.h:71
Definition Ordering.h:33
A Linear Factor Graph is a factor graph where all factors are Gaussian, i.e.
Definition GaussianFactorGraph.h:77
A Gaussian factor in the squared-error form.
Definition JacobianFactor.h:92
A non-templated config holding any types of Manifold-group elements.
Definition Values.h:65