gtsam 4.2.0
gtsam
Loading...
Searching...
No Matches
gtsam::GaussianMixture Class Reference

Detailed Description

A conditional of gaussian mixtures indexed by discrete variables, as part of a Bayes Network.

a density over continuous variables given discrete/continuous parents.

This is the result of the elimination of a continuous variable in a hybrid scheme, such that the remaining variables are discrete+continuous.

Represents the conditional density P(X | M, Z) where X is the set of continuous random variables, M is the selection of discrete variables corresponding to a subset of the Gaussian variables and Z is parent of this node .

The probability P(x|y,z,...) is proportional to \( \sum_i k_i \exp - \frac{1}{2} |R_i x - (d_i - S_i y - T_i z - ...)|^2 \) where i indexes the components and k_i is a component-wise normalization constant.

  • Symbolic factors, used to represent a graph structure, implemented in
+ Inheritance diagram for gtsam::GaussianMixture:

Public Member Functions

Constructors
 GaussianMixture ()=default
 Default constructor, mainly for serialization.
 
 GaussianMixture (const KeyVector &continuousFrontals, const KeyVector &continuousParents, const DiscreteKeys &discreteParents, const Conditionals &conditionals)
 Construct a new GaussianMixture object.
 
 GaussianMixture (KeyVector &&continuousFrontals, KeyVector &&continuousParents, DiscreteKeys &&discreteParents, std::vector< GaussianConditional::shared_ptr > &&conditionals)
 Make a Gaussian Mixture from a list of Gaussian conditionals.
 
 GaussianMixture (const KeyVector &continuousFrontals, const KeyVector &continuousParents, const DiscreteKeys &discreteParents, const std::vector< GaussianConditional::shared_ptr > &conditionals)
 Make a Gaussian Mixture from a list of Gaussian conditionals.
 
Testable
bool equals (const HybridFactor &lf, double tol=1e-9) const override
 Test equality with base HybridFactor.
 
void print (const std::string &s="GaussianMixture\n", const KeyFormatter &formatter=DefaultKeyFormatter) const override
 Print utility.
 
Standard API
GaussianConditional::shared_ptr operator() (const DiscreteValues &discreteValues) const
 Return the conditional Gaussian for the given discrete assignment.
 
size_t nrComponents () const
 Returns the total number of continuous components.
 
KeyVector continuousParents () const
 Returns the continuous keys among the parents.
 
double logNormalizationConstant () const override
 The log normalization constant is max of the the individual log-normalization constants.
 
boost::shared_ptr< GaussianMixtureFactorlikelihood (const VectorValues &given) const
 Create a likelihood factor for a Gaussian mixture, return a Mixture factor on the parents.
 
const Conditionalsconditionals () const
 Getter for the underlying Conditionals DecisionTree.
 
AlgebraicDecisionTree< KeylogProbability (const VectorValues &continuousValues) const
 Compute logProbability of the GaussianMixture as a tree.
 
double error (const HybridValues &values) const override
 Compute the error of this Gaussian Mixture.
 
AlgebraicDecisionTree< Keyerror (const VectorValues &continuousValues) const
 Compute error of the GaussianMixture as a tree.
 
double logProbability (const HybridValues &values) const override
 Compute the logProbability of this Gaussian Mixture.
 
double evaluate (const HybridValues &values) const override
 Calculate probability density for given values.
 
double operator() (const HybridValues &values) const
 Evaluate probability density, sugar.
 
void prune (const DecisionTreeFactor &decisionTree)
 Prune the decision tree of Gaussian factors as per the discrete decisionTree.
 
GaussianFactorGraphTree add (const GaussianFactorGraphTree &sum) const
 Merge the Gaussian Factor Graphs in this and sum while maintaining the decision tree structure.
 
