gtsam
Loading...
Searching...
No Matches
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
18
19#pragma once
20
23#include <gtsam/inference/Conditional-inst.h>
24
25#include <memory>
26#include <random> // for std::mt19937_64
27#include <string>
28#include <vector>
29
30namespace gtsam {
31
38class 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)
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
126 using DecisionTreeFactor::operator*;
127
143 DiscreteConditional operator*(const DiscreteConditional& other) const;
144
146 DiscreteConditional marginal(Key key) const;
147
151
153 void print(
154 const std::string& s = "Discrete Conditional: ",
155 const KeyFormatter& formatter = DefaultKeyFormatter) const override;
156
158 bool equals(const DiscreteFactor& other, double tol = 1e-9) const override;
159
163
165 double logProbability(const DiscreteValues& x) const { return -error(x); }
166
169 const std::string& s = "Discrete Conditional: ",
170 const KeyFormatter& formatter = DefaultKeyFormatter) const {
171 static_cast<const BaseConditional*>(this)->print(s, formatter);
172 }
173
174 using BaseFactor::error;
175 using BaseFactor::evaluate;
176 using BaseFactor::operator();
177
191 shared_ptr choose(const DiscreteValues& given) const;
192
194 DecisionTreeFactor::shared_ptr likelihood(
195 const DiscreteValues& frontalValues) const;
196
198 DecisionTreeFactor::shared_ptr likelihood(size_t frontal) const;
199
211 virtual size_t sample(const DiscreteValues& parentsValues,
212 std::mt19937_64* rng = nullptr) const;
213
215 size_t sample(size_t parent_value, std::mt19937_64* rng = nullptr) const;
216
223 size_t sample(std::mt19937_64* rng = nullptr) const;
224
230 size_t argmax(const DiscreteValues& parentsValues = DiscreteValues()) const;
231
239 virtual DiscreteFactor::shared_ptr max(const Ordering& keys) const override;
240
244
246 void sampleInPlace(DiscreteValues* parentsValues,
247 std::mt19937_64* rng = nullptr) const;
248
250 std::vector<DiscreteValues> frontalAssignments() const;
251
253 std::vector<DiscreteValues> allAssignments() const;
254
258
260 std::string markdown(const KeyFormatter& keyFormatter = DefaultKeyFormatter,
261 const Names& names = {}) const override;
262
264 std::string html(const KeyFormatter& keyFormatter = DefaultKeyFormatter,
265 const Names& names = {}) const override;
266
270
275 double evaluate(const HybridValues& x) const override;
276
277 using BaseConditional::operator();
278
283 double logProbability(const HybridValues& x) const override {
284 return -error(x);
285 }
286
293 double negLogConstant() const override;
294
296 virtual void prune(size_t maxNrAssignments);
297
306 void removeDiscreteModes(const DiscreteValues& given);
307
309
310 protected:
312 DiscreteConditional::ADT choose(const DiscreteValues& given,
313 bool forceComplete) const;
314
315 private:
316#if GTSAM_ENABLE_BOOST_SERIALIZATION
318 friend class boost::serialization::access;
319 template <class Archive>
320 void serialize(Archive& ar, const unsigned int /*version*/) {
321 ar& BOOST_SERIALIZATION_BASE_OBJECT_NVP(BaseFactor);
322 ar& BOOST_SERIALIZATION_BASE_OBJECT_NVP(BaseConditional);
323 }
324#endif
325};
326// DiscreteConditional
327
328// traits
329template <>
330struct traits<DiscreteConditional> : public Testable<DiscreteConditional> {};
331
332} // namespace gtsam
signatures for conditional densities
std::pair< Key, size_t > DiscreteKey
Key type for discrete variables.
Definition DiscreteKey.h:38
Global functions in a separate testing namespace.
Definition chartTesting.h:28
KeyFormatter DefaultKeyFormatter
Assign default key formatter.
Definition Key.cpp:30
string markdown(const DiscreteValues &values, const KeyFormatter &keyFormatter, const DiscreteValues::Names &names)
Free version of markdown.
Definition DiscreteValues.cpp:155
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
DecisionTreeFactor()
Default constructor for I/O.
Definition DecisionTreeFactor.cpp:34
Discrete Conditional Density Derives from DecisionTreeFactor.
Definition DiscreteConditional.h:40
double error(const DiscreteValues &values) const override
Calculate error for DiscreteValues x, is -log(probability).
Definition DecisionTreeFactor.cpp:58
DiscreteConditional(const DiscreteKey &key, const std::string &spec)
No-parent specialization; can also use DiscreteDistribution.
Definition DiscreteConditional.h:107
DiscreteConditional(const DiscreteKey &key, const DiscreteKeys &parents, const std::string &spec)
Construct from key, parents, and a string specifying the conditional probability table (CPT) in 00 01...
Definition DiscreteConditional.h:102
std::shared_ptr< This > shared_ptr
shared_ptr to this class
Definition DiscreteConditional.h:44
DiscreteValues Values
backwards compatibility
Definition DiscreteConditional.h:49
DiscreteConditional(const DiscreteKey &key, const DiscreteKeys &parents, const Signature::Table &table)
Construct from key, parents, and a Signature::Table specifying the conditional probability table (CPT...
Definition DiscreteConditional.h:77
void print(const std::string &s="Discrete Conditional: ", const KeyFormatter &formatter=DefaultKeyFormatter) const override
GTSAM-style print.
Definition DiscreteConditional.cpp:143
Conditional< BaseFactor, This > BaseConditional
Typedef to our conditional base class.
Definition DiscreteConditional.h:47
double logProbability(const HybridValues &x) const override
< HybridValues version
Definition DiscreteConditional.h:283
DiscreteConditional This
Typedef to this class.
Definition DiscreteConditional.h:43
DiscreteConditional(const DiscreteKey &key, const DiscreteKeys &parents, const std::vector< double > &table)
Construct from key, parents, and a vector<double> specifying the conditional probability table (CPT) ...
Definition DiscreteConditional.h:88
DecisionTreeFactor BaseFactor
Typedef to our factor base class.
Definition DiscreteConditional.h:45
DiscreteConditional()
Default constructor needed for serialization.
Definition DiscreteConditional.h:55
double logProbability(const DiscreteValues &x) const
Log-probability is just -error(x).
Definition DiscreteConditional.h:165
void printSignature(const std::string &s="Discrete Conditional: ", const KeyFormatter &formatter=DefaultKeyFormatter) const
print index signature only
Definition DiscreteConditional.h:168
Base class for discrete probabilistic factors The most general one is the derived DecisionTreeFactor.
Definition DiscreteFactor.h:41
std::shared_ptr< DiscreteFactor > shared_ptr
shared_ptr to this class
Definition DiscreteFactor.h:46
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
Signature for a discrete conditional distribution, used to construct conditionals.
Definition Signature.h:54
HybridValues represents a collection of DiscreteValues and VectorValues.
Definition HybridValues.h:37
Parents parents() const
Definition Conditional.h:150
Definition Ordering.h:33