gtsam
Loading...
Searching...
No Matches
HybridFactor.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
21#include <gtsam/base/Testable.h>
28
29#include <cstddef>
30#include <string>
31namespace gtsam {
32
33class HybridValues;
34
35KeyVector CollectKeys(const KeyVector &continuousKeys,
36 const DiscreteKeys &discreteKeys);
37KeyVector CollectKeys(const KeyVector &keys1, const KeyVector &keys2);
38DiscreteKeys CollectDiscreteKeys(const DiscreteKeys &key1,
39 const DiscreteKeys &key2);
40
51class GTSAM_EXPORT HybridFactor : public Factor {
52 public:
54 enum class Category { None, Discrete, Continuous, Hybrid };
55
56 private:
58 Category category_ = Category::None;
59
60 protected:
61 // Set of DiscreteKeys for this factor.
62 DiscreteKeys discreteKeys_;
65
66 public:
67 // typedefs needed to play nice with gtsam
69 typedef std::shared_ptr<HybridFactor>
71 typedef Factor Base;
72
75
77 HybridFactor() = default;
78
84 explicit HybridFactor(const KeyVector &keys);
85
91 explicit HybridFactor(const DiscreteKeys &discreteKeys);
92
101
105
107 virtual bool equals(const HybridFactor &lf, double tol = 1e-9) const;
108
110 void print(
111 const std::string &s = "HybridFactor\n",
112 const KeyFormatter &formatter = DefaultKeyFormatter) const override;
113
117
119 bool isDiscrete() const { return category_ == Category::Discrete; }
120
122 bool isContinuous() const { return category_ == Category::Continuous; }
123
125 bool isHybrid() const { return category_ == Category::Hybrid; }
126
128 size_t nrContinuous() const { return continuousKeys_.size(); }
129
131 const DiscreteKeys &discreteKeys() const { return discreteKeys_; }
132
134 const KeyVector &continuousKeys() const { return continuousKeys_; }
135
138 const VectorValues &continuousValues) const = 0;
139
141 virtual std::shared_ptr<Factor> restrict(
142 const DiscreteValues &discreteValues) const = 0;
143
145
146 private:
147#if GTSAM_ENABLE_BOOST_SERIALIZATION
149 friend class boost::serialization::access;
150 template <class ARCHIVE>
151 void serialize(ARCHIVE &ar, const unsigned int /*version*/) {
152 ar &BOOST_SERIALIZATION_BASE_OBJECT_NVP(Base);
153 ar &BOOST_SERIALIZATION_NVP(category_);
154 ar &BOOST_SERIALIZATION_NVP(discreteKeys_);
155 ar &BOOST_SERIALIZATION_NVP(continuousKeys_);
156 }
157#endif
158};
159// HybridFactor
160
161// traits
162template <>
163struct traits<HybridFactor> : public Testable<HybridFactor> {};
164
165// For wrapper:
166using AlgebraicDecisionTreeKey = AlgebraicDecisionTree<Key>;
167
168} // namespace gtsam
Concept check for values that can be used in unit tests.
specialized key for discrete variables
Decision Tree for use in DiscreteFactors.
The base class for all factors.
Linear Factor Graph where all factors are Gaussians.
A non-templated config holding any types of Manifold-group elements.
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
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
An algebraic decision tree fixes the range of a DecisionTree to double.
Definition AlgebraicDecisionTree.h:41
DiscreteKeys is a set of keys that can be assembled using the & operator.
Definition DiscreteKey.h:41
A map from keys to values.
Definition DiscreteValues.h:34
Base class for truly hybrid probabilistic factors.
Definition HybridFactor.h:51
size_t nrContinuous() const
Return the number of continuous variables in this factor.
Definition HybridFactor.h:128
Category
Enum to help with categorizing hybrid factors.
Definition HybridFactor.h:54
HybridFactor This
This class.
Definition HybridFactor.h:68
bool isDiscrete() const
True if this is a factor of discrete variables only.
Definition HybridFactor.h:119
bool isHybrid() const
True is this is a Discrete-Continuous factor.
Definition HybridFactor.h:125
std::shared_ptr< HybridFactor > shared_ptr
shared_ptr to this class
Definition HybridFactor.h:70
HybridFactor()=default
Default constructor creates empty factor.
Factor Base
Our base class.
Definition HybridFactor.h:71
void print(const std::string &s="HybridFactor\n", const KeyFormatter &formatter=DefaultKeyFormatter) const override
print
Definition HybridFactor.cpp:96
const KeyVector & continuousKeys() const
Return only the continuous keys for this factor.
Definition HybridFactor.h:134
virtual bool equals(const HybridFactor &lf, double tol=1e-9) const
equals
Definition HybridFactor.cpp:88
bool isContinuous() const
True if this is a factor of continuous variables only.
Definition HybridFactor.h:122
KeyVector continuousKeys_
Record continuous keys for book-keeping.
Definition HybridFactor.h:64
virtual std::shared_ptr< Factor > restrict(const DiscreteValues &discreteValues) const =0
Restrict the factor to the given discrete values.
const DiscreteKeys & discreteKeys() const
Return the discrete keys for this factor.
Definition HybridFactor.h:131
virtual AlgebraicDecisionTree< Key > errorTree(const VectorValues &continuousValues) const =0
Compute tree of linear errors.
HybridValues represents a collection of DiscreteValues and VectorValues.
Definition HybridValues.h:37
const KeyVector & keys() const
Access the factor's involved variable keys.
Definition Factor.h:143
Factor()
Default constructor for I/O.
Definition Factor.h:94
VectorValues represents a collection of vector-valued variables associated each with a unique integer...
Definition VectorValues.h:73