- Public Member Functions inherited from gtsam::HybridFactor
 HybridFactor ()=default
 Default constructor creates empty factor.
 
 HybridFactor (const KeyVector &keys)
 Construct hybrid factor from continuous keys.
 
 HybridFactor (const DiscreteKeys &discreteKeys)
 Construct hybrid factor from discrete keys.
 
 HybridFactor (const KeyVector &continuousKeys, const DiscreteKeys &discreteKeys)
 Construct a new Hybrid Factor object.
 
virtual ~HybridFactor ()=default
 Virtual destructor.
 
void print (const std::string &s="HybridFactor\n", const KeyFormatter &formatter=DefaultKeyFormatter) const override
 print
 
bool isDiscrete () const
 True if this is a factor of discrete variables only.
 
bool isContinuous () const
 True if this is a factor of continuous variables only.
 
bool isHybrid () const
 True is this is a Discrete-Continuous factor.
 
size_t nrContinuous () const
 Return the number of continuous variables in this factor.
 
const DiscreteKeysdiscreteKeys () const
 Return the discrete keys for this factor.
 
const KeyVectorcontinuousKeys () const
 Return only the continuous keys for this factor.
 
- Public Member Functions inherited from gtsam::Factor
virtual ~Factor ()=default
 Default destructor.
 
bool empty () const
 Whether the factor is empty (involves zero variables).
 
Key front () const
 First key.
 
Key back () const
 Last key.
 
const_iterator find (Key key) const
 find
 
const KeyVectorkeys () const
 Access the factor's involved variable keys.
 
const_iterator begin () const
 Iterator at beginning of involved variable keys.
 
const_iterator end () const
 Iterator at end of involved variable keys.
 
size_t size () const
 
virtual void printKeys (const std::string &s="Factor", const KeyFormatter &formatter=DefaultKeyFormatter) const
 print only keys
 
bool equals (const This &other, double tol=1e-9) const
 check equality
 
KeyVectorkeys ()
 
iterator begin ()
 Iterator at beginning of involved variable keys.
 
iterator end ()
 Iterator at end of involved variable keys.
 
- Public Member Functions inherited from gtsam::Conditional< HybridFactor, GaussianMixture >
void print (const std::string &s="Conditional", const KeyFormatter &formatter=DefaultKeyFormatter) const
 print with optional formatter
 
bool equals (const This &c, double tol=1e-9) const
 check equality
 
size_t nrFrontals () const
 return the number of frontals
 
size_t nrParents () const
 return the number of parents
 
Key firstFrontalKey () const
 Convenience function to get the first frontal key.
 
Frontals frontals () const
 return a view of the frontal keys
 
Parents parents () const
 return a view of the parent keys
 
double operator() (const HybridValues &x) const
 Evaluate probability density, sugar.
 
double normalizationConstant () const
 Non-virtual, exponentiate logNormalizationConstant.
 
size_t & nrFrontals ()
 Mutable version of nrFrontals.
 
FACTOR::const_iterator beginFrontals () const
 Iterator pointing to first frontal key.
 
FACTOR::iterator beginFrontals ()
 Mutable iterator pointing to first frontal key.
 
FACTOR::const_iterator endFrontals () const
 Iterator pointing past the last frontal key.
 
FACTOR::iterator endFrontals ()
 Mutable iterator pointing past the last frontal key.
 
FACTOR::const_iterator beginParents () const
 Iterator pointing to the first parent key.
 
FACTOR::iterator beginParents ()
 Mutable iterator pointing to the first parent key.
 
FACTOR::const_iterator endParents () const
 Iterator pointing past the last parent key.
 
FACTOR::iterator endParents ()
 Mutable iterator pointing past the last parent key.
 

Public Types

using This = GaussianMixture
 
using shared_ptr = boost::shared_ptr< GaussianMixture >
 
using BaseFactor = HybridFactor
 
using BaseConditional = Conditional< HybridFactor, GaussianMixture >
 
using Conditionals = DecisionTree< Key, GaussianConditional::shared_ptr >
 typedef for Decision Tree of Gaussian Conditionals
 
- Public Types inherited from gtsam::HybridFactor
typedef HybridFactor This
 This class.
 
