HybridConditional.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 #pragma once
19 
25 #include <gtsam/inference/Key.h>
27 
28 #include <memory>
29 #include <stdexcept>
30 #include <string>
31 #include <typeinfo>
32 #include <vector>
33 
34 namespace gtsam {
35 
59 class GTSAM_EXPORT HybridConditional
60  : public HybridFactor,
61  public Conditional<HybridFactor, HybridConditional> {
62  public:
63  // typedefs needed to play nice with gtsam
65  typedef std::shared_ptr<This> shared_ptr;
69 
70  protected:
72  std::shared_ptr<Factor> inner_;
73 
74  public:
77 
79  HybridConditional() = default;
80 
88  HybridConditional(const KeyVector& continuousKeys,
89  const DiscreteKeys& discreteKeys, size_t nFrontals)
90  : BaseFactor(continuousKeys, discreteKeys), BaseConditional(nFrontals) {}
91 
101  HybridConditional(const KeyVector& continuousFrontals,
102  const DiscreteKeys& discreteFrontals,
103  const KeyVector& continuousParents,
104  const DiscreteKeys& discreteParents);
105 
113  const std::shared_ptr<GaussianConditional>& continuousConditional);
114 
122  const std::shared_ptr<DiscreteConditional>& discreteConditional);
123 
131  const std::shared_ptr<HybridGaussianConditional>& hybridGaussianCond);
132 
136 
138  void print(
139  const std::string& s = "Hybrid Conditional: ",
140  const KeyFormatter& formatter = DefaultKeyFormatter) const override;
141 
143  bool equals(const HybridFactor& other, double tol = 1e-9) const override;
144 
148 
155  return std::dynamic_pointer_cast<HybridGaussianConditional>(inner_);
156  }
157 
164  return std::dynamic_pointer_cast<GaussianConditional>(inner_);
165  }
166 
173  return std::dynamic_pointer_cast<DiscreteConditional>(inner_);
174  }
175 
177  std::shared_ptr<Factor> inner() const { return inner_; }
178 
180  double error(const HybridValues& values) const override;
181 
189  AlgebraicDecisionTree<Key> errorTree(
190  const VectorValues& values) const override;
191 
193  double logProbability(const HybridValues& values) const override;
194 
201  double negLogConstant() const override;
202 
204  double evaluate(const HybridValues& values) const override;
205 
207  bool frontalsIn(const VectorValues& measurements) const {
208  for (Key key : frontals()) {
209  if (!measurements.exists(key)) {
210  return false;
211  }
212  }
213  return true;
214  }
215 
217 
218  private:
219 #ifdef GTSAM_ENABLE_BOOST_SERIALIZATION
220 
221  friend class boost::serialization::access;
222  template <class Archive>
223  void serialize(Archive& ar, const unsigned int /*version*/) {
224  ar& BOOST_SERIALIZATION_BASE_OBJECT_NVP(BaseFactor);
225  ar& BOOST_SERIALIZATION_BASE_OBJECT_NVP(BaseConditional);
226  ar& BOOST_SERIALIZATION_NVP(inner_);
227 
228  // register the various casts based on the type of inner_
229  // https://www.boost.org/doc/libs/1_80_0/libs/serialization/doc/serialization.html#runtimecasting
230  if (isDiscrete()) {
231  boost::serialization::void_cast_register<DiscreteConditional, Factor>(
232  static_cast<DiscreteConditional*>(NULL), static_cast<Factor*>(NULL));
233  } else if (isContinuous()) {
234  boost::serialization::void_cast_register<GaussianConditional, Factor>(
235  static_cast<GaussianConditional*>(NULL), static_cast<Factor*>(NULL));
236  } else {
237  boost::serialization::void_cast_register<HybridGaussianConditional,
238  Factor>(
239  static_cast<HybridGaussianConditional*>(NULL),
240  static_cast<Factor*>(NULL));
241  }
242  }
243 #endif
244 
245 }; // HybridConditional
246 
247 // traits
248 template <>
249 struct traits<HybridConditional> : public Testable<HybridConditional> {};
250 
251 } // namespace gtsam
gtsam::HybridConditional::shared_ptr
std::shared_ptr< This > shared_ptr
shared_ptr to this class
Definition: HybridConditional.h:65
gtsam::HybridConditional::asHybrid
HybridGaussianConditional::shared_ptr asHybrid() const
Return HybridConditional as a HybridGaussianConditional.
Definition: HybridConditional.h:154
gtsam::HybridValues
Definition: HybridValues.h:37
GaussianConditional.h
Conditional Gaussian Base class.
gtsam::HybridGaussianConditional::shared_ptr
std::shared_ptr< This > shared_ptr
Definition: HybridGaussianConditional.h:58
gtsam::HybridConditional
Definition: HybridConditional.h:59
HybridGaussianConditional.h
A hybrid conditional in the Conditional Linear Gaussian scheme.
s
RealScalar s
Definition: level1_cplx_impl.h:126
e
Array< double, 1, 3 > e(1./3., 0.5, 2.)
gtsam::HybridFactor
Definition: HybridFactor.h:54
formatter
const KeyFormatter & formatter
Definition: treeTraversal-inst.h:204
gtsam::Factor
Definition: Factor.h:70
gtsam::DiscreteKeys
DiscreteKeys is a set of keys that can be assembled using the & operator.
Definition: DiscreteKey.h:41
DiscreteConditional.h
gtsam::HybridConditional::This
HybridConditional This
Typedef to this class.
Definition: HybridConditional.h:64
gtsam::KeyVector
FastVector< Key > KeyVector
Define collection type once and for all - also used in wrappers.
Definition: Key.h:92
gtsam::DefaultKeyFormatter
KeyFormatter DefaultKeyFormatter
Assign default key formatter.
Definition: Key.cpp:30
gtsam::AlgebraicDecisionTree< Key >
gtsam::HybridConditional::BaseFactor
HybridFactor BaseFactor
Typedef to our factor base class.
Definition: HybridConditional.h:66
Key.h
gtsam::HybridConditional::HybridConditional
HybridConditional(const KeyVector &continuousKeys, const DiscreteKeys &discreteKeys, size_t nFrontals)
Construct a new Hybrid Conditional object.
Definition: HybridConditional.h:88
gtsam::print
void print(const Matrix &A, const string &s, ostream &stream)
Definition: Matrix.cpp:155
HybridFactor.h
GaussianConditional
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
gtsam::HybridConditional::BaseConditional
Conditional< BaseFactor, This > BaseConditional
Typedef to our conditional base class.
Definition: HybridConditional.h:68
gtsam::HybridConditional::inner
std::shared_ptr< Factor > inner() const
Get the type-erased pointer to the inner type.
Definition: HybridConditional.h:177
gtsam::Conditional
Definition: Conditional.h:63
gtsam::HybridConditional::inner_
std::shared_ptr< Factor > inner_
Type-erased pointer to the inner type.
Definition: HybridConditional.h:72
gtsam::equals
Definition: Testable.h:112
gtsam::HybridConditional::frontalsIn
bool frontalsIn(const VectorValues &measurements) const
Check if VectorValues measurements contains all frontal keys.
Definition: HybridConditional.h:207
key
const gtsam::Symbol key('X', 0)
gtsam::DiscreteConditional::shared_ptr
std::shared_ptr< This > shared_ptr
shared_ptr to this class
Definition: DiscreteConditional.h:43
gtsam::DiscreteConditional
Definition: DiscreteConditional.h:37
HybridGaussianFactorGraph.h
Linearized Hybrid factor graph that uses type erasure.
gtsam
traits
Definition: chartTesting.h:28
gtsam::Testable
Definition: Testable.h:152
error
static double error
Definition: testRot3.cpp:37
gtsam::traits
Definition: Group.h:36
leaf::values
leaf::MyValues values
gtsam::VectorValues::exists
bool exists(Key j) const
Definition: VectorValues.h:136
gtsam::GaussianConditional::shared_ptr
std::shared_ptr< This > shared_ptr
shared_ptr to this class
Definition: GaussianConditional.h:46
gtsam::HybridConditional::asDiscrete
DiscreteConditional::shared_ptr asDiscrete() const
Return conditional as a DiscreteConditional.
Definition: HybridConditional.h:172
gtsam::tol
const G double tol
Definition: Group.h:79
gtsam::HybridConditional::asGaussian
GaussianConditional::shared_ptr asGaussian() const
Return HybridConditional as a GaussianConditional.
Definition: HybridConditional.h:163
NULL
#define NULL
Definition: ccolamd.c:609
Conditional.h
Base class for conditional densities.
gtsam::Key
std::uint64_t Key
Integer nonlinear key type.
Definition: types.h:97
pybind_wrapper_test_script.other
other
Definition: pybind_wrapper_test_script.py:42


gtsam
Author(s):
autogenerated on Sat Sep 28 2024 03:00:50