GaussianMixtureFactor.cpp
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 
21 #include <gtsam/base/utilities.h>
28 
29 namespace gtsam {
30 
31 /* *******************************************************************************/
33  const DiscreteKeys &discreteKeys,
34  const Factors &factors)
35  : Base(continuousKeys, discreteKeys), factors_(factors) {}
36 
37 /* *******************************************************************************/
38 bool GaussianMixtureFactor::equals(const HybridFactor &lf, double tol) const {
39  const This *e = dynamic_cast<const This *>(&lf);
40  if (e == nullptr) return false;
41 
42  // This will return false if either factors_ is empty or e->factors_ is empty,
43  // but not if both are empty or both are not empty:
44  if (factors_.empty() ^ e->factors_.empty()) return false;
45 
46  // Check the base and the factors:
47  return Base::equals(*e, tol) &&
48  factors_.equals(e->factors_,
49  [tol](const sharedFactor &f1, const sharedFactor &f2) {
50  return f1->equals(*f2, tol);
51  });
52 }
53 
54 /* *******************************************************************************/
55 void GaussianMixtureFactor::print(const std::string &s,
56  const KeyFormatter &formatter) const {
58  std::cout << "{\n";
59  if (factors_.empty()) {
60  std::cout << " empty" << std::endl;
61  } else {
63  "", [&](Key k) { return formatter(k); },
64  [&](const sharedFactor &gf) -> std::string {
65  RedirectCout rd;
66  std::cout << ":\n";
67  if (gf && !gf->empty()) {
68  gf->print("", formatter);
69  return rd.str();
70  } else {
71  return "nullptr";
72  }
73  });
74  }
75  std::cout << "}" << std::endl;
76 }
77 
78 /* *******************************************************************************/
80  const DiscreteValues &assignment) const {
81  return factors_(assignment);
82 }
83 
84 /* *******************************************************************************/
86  const GaussianFactorGraphTree &sum) const {
87  using Y = GaussianFactorGraph;
88  auto add = [](const Y &graph1, const Y &graph2) {
89  auto result = graph1;
90  result.push_back(graph2);
91  return result;
92  };
93  const auto tree = asGaussianFactorGraphTree();
94  return sum.empty() ? tree : sum.apply(tree, add);
95 }
96 
97 /* *******************************************************************************/
99  const {
100  auto wrap = [](const sharedFactor &gf) { return GaussianFactorGraph{gf}; };
101  return {factors_, wrap};
102 }
103 
104 /* *******************************************************************************/
106  const VectorValues &continuousValues) const {
107  // functor to convert from sharedFactor to double error value.
108  auto errorFunc = [&continuousValues](const sharedFactor &gf) {
109  return gf->error(continuousValues);
110  };
111  DecisionTree<Key, double> error_tree(factors_, errorFunc);
112  return error_tree;
113 }
114 
115 /* *******************************************************************************/
117  const sharedFactor gf = factors_(values.discrete());
118  return gf->error(values.continuous());
119 }
120 /* *******************************************************************************/
121 
122 } // namespace gtsam
gtsam::GaussianMixtureFactor
Implementation of a discrete conditional mixture factor. Implements a joint discrete-continuous facto...
Definition: GaussianMixtureFactor.h:47
GaussianFactorGraph.h
Linear Factor Graph where all factors are Gaussians.
gtsam::HybridValues
Definition: HybridValues.h:38
Y
const char Y
Definition: test/EulerAngles.cpp:31
s
RealScalar s
Definition: level1_cplx_impl.h:126
e
Array< double, 1, 3 > e(1./3., 0.5, 2.)
gtsam::HybridFactor::equals
virtual bool equals(const HybridFactor &lf, double tol=1e-9) const
equals
Definition: HybridFactor.cpp:73
gtsam::DecisionTree::empty
bool empty() const
Check if tree is empty.
Definition: DecisionTree.h:269
tree
Definition: testExpression.cpp:212
gtsam::DecisionTree::equals
bool equals(const DecisionTree &other, const CompareFunc &compare=&DefaultCompare) const
Definition: DecisionTree-inl.h:898
gtsam::GaussianMixtureFactor::error
double error(const HybridValues &values) const override
Compute the log-likelihood, including the log-normalizing constant.
Definition: GaussianMixtureFactor.cpp:116
simple_graph::factors
const GaussianFactorGraph factors
Definition: testJacobianFactor.cpp:213
gtsam::RedirectCout
Definition: base/utilities.h:16
gtsam::HybridFactor
Definition: HybridFactor.h:53
wrap
mxArray * wrap(const Class &value)
Definition: matlab.h:126
simple::graph2
NonlinearFactorGraph graph2()
Definition: testInitializePose3.cpp:72
formatter
const KeyFormatter & formatter
Definition: treeTraversal-inst.h:204
f2
double f2(const Vector2 &x)
Definition: testNumericalDerivative.cpp:56
gtsam::DiscreteKeys
DiscreteKeys is a set of keys that can be assembled using the & operator.
Definition: DiscreteKey.h:41
gtsam::DecisionTree::print
void print(const std::string &s, const LabelFormatter &labelFormatter, const ValueFormatter &valueFormatter) const
GTSAM-style print.
Definition: DecisionTree-inl.h:904
gtsam::KeyVector
FastVector< Key > KeyVector
Define collection type once and for all - also used in wrappers.
Definition: Key.h:92
result
Values result
Definition: OdometryOptimize.cpp:8
utilities.h
gtsam::GaussianMixtureFactor::sharedFactor
std::shared_ptr< GaussianFactor > sharedFactor
Definition: GaussianMixtureFactor.h:53
gtsam::AlgebraicDecisionTree< Key >
gtsam::GaussianMixtureFactor::GaussianMixtureFactor
GaussianMixtureFactor()=default
Default constructor, mainly for serialization.
gtsam::GaussianFactorGraph
Definition: GaussianFactorGraph.h:73
gtsam::VectorValues
Definition: VectorValues.h:74
gtsam::KeyFormatter
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
DecisionTree.h
Decision Tree for use in DiscreteFactors.
gtsam::GaussianMixtureFactor::add
GaussianFactorGraphTree add(const GaussianFactorGraphTree &sum) const
Combine the Gaussian Factor Graphs in sum and this while maintaining the original tree structure.
Definition: GaussianMixtureFactor.cpp:85
gtsam::GaussianMixtureFactor::operator()
sharedFactor operator()(const DiscreteValues &assignment) const
Get factor at a given discrete assignment.
Definition: GaussianMixtureFactor.cpp:79
gtsam::DecisionTree::apply
DecisionTree apply(const Unary &op) const
Definition: DecisionTree-inl.h:921
gtsam::GaussianMixtureFactor::print
void print(const std::string &s="GaussianMixtureFactor\n", const KeyFormatter &formatter=DefaultKeyFormatter) const override
print
Definition: GaussianMixtureFactor.cpp:55
gtsam::DecisionTree< Key, sharedFactor >
gtsam::HybridFactor::print
void print(const std::string &s="HybridFactor\n", const KeyFormatter &formatter=DefaultKeyFormatter) const override
print
Definition: HybridFactor.cpp:82
gtsam::GaussianMixtureFactor::asGaussianFactorGraphTree
GaussianFactorGraphTree asGaussianFactorGraphTree() const
Helper function to return factors and functional to create a DecisionTree of Gaussian Factor Graphs.
Definition: GaussianMixtureFactor.cpp:98
gtsam
traits
Definition: chartTesting.h:28
DecisionTree-inl.h
gtsam::DiscreteValues
Definition: DiscreteValues.h:34
leaf::values
leaf::MyValues values
gtsam::GaussianMixtureFactor::factors_
Factors factors_
Decision tree of Gaussian factors indexed by discrete keys.
Definition: GaussianMixtureFactor.h:60
gtsam::GaussianMixtureFactor::errorTree
AlgebraicDecisionTree< Key > errorTree(const VectorValues &continuousValues) const
Compute error of the GaussianMixtureFactor as a tree.
Definition: GaussianMixtureFactor.cpp:105
gtsam::GaussianMixtureFactor::equals
bool equals(const HybridFactor &lf, double tol=1e-9) const override
equals
Definition: GaussianMixtureFactor.cpp:38
gtsam::tol
const G double tol
Definition: Group.h:79
GaussianFactor.h
A factor with a quadratic error function - a Gaussian.
unary::f1
Point2 f1(const Point3 &p, OptionalJacobian< 2, 3 > H)
Definition: testExpression.cpp:79
gtsam::Key
std::uint64_t Key
Integer nonlinear key type.
Definition: types.h:97
HybridValues.h
gtsam::RedirectCout::str
std::string str() const
return the string
Definition: utilities.cpp:5
GaussianMixtureFactor.h
A set of GaussianFactors, indexed by a set of discrete keys.


gtsam
Author(s):
autogenerated on Tue Jun 25 2024 03:00:54