typedef boost::shared_ptr< HybridFactorshared_ptr
 shared_ptr to this class
 
typedef Factor Base
 Our base class.
 
- Public Types inherited from gtsam::Factor
typedef KeyVector::iterator iterator
 Iterator over keys.
 
typedef KeyVector::const_iterator const_iterator
 Const iterator over keys.
 
- Public Types inherited from gtsam::Conditional< HybridFactor, GaussianMixture >
typedef boost::iterator_range< typename FACTOR::const_iterator > Frontals
 View of the frontal keys (call frontals())
 
typedef boost::iterator_range< typename FACTOR::const_iterator > Parents
 View of the separator keys (call parents())
 

Friends

class boost::serialization::access
 Serialization function.
 

Additional Inherited Members

- Static Public Member Functions inherited from gtsam::Conditional< HybridFactor, GaussianMixture >
static bool CheckInvariants (const GaussianMixture &conditional, const VALUES &x)
 Check invariants of this conditional, given the values x.
 
- Protected Member Functions inherited from gtsam::Factor
 Factor ()
 Default constructor for I/O.
 
template<typename CONTAINER >
 Factor (const CONTAINER &keys)
 Construct factor from container of keys.
 
template<typename ITERATOR >
 Factor (ITERATOR first, ITERATOR last)
 Construct factor from iterator keys.
 
- Protected Member Functions inherited from gtsam::Conditional< HybridFactor, GaussianMixture >
 Conditional ()
 Empty Constructor to make serialization possible.
 
 Conditional (size_t nrFrontals)
 Constructor.
 
- Static Protected Member Functions inherited from gtsam::Factor
template<typename CONTAINER >
static Factor FromKeys (const CONTAINER &keys)
 Construct factor from container of keys.
 
template<typename ITERATOR >
static Factor FromIterators (ITERATOR first, ITERATOR last)
 Construct factor from iterator keys.
 
- Protected Attributes inherited from gtsam::HybridFactor
DiscreteKeys discreteKeys_
 
KeyVector continuousKeys_
 Record continuous keys for book-keeping.
 
- Protected Attributes inherited from gtsam::Factor
KeyVector keys_
 The keys involved in this factor.
 
- Protected Attributes inherited from gtsam::Conditional< HybridFactor, GaussianMixture >
size_t nrFrontals_
 The first nrFrontal variables are frontal and the rest are parents.
 

Constructor & Destructor Documentation

◆ GaussianMixture() [1/3]

gtsam::GaussianMixture::GaussianMixture ( const KeyVector continuousFrontals,
const KeyVector continuousParents,
const DiscreteKeys discreteParents,
const Conditionals conditionals 
)

Construct a new GaussianMixture object.

Parameters
continuousFrontalsthe continuous frontals.
continuousParentsthe continuous parents.
discreteParentsthe discrete parents. Will be placed last.
conditionalsa decision tree of GaussianConditionals. The number of conditionals should be C^(number of discrete parents), where C is the cardinality of the DiscreteKeys in discreteParents, since the discreteParents will be used as the labels in the decision tree.

◆ GaussianMixture() [2/3]

gtsam::GaussianMixture::GaussianMixture ( KeyVector &&  continuousFrontals,
KeyVector &&  continuousParents,
DiscreteKeys &&  discreteParents,
std::vector< GaussianConditional::shared_ptr > &&  conditionals 
)

Make a Gaussian Mixture from a list of Gaussian conditionals.

Parameters
continuousFrontalsThe continuous frontal variables
continuousParentsThe continuous parent variables
discreteParentsDiscrete parents variables
conditionalsList of conditionals

◆ GaussianMixture() [3/3]

gtsam::GaussianMixture::GaussianMixture ( const KeyVector continuousFrontals,
const KeyVector continuousParents,
const DiscreteKeys discreteParents,
const std::vector< GaussianConditional::shared_ptr > &  conditionals 
)

