HybridGaussianConditional.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 
21 #pragma once
22 
32 
33 namespace gtsam {
34 
35 class HybridValues;
36 
55 class GTSAM_EXPORT HybridGaussianConditional
56  : public HybridGaussianFactor,
57  public Conditional<HybridGaussianFactor, HybridGaussianConditional> {
58  public:
60  using shared_ptr = std::shared_ptr<This>;
63 
66 
67  private:
71 
73  bool pruned_ = false;
74 
75  public:
78 
80  HybridGaussianConditional() = default;
81 
90  const DiscreteKey &discreteParent,
91  const std::vector<GaussianConditional::shared_ptr> &conditionals);
92 
102  const DiscreteKey &discreteParent, Key key,
103  const std::vector<std::pair<Vector, double>> &parameters);
104 
116  const DiscreteKey &discreteParent, Key key, const Matrix &A, Key parent,
117  const std::vector<std::pair<Vector, double>> &parameters);
118 
132  const DiscreteKey &discreteParent, Key key, //
133  const Matrix &A1, Key parent1, const Matrix &A2, Key parent2,
134  const std::vector<std::pair<Vector, double>> &parameters);
135 
145  HybridGaussianConditional(const DiscreteKeys &discreteParents,
146  const Conditionals &conditionals);
147 
159  HybridGaussianConditional(const DiscreteKeys &discreteParents,
160  const FactorValuePairs &pairs, bool pruned = false);
161 
165 
167  bool equals(const HybridFactor &lf, double tol = 1e-9) const override;
168 
170  void print(
171  const std::string &s = "HybridGaussianConditional\n",
172  const KeyFormatter &formatter = DefaultKeyFormatter) const override;
173 
177 
180  const DiscreteValues &discreteValues) const;
181 
184  const DiscreteValues &discreteValues) const {
185  return choose(discreteValues);
186  }
187 
189  size_t nrComponents() const;
190 
192  KeyVector continuousParents() const;
193 
202  inline double negLogConstant() const override { return negLogConstant_; }
203 
208  std::shared_ptr<HybridGaussianFactor> likelihood(
209  const VectorValues &given) const;
210 
213  const Conditionals conditionals() const;
214 
221  double logProbability(const HybridValues &values) const override;
222 
224  double evaluate(const HybridValues &values) const override;
225 
227  double operator()(const HybridValues &values) const {
228  return evaluate(values);
229  }
230 
239  const DiscreteConditional &discreteProbs) const;
240 
242  bool pruned() const { return pruned_; }
243 
245  std::shared_ptr<Factor> restrict(
246  const DiscreteValues &discreteValues) const override;
247 
249 
250  private:
252  struct Helper;
253 
255  HybridGaussianConditional(const DiscreteKeys &discreteParents,
256  Helper &&helper, bool pruned = false);
257 
259  bool allFrontalsGiven(const VectorValues &given) const;
260 
261 #if GTSAM_ENABLE_BOOST_SERIALIZATION
262 
263  friend class boost::serialization::access;
264  template <class Archive>
265  void serialize(Archive &ar, const unsigned int /*version*/) {
266  ar &BOOST_SERIALIZATION_BASE_OBJECT_NVP(BaseFactor);
267  ar &BOOST_SERIALIZATION_BASE_OBJECT_NVP(BaseConditional);
268  }
269 #endif
270 };
271 
273 std::set<DiscreteKey> DiscreteKeysAsSet(const DiscreteKeys &discreteKeys);
274 
275 // traits
276 template <>
278  : public Testable<HybridGaussianConditional> {};
279 
280 } // namespace gtsam
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:60
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:51
gtsam::HybridFactor::shared_ptr
std::shared_ptr< HybridFactor > shared_ptr
shared_ptr to this class
Definition: HybridFactor.h:70
formatter
const KeyFormatter & formatter
Definition: treeTraversal-inst.h:204
gtsam::Matrix
Eigen::MatrixXd Matrix
Definition: base/Matrix.h:39
different_sigmas::values
HybridValues values
Definition: testHybridBayesNet.cpp:247
gtsam::DiscreteKeys
DiscreteKeys is a set of keys that can be assembled using the & operator.
Definition: DiscreteKey.h:41
DiscreteConditional.h
HybridValues
gtsam::KeyVector
FastVector< Key > KeyVector
Define collection type once and for all - also used in wrappers.
Definition: Key.h:92
HybridGaussianFactor.h
A set of GaussianFactors, indexed by a set of discrete keys.
equal_constants::conditionals
const std::vector< GaussianConditional::shared_ptr > conditionals
Definition: testHybridGaussianConditional.cpp:54
gtsam::DefaultKeyFormatter
KeyFormatter DefaultKeyFormatter
Assign default key formatter.
Definition: Key.cpp:30
gtsam::print
void print(const Matrix &A, const string &s, ostream &stream)
Definition: Matrix.cpp:145
HybridFactor.h
A
Definition: test_numpy_dtypes.cpp:300
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
parameters
static ConjugateGradientParameters parameters
Definition: testIterative.cpp:33
DecisionTree.h
Decision Tree for use in DiscreteFactors.
A2
static const double A2[]
Definition: expn.h:7
gtsam::HybridGaussianConditional
A conditional of gaussian conditionals indexed by discrete variables, as part of a Bayes Network....
Definition: HybridGaussianConditional.h:55
gtsam::HybridGaussianConditional::operator()
double operator()(const HybridValues &values) const
Evaluate probability density, sugar.
Definition: HybridGaussianConditional.h:227
gtsam::Conditional
Definition: Conditional.h:63
gtsam::equals
Definition: Testable.h:112
DiscreteKey.h
specialized key for discrete variables
gtsam::HybridGaussianConditional::pruned
bool pruned() const
Return true if the conditional has already been pruned.
Definition: HybridGaussianConditional.h:242
key
const gtsam::Symbol key('X', 0)
gtsam::DecisionTree
a decision tree is a function from assignments to values.
Definition: DecisionTree.h:62
gtsam::DiscreteKeysAsSet
std::set< DiscreteKey > DiscreteKeysAsSet(const DiscreteKeys &discreteKeys)
Return the DiscreteKey vector as a set.
Definition: HybridGaussianConditional.cpp:308
gtsam::DiscreteConditional
Definition: DiscreteConditional.h:37
gtsam
traits
Definition: SFMdata.h:40
gtsam::Testable
Definition: Testable.h:152
DecisionTree-inl.h
gtsam::traits
Definition: Group.h:36
gtsam::DiscreteValues
Definition: DiscreteValues.h:34
gtsam::HybridGaussianConditional::operator()
GaussianConditional::shared_ptr operator()(const DiscreteValues &discreteValues) const
Syntactic sugar for choose.
Definition: HybridGaussianConditional.h:183
gtsam::DiscreteKey
std::pair< Key, size_t > DiscreteKey
Definition: DiscreteKey.h:38
gtsam::HybridGaussianFactor
Implementation of a discrete-conditioned hybrid factor. Implements a joint discrete-continuous factor...
Definition: HybridGaussianFactor.h:60
A1
static const double A1[]
Definition: expn.h:6
gtsam::GaussianConditional::shared_ptr
std::shared_ptr< This > shared_ptr
shared_ptr to this class
Definition: GaussianConditional.h:46
gtsam::HybridGaussianConditional::negLogConstant_
double negLogConstant_
Definition: HybridGaussianConditional.h:70
gtsam::HybridGaussianConditional::negLogConstant
double negLogConstant() const override
Return log normalization constant in negative log space.
Definition: HybridGaussianConditional.h:202
gtsam::tol
const G double tol
Definition: Group.h:79
Conditional.h
Base class for conditional densities.
gtsam::Key
std::uint64_t Key
Integer nonlinear key type.
Definition: types.h:97
DecisionTreeFactor.h
choose
static const T & choose(int layout, const T &col, const T &row)
Definition: cxx11_tensor_block_access.cpp:27


gtsam
Author(s):
autogenerated on Wed Mar 19 2025 03:01:48