28#include <boost/make_shared.hpp>
29#include <boost/shared_ptr.hpp>
62 public Conditional<HybridFactor, HybridConditional> {
114 const boost::shared_ptr<GaussianConditional>& continuousConditional);
123 const boost::shared_ptr<DiscreteConditional>& discreteConditional);
139 const std::string& s =
"Hybrid Conditional: ",
140 const KeyFormatter& formatter = DefaultKeyFormatter)
const override;
155 return boost::dynamic_pointer_cast<GaussianMixture>(inner_);
164 return boost::dynamic_pointer_cast<GaussianConditional>(inner_);
173 return boost::dynamic_pointer_cast<DiscreteConditional>(inner_);
177 boost::shared_ptr<Factor>
inner()
const {
return inner_; }
180 double error(
const HybridValues& values)
const override;
183 double logProbability(
const HybridValues& values)
const override;
190 double logNormalizationConstant()
const override;
193 double evaluate(
const HybridValues& values)
const override;
197 for (
Key key : frontals()) {
198 if (!measurements.
exists(key)) {
209 friend class boost::serialization::access;
210 template <
class Archive>
211 void serialize(Archive& ar,
const unsigned int ) {
212 ar& BOOST_SERIALIZATION_BASE_OBJECT_NVP(
BaseFactor);
214 ar& BOOST_SERIALIZATION_NVP(inner_);
219 boost::serialization::void_cast_register<DiscreteConditional, Factor>(
221 }
else if (isContinuous()) {
222 boost::serialization::void_cast_register<GaussianConditional, Factor>(
225 boost::serialization::void_cast_register<GaussianMixture, Factor>(
226 static_cast<GaussianMixture*
>(NULL),
static_cast<Factor*
>(NULL));
A hybrid conditional in the Conditional Linear Gaussian scheme.
Linearized Hybrid factor graph that uses type erasure.
Base class for conditional densities.
Conditional Gaussian Base class.
Global functions in a separate testing namespace.
Definition: chartTesting.h:28
FastVector< Key > KeyVector
Define collection type once and for all - also used in wrappers.
Definition: Key.h:86
std::string serialize(const T &input)
serializes to a string
Definition: serialization.h:113
void print(const Matrix &A, const string &s, ostream &stream)
print without optional string, must specify cout yourself
Definition: Matrix.cpp:156
std::uint64_t Key
Integer nonlinear key type.
Definition: types.h:100
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: concepts.h:30
Template to create a binary predicate.
Definition: Testable.h:111
A helper that implements the traits interface for GTSAM types.
Definition: Testable.h:151
Discrete Conditional Density Derives from DecisionTreeFactor.
Definition: DiscreteConditional.h:40
boost::shared_ptr< This > shared_ptr
shared_ptr to this class
Definition: DiscreteConditional.h:44
DiscreteKeys is a set of keys that can be assembled using the & operator.
Definition: DiscreteKey.h:39
Hybrid Conditional Density.
Definition: HybridConditional.h:62
Conditional< BaseFactor, This > BaseConditional
Typedef to our conditional base class.
Definition: HybridConditional.h:69
HybridFactor BaseFactor
Typedef to our factor base class.
Definition: HybridConditional.h:67
boost::shared_ptr< Factor > inner_
Type-erased pointer to the inner type.
Definition: HybridConditional.h:73
DiscreteConditional::shared_ptr asDiscrete() const
Return conditional as a DiscreteConditional.
Definition: HybridConditional.h:172
GaussianMixture::shared_ptr asMixture() const
Return HybridConditional as a GaussianMixture.
Definition: HybridConditional.h:154
boost::shared_ptr< Factor > inner() const
Get the type-erased pointer to the inner type.
Definition: HybridConditional.h:177
bool frontalsIn(const VectorValues &measurements) const
Check if VectorValues measurements contains all frontal keys.
Definition: HybridConditional.h:196
HybridConditional(const KeyVector &continuousKeys, const DiscreteKeys &discreteKeys, size_t nFrontals)
Construct a new Hybrid Conditional object.
Definition: HybridConditional.h:89
boost::shared_ptr< This > shared_ptr
shared_ptr to this class
Definition: HybridConditional.h:66
GaussianConditional::shared_ptr asGaussian() const
Return HybridConditional as a GaussianConditional.
Definition: HybridConditional.h:163
HybridConditional This
Typedef to this class.
Definition: HybridConditional.h:65
HybridConditional()=default
Default constructor needed for serialization.
Base class for truly hybrid probabilistic factors.
Definition: HybridFactor.h:52
HybridValues represents a collection of DiscreteValues and VectorValues.
Definition: HybridValues.h:38
Definition: Conditional.h:64
A GaussianConditional functions as the node in a Bayes network.
Definition: GaussianConditional.h:43
boost::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:74
bool exists(Key j) const
Check whether a variable with key j exists.
Definition: VectorValues.h:133