Make a Gaussian Mixture from a list of Gaussian conditionals.

Parameters
continuousFrontalsThe continuous frontal variables
continuousParentsThe continuous parent variables
discreteParentsDiscrete parents variables
conditionalsList of conditionals

Member Function Documentation

◆ add()

GaussianFactorGraphTree gtsam::GaussianMixture::add ( const GaussianFactorGraphTree sum) const

Merge the Gaussian Factor Graphs in this and sum while maintaining the decision tree structure.

Parameters
sumDecision Tree of Gaussian Factor Graphs
Returns
GaussianFactorGraphTree

◆ equals()

bool gtsam::GaussianMixture::equals ( const HybridFactor lf,
double  tol = 1e-9 
) const
overridevirtual

Test equality with base HybridFactor.

Reimplemented from gtsam::HybridFactor.

◆ error() [1/2]

double gtsam::GaussianMixture::error ( const HybridValues values) const
overridevirtual

Compute the error of this Gaussian Mixture.

This requires some care, as different mixture components may have different normalization constants. Let's consider p(x|y,m), where m is discrete. We need the error to satisfy the invariant:

error(x;y,m) = K - log(probability(x;y,m))

For all x,y,m. But note that K, the (log) normalization constant defined in Conditional.h, should not depend on x, y, or m, only on the parameters of the density. Hence, we delegate to the underlying Gaussian conditionals, indexed by m, which do satisfy:

log(probability_m(x;y)) = K_m - error_m(x;y)

We resolve by having K == max(K_m) and

error(x;y,m) = error_m(x;y) + K - K_m

which also makes error(x;y,m) >= 0 for all x,y,m.

Parameters
valuesContinuous values and discrete assignment.
Returns
double

Reimplemented from gtsam::Factor.

◆ error() [2/2]

AlgebraicDecisionTree< Key > gtsam::GaussianMixture::error ( const VectorValues continuousValues) const

Compute error of the GaussianMixture as a tree.

Parameters
continuousValuesThe continuous VectorValues.
Returns
AlgebraicDecisionTree<Key> A decision tree on the discrete keys only, with the leaf values as the error for each assignment.

◆ evaluate()

double gtsam::GaussianMixture::evaluate ( const HybridValues values) const
overridevirtual

Calculate probability density for given values.

Reimplemented from gtsam::Conditional< HybridFactor, GaussianMixture >.

◆ logNormalizationConstant()

double gtsam::GaussianMixture::logNormalizationConstant ( ) const
inlineoverridevirtual

The log normalization constant is max of the the individual log-normalization constants.

Reimplemented from gtsam::Conditional< HybridFactor, GaussianMixture >.

◆ logProbability() [1/2]

double gtsam::GaussianMixture::logProbability ( const HybridValues values) const
overridevirtual

Compute the logProbability of this Gaussian Mixture.

Parameters
valuesContinuous values and discrete assignment.
Returns
double

Reimplemented from gtsam::Conditional< HybridFactor, GaussianMixture >.

◆ logProbability() [2/2]

AlgebraicDecisionTree< Key > gtsam::GaussianMixture::logProbability ( const VectorValues continuousValues) const

Compute logProbability of the GaussianMixture as a tree.

Parameters
continuousValuesThe continuous VectorValues.
Returns
AlgebraicDecisionTree<Key> A decision tree with the same keys as the conditionals, and leaf values as the logProbability.

◆ print()

void gtsam::GaussianMixture::print ( const std::string &  s = "GaussianMixture\n",
const KeyFormatter formatter = DefaultKeyFormatter 
) const
overridevirtual

Print utility.

Reimplemented from gtsam::Factor.

◆ prune()

void gtsam::GaussianMixture::prune ( const DecisionTreeFactor decisionTree)

Prune the decision tree of Gaussian factors as per the discrete decisionTree.

Parameters
decisionTreeA pruned decision tree of discrete keys where the leaves are probabilities.

The documentation for this class was generated from the following files: