DiscreteConditional.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 
19 #pragma once
20 
24 
25 #include <memory>
26 #include <random> // for std::mt19937_64
27 #include <string>
28 #include <vector>
29 
30 namespace gtsam {
31 
38 class GTSAM_EXPORT DiscreteConditional
39  : public DecisionTreeFactor,
40  public Conditional<DecisionTreeFactor, DiscreteConditional> {
41  public:
42  // typedefs needed to play nice with gtsam
44  typedef std::shared_ptr<This> shared_ptr;
48 
50 
53 
56 
58  DiscreteConditional(size_t nFrontals, const DiscreteFactor& f);
59 
64  DiscreteConditional(size_t nFrontals, const DiscreteKeys& keys,
65  const ADT& potentials);
66 
68  explicit DiscreteConditional(const Signature& signature);
69 
78  const Signature::Table& table)
79  : DiscreteConditional(Signature(key, parents, table)) {}
80 
89  const std::vector<double>& table)
90  : DiscreteConditional(1, DiscreteKeys{key} & parents,
91  ADT(DiscreteKeys{key} & parents, table)) {}
92 
103  const std::string& spec)
104  : DiscreteConditional(Signature(key, parents, spec)) {}
105 
107  DiscreteConditional(const DiscreteKey& key, const std::string& spec)
108  : DiscreteConditional(Signature(key, {}, spec)) {}
109 
114  DiscreteConditional(const DecisionTreeFactor& joint,
115  const DecisionTreeFactor& marginal);
116 
122  DiscreteConditional(const DecisionTreeFactor& joint,
123  const DecisionTreeFactor& marginal,
124  const Ordering& orderedKeys);
125 
141  DiscreteConditional operator*(const DiscreteConditional& other) const;
142 
144  DiscreteConditional marginal(Key key) const;
145 
149 
151  void print(
152  const std::string& s = "Discrete Conditional: ",
153  const KeyFormatter& formatter = DefaultKeyFormatter) const override;
154 
156  bool equals(const DiscreteFactor& other, double tol = 1e-9) const override;
157 
161 
163  double logProbability(const DiscreteValues& x) const { return -error(x); }
164 
167  const std::string& s = "Discrete Conditional: ",
168  const KeyFormatter& formatter = DefaultKeyFormatter) const {
169  static_cast<const BaseConditional*>(this)->print(s, formatter);
170  }
171 
172  using BaseFactor::error;
173  using BaseFactor::evaluate;
174  using BaseFactor::operator();
175 
189  shared_ptr choose(const DiscreteValues& given) const;
190 
193  const DiscreteValues& frontalValues) const;
194 
196  DecisionTreeFactor::shared_ptr likelihood(size_t frontal) const;
197 
209  virtual size_t sample(const DiscreteValues& parentsValues,
210  std::mt19937_64* rng = nullptr) const;
211 
213  size_t sample(size_t parent_value, std::mt19937_64* rng = nullptr) const;
214 
221  size_t sample(std::mt19937_64* rng = nullptr) const;
222 
228  size_t argmax(const DiscreteValues& parentsValues = DiscreteValues()) const;
229 
237  virtual DiscreteFactor::shared_ptr max(const Ordering& keys) const override;
238 
242 
244  void sampleInPlace(DiscreteValues* parentsValues,
245  std::mt19937_64* rng = nullptr) const;
246 
248  std::vector<DiscreteValues> frontalAssignments() const;
249 
251  std::vector<DiscreteValues> allAssignments() const;
252 
256 
258  std::string markdown(const KeyFormatter& keyFormatter = DefaultKeyFormatter,
259  const Names& names = {}) const override;
260 
262  std::string html(const KeyFormatter& keyFormatter = DefaultKeyFormatter,
263  const Names& names = {}) const override;
264 
268 
273  double evaluate(const HybridValues& x) const override;
274 
275  using BaseConditional::operator();
276 
281  double logProbability(const HybridValues& x) const override {
282  return -error(x);
283  }
284 
291  double negLogConstant() const override;
292 
294  virtual void prune(size_t maxNrAssignments);
295 
304  void removeDiscreteModes(const DiscreteValues& given);
305 
307 
308  protected:
311  bool forceComplete) const;
312 
313  private:
314 #if GTSAM_ENABLE_BOOST_SERIALIZATION
315 
316  friend class boost::serialization::access;
317  template <class Archive>
318  void serialize(Archive& ar, const unsigned int /*version*/) {
319  ar& BOOST_SERIALIZATION_BASE_OBJECT_NVP(BaseFactor);
320  ar& BOOST_SERIALIZATION_BASE_OBJECT_NVP(BaseConditional);
321  }
322 #endif
323 };
324 // DiscreteConditional
325 
326 // traits
327 template <>
328 struct traits<DiscreteConditional> : public Testable<DiscreteConditional> {};
329 
330 } // namespace gtsam
gtsam::DiscreteConditional::DiscreteConditional
DiscreteConditional(const DiscreteKey &key, const DiscreteKeys &parents, const std::vector< double > &table)
Definition: DiscreteConditional.h:88
gtsam::DiscreteConditional::logProbability
double logProbability(const DiscreteValues &x) const
Log-probability is just -error(x).
Definition: DiscreteConditional.h:163
gtsam::Signature::Table
std::vector< Row > Table
Definition: Signature.h:60
gtsam::markdown
string markdown(const DiscreteValues &values, const KeyFormatter &keyFormatter, const DiscreteValues::Names &names)
Free version of markdown.
Definition: DiscreteValues.cpp:153
gtsam::DecisionTreeFactor
Definition: DecisionTreeFactor.h:45
gtsam::HybridValues
Definition: HybridValues.h:37
rng
static std::mt19937 rng
Definition: timeFactorOverhead.cpp:31
s
RealScalar s
Definition: level1_cplx_impl.h:126
e
Array< double, 1, 3 > e(1./3., 0.5, 2.)
keys
const KeyVector keys
Definition: testRegularImplicitSchurFactor.cpp:40
x
set noclip points set clip one set noclip two set bar set border lt lw set xdata set ydata set zdata set x2data set y2data set boxwidth set dummy x
Definition: gnuplot_common_settings.hh:12
gtsam::DiscreteConditional::DiscreteConditional
DiscreteConditional(const DiscreteKey &key, const DiscreteKeys &parents, const Signature::Table &table)
Definition: DiscreteConditional.h:77
formatter
const KeyFormatter & formatter
Definition: treeTraversal-inst.h:204
gtsam::DiscreteKeys
DiscreteKeys is a set of keys that can be assembled using the & operator.
Definition: DiscreteKey.h:41
HybridValues
gtsam::DecisionTreeFactor::shared_ptr
std::shared_ptr< DecisionTreeFactor > shared_ptr
Definition: DecisionTreeFactor.h:51
DiscreteFactor
Discrete values for.
gtsam::DefaultKeyFormatter
KeyFormatter DefaultKeyFormatter
Assign default key formatter.
Definition: Key.cpp:30
gtsam::AlgebraicDecisionTree< Key >
gtsam::operator*
Point2 operator*(double s, const Point2 &p)
multiply with scalar
Definition: Point2.h:52
gtsam::DiscreteConditional::BaseConditional
Conditional< BaseFactor, This > BaseConditional
Typedef to our conditional base class.
Definition: DiscreteConditional.h:47
gtsam::print
void print(const Matrix &A, const string &s, ostream &stream)
Definition: Matrix.cpp:145
ADT
AlgebraicDecisionTree< Key > ADT
Definition: testAlgebraicDecisionTree.cpp:32
table
ArrayXXf table(10, 4)
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
Signature.h
signatures for conditional densities
gtsam::DiscreteConditional::This
DiscreteConditional This
Typedef to this class.
Definition: DiscreteConditional.h:43
gtsam::Conditional
Definition: Conditional.h:63
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:44
tree::f
Point2(* f)(const Point3 &, OptionalJacobian< 2, 3 >)
Definition: testExpression.cpp:218
process_shonan_timing_results.names
dictionary names
Definition: process_shonan_timing_results.py:175
gtsam::DiscreteConditional
Definition: DiscreteConditional.h:38
gtsam::DiscreteConditional::logProbability
double logProbability(const HybridValues &x) const override
< HybridValues version
Definition: DiscreteConditional.h:281
gtsam
traits
Definition: ABC.h:17
gtsam::Testable
Definition: Testable.h:152
gtsam::DiscreteFactor::shared_ptr
std::shared_ptr< DiscreteFactor > shared_ptr
shared_ptr to this class
Definition: DiscreteFactor.h:45
gtsam::DiscreteConditional::printSignature
void printSignature(const std::string &s="Discrete Conditional: ", const KeyFormatter &formatter=DefaultKeyFormatter) const
print index signature only
Definition: DiscreteConditional.h:166
error
static double error
Definition: testRot3.cpp:37
gtsam::traits
Definition: Group.h:36
gtsam::DiscreteValues
Definition: DiscreteValues.h:34
gtsam::DiscreteKey
std::pair< Key, size_t > DiscreteKey
Definition: DiscreteKey.h:38
gtsam::DiscreteConditional::DiscreteConditional
DiscreteConditional(const DiscreteKey &key, const std::string &spec)
No-parent specialization; can also use DiscreteDistribution.
Definition: DiscreteConditional.h:107
gtsam::DiscreteConditional::DiscreteConditional
DiscreteConditional()
Default constructor needed for serialization.
Definition: DiscreteConditional.h:55
gtsam::tol
const G double tol
Definition: Group.h:79
gtsam::html
string html(const DiscreteValues &values, const KeyFormatter &keyFormatter, const DiscreteValues::Names &names)
Free version of html.
Definition: DiscreteValues.cpp:158
gtsam::DiscreteFactor
Definition: DiscreteFactor.h:40
gtsam::DiscreteConditional::BaseFactor
DecisionTreeFactor BaseFactor
Typedef to our factor base class.
Definition: DiscreteConditional.h:45
gtsam::Key
std::uint64_t Key
Integer nonlinear key type.
Definition: types.h:97
max
#define max(a, b)
Definition: datatypes.h:20
gtsam::DiscreteConditional::DiscreteConditional
DiscreteConditional(const DiscreteKey &key, const DiscreteKeys &parents, const std::string &spec)
Definition: DiscreteConditional.h:102
gtsam::Ordering
Definition: inference/Ordering.h:33
DecisionTreeFactor.h
choose
static const T & choose(int layout, const T &col, const T &row)
Definition: cxx11_tensor_block_access.cpp:27
gtsam::Signature
Definition: Signature.h:54
pybind_wrapper_test_script.other
other
Definition: pybind_wrapper_test_script.py:42
Conditional-inst.h


gtsam
Author(s):
autogenerated on Wed May 28 2025 03:01:13