gtsam
Loading...
Searching...
No Matches
gtsam::HybridGaussianConditional Class Reference

Detailed Description

A conditional of gaussian conditionals 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::HybridGaussianConditional:

Public Member Functions

Constructors
 HybridGaussianConditional ()=default
 Default constructor, mainly for serialization.
 HybridGaussianConditional (const DiscreteKey &discreteParent, const std::vector< GaussianConditional::shared_ptr > &conditionals)
 Construct from one discrete key and vector of conditionals.
 HybridGaussianConditional (const DiscreteKey &discreteParent, Key key, const std::vector< std::pair< Vector, double > > &parameters)
 Constructs a HybridGaussianConditional with means mu_i and standard deviations sigma_i.
 HybridGaussianConditional (const DiscreteKey &discreteParent, Key key, const Matrix &A, Key parent, const std::vector< std::pair< Vector, double > > &parameters)
 Constructs a HybridGaussianConditional with conditional means A × parent + b_i and standard deviations sigma_i.
 HybridGaussianConditional (const DiscreteKey &discreteParent, Key key, const Matrix &A1, Key parent1, const Matrix &A2, Key parent2, const std::vector< std::pair< Vector, double > > &parameters)
 Constructs a HybridGaussianConditional with conditional means A1 × parent1 + A2 × parent2 + b_i and standard deviations sigma_i.
 HybridGaussianConditional (const DiscreteKeys &discreteParents, const Conditionals &conditionals)
 Construct from multiple discrete keys and conditional tree.
 HybridGaussianConditional (const DiscreteKeys &discreteParents, const FactorValuePairs &pairs, bool pruned=false)
 Construct from multiple discrete keys M and a tree of factor/scalar pairs, where the scalar is assumed to be the the negative log constant for each assignment m, up to a constant.
Testable
bool equals (const HybridFactor &lf, double tol=1e-9) const override
 Test equality with base HybridFactor.
void print (const std::string &s="HybridGaussianConditional\n", const KeyFormatter &formatter=DefaultKeyFormatter) const override
 Print utility.
Standard API
GaussianConditional::shared_ptr choose (const DiscreteValues &discreteValues) const
 Return the conditional Gaussian for the given discrete assignment.
GaussianConditional::shared_ptr operator() (const DiscreteValues &discreteValues) const
 Syntactic sugar for choose.
size_t nrComponents () const
 Returns the total number of continuous components.
KeyVector continuousParents () const
 Returns the continuous keys among the parents.
double negLogConstant () const override
 Return log normalization constant in negative log space.
std::shared_ptr< HybridGaussianFactor > likelihood (const VectorValues &given) const
 Create a likelihood factor for a hybrid Gaussian conditional, return a hybrid Gaussian factor on the parents.
const Conditionals conditionals () const
 Get Conditionals DecisionTree (dynamic cast from factors).
double logProbability (const HybridValues &values) const override
 Compute the logProbability of this hybrid Gaussian conditional.
double evaluate (const HybridValues &values) const override
 Calculate probability density for given values.
double operator() (const HybridValues &values) const
 Evaluate probability density, sugar.
HybridGaussianConditional::shared_ptr prune (const DiscreteConditional &discreteProbs) const
 Prune the decision tree of Gaussian factors as per the discrete discreteProbs.
bool pruned () const
 Return true if the conditional has already been pruned.
std::shared_ptr< Factor > restrict (const DiscreteValues &discreteValues) const override
 Restrict to the given discrete values.
Public Member Functions inherited from gtsam::HybridGaussianFactor
 HybridGaussianFactor ()=default
 Default constructor, mainly for serialization.
 HybridGaussianFactor (const DiscreteKey &discreteKey, const std::vector< GaussianFactor::shared_ptr > &factors)
 Construct a new HybridGaussianFactor on a single discrete key, providing the factors for each mode m as a vector of factors ϕ_m(x).
 HybridGaussianFactor (const DiscreteKey &discreteKey, const std::vector< GaussianFactorValuePair > &factorPairs)
 Construct a new HybridGaussianFactor on a single discrete key, including a scalar error value for each mode m.
 HybridGaussianFactor (const DiscreteKeys &discreteKeys, const FactorValuePairs &factorPairs)
 Construct a new HybridGaussianFactor on a several discrete keys M, including a scalar error value for each assignment m.
bool equals (const HybridFactor &lf, double tol=1e-9) const override
 equals
void print (const std::string &s="", const KeyFormatter &formatter=DefaultKeyFormatter) const override
 print
GaussianFactorValuePair operator() (const DiscreteValues &assignment) const
 Get factor at a given discrete assignment.
AlgebraicDecisionTree< Key > errorTree (const VectorValues &continuousValues) const override
 Compute error of the HybridGaussianFactor as a tree.
double error (const HybridValues &hybridValues) const override
 Compute the log-likelihood, including the log-normalizing constant.
const FactorValuePairs & factors () const
 Getter for GaussianFactor decision tree.
virtual HybridGaussianProductFactor asProductFactor () const
 Helper function to return factors and functional to create a DecisionTree of Gaussian Factor Graphs.
std::shared_ptr< Factor > restrict (const DiscreteValues &discreteValues) const override
 Restrict the factor to the given discrete values.
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.
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 DiscreteKeys & discreteKeys () const
 Return the discrete keys for this factor.
const KeyVector & continuousKeys () 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 KeyVector & keys () 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
KeyVector & keys ()
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< HybridGaussianFactor, HybridGaussianConditional >
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.
HybridGaussianFactor::const_iterator beginFrontals () const
 Iterator pointing to first frontal key.
HybridGaussianFactor::const_iterator endFrontals () const
 Iterator pointing past the last frontal key.
HybridGaussianFactor::const_iterator beginParents () const
 Iterator pointing to the first parent key.
HybridGaussianFactor::const_iterator endParents () const
 Iterator pointing past the last parent key.

Public Types

using This = HybridGaussianConditional
using shared_ptr = std::shared_ptr<This>
using BaseFactor = HybridGaussianFactor
using BaseConditional = Conditional<BaseFactor, HybridGaussianConditional>
using Conditionals = DecisionTree<Key, GaussianConditional::shared_ptr>
 typedef for Decision Tree of Gaussian Conditionals
Public Types inherited from gtsam::HybridGaussianFactor
using Base = HybridFactor
using This = HybridGaussianFactor
using shared_ptr = std::shared_ptr<This>
using sharedFactor = std::shared_ptr<GaussianFactor>
using FactorValuePairs = DecisionTree<Key, GaussianFactorValuePair>
 typedef for Decision Tree of Gaussian factors and arbitrary value.
Public Types inherited from gtsam::HybridFactor
enum class  Category { None , Discrete , Continuous , Hybrid }
 Enum to help with categorizing hybrid factors.
typedef HybridFactor This
 This class.
typedef std::shared_ptr< HybridFactor > shared_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< HybridGaussianFactor, HybridGaussianConditional >
typedef std::pair< typename HybridGaussianFactor::const_iterator, typename HybridGaussianFactor::const_iterator > ConstFactorRange
 A mini implementation of an iterator range, to share const views of frontals and parents.
typedef ConstFactorRangeIterator Frontals
 View of the frontal keys (call frontals()).
typedef ConstFactorRangeIterator Parents
 View of the separator keys (call parents()).

Additional Inherited Members

static bool CheckInvariants (const HybridGaussianConditional &conditional, const VALUES &x)
 Check invariants of this conditional, given the values x.
 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< HybridGaussianFactor, HybridGaussianConditional >
 Conditional ()
 Empty Constructor to make serialization possible.
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< HybridGaussianFactor, HybridGaussianConditional >
size_t nrFrontals_
 The first nrFrontal variables are frontal and the rest are parents.

Constructor & Destructor Documentation

◆ HybridGaussianConditional() [1/6]

gtsam::HybridGaussianConditional::HybridGaussianConditional ( const DiscreteKey & discreteParent,
const std::vector< GaussianConditional::shared_ptr > & conditionals )

Construct from one discrete key and vector of conditionals.

Parameters
discreteParentSingle discrete parent variable
conditionalsVector of conditionals with the same size as the cardinality of the discrete parent.

◆ HybridGaussianConditional() [2/6]

gtsam::HybridGaussianConditional::HybridGaussianConditional ( const DiscreteKey & discreteParent,
Key key,
const std::vector< std::pair< Vector, double > > & parameters )

Constructs a HybridGaussianConditional with means mu_i and standard deviations sigma_i.

Parameters
discreteParentThe discrete parent or "mode" key.
keyThe key for this conditional variable.
parametersA vector of pairs (mu_i, sigma_i).

◆ HybridGaussianConditional() [3/6]

gtsam::HybridGaussianConditional::HybridGaussianConditional ( const DiscreteKey & discreteParent,
Key key,
const Matrix & A,
Key parent,
const std::vector< std::pair< Vector, double > > & parameters )

Constructs a HybridGaussianConditional with conditional means A × parent + b_i and standard deviations sigma_i.

Parameters
discreteParentThe discrete parent or "mode" key.
keyThe key for this conditional variable.
AThe matrix A.
parentThe key of the parent variable.
parametersA vector of pairs (b_i, sigma_i).

◆ HybridGaussianConditional() [4/6]

gtsam::HybridGaussianConditional::HybridGaussianConditional ( const DiscreteKey & discreteParent,
Key key,
const Matrix & A1,
Key parent1,
const Matrix & A2,
Key parent2,
const std::vector< std::pair< Vector, double > > & parameters )

Constructs a HybridGaussianConditional with conditional means A1 × parent1 + A2 × parent2 + b_i and standard deviations sigma_i.

Parameters
discreteParentThe discrete parent or "mode" key.
keyThe key for this conditional variable.
A1The first matrix.
parent1The key of the first parent variable.
A2The second matrix.
parent2The key of the second parent variable.
parametersA vector of pairs (b_i, sigma_i).

◆ HybridGaussianConditional() [5/6]

gtsam::HybridGaussianConditional::HybridGaussianConditional ( const DiscreteKeys & discreteParents,
const Conditionals & conditionals )

Construct from multiple discrete keys and conditional tree.

Parameters
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.

◆ HybridGaussianConditional() [6/6]

gtsam::HybridGaussianConditional::HybridGaussianConditional ( const DiscreteKeys & discreteParents,
const FactorValuePairs & pairs,
bool pruned = false )

Construct from multiple discrete keys M and a tree of factor/scalar pairs, where the scalar is assumed to be the the negative log constant for each assignment m, up to a constant.

Note
Will throw if factors are not actually conditionals.
Parameters
discreteParentsthe discrete parents. Will be placed last.
conditionalPairsDecision tree of GaussianFactor/scalar pairs.
prunedFlag indicating if conditional has been pruned.

Member Function Documentation

◆ conditionals()

const HybridGaussianConditional::Conditionals gtsam::HybridGaussianConditional::conditionals ( ) const

Get Conditionals DecisionTree (dynamic cast from factors).

Note
Slow: avoid using in favor of factors(), which uses existing tree.

◆ equals()

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

Test equality with base HybridFactor.

Reimplemented from gtsam::HybridFactor.

◆ evaluate()

double gtsam::HybridGaussianConditional::evaluate ( const HybridValues & values) const
overridevirtual

Calculate probability density for given values.

Reimplemented from gtsam::Conditional< HybridGaussianFactor, HybridGaussianConditional >.

◆ logProbability()

double gtsam::HybridGaussianConditional::logProbability ( const HybridValues & values) const
overridevirtual

Compute the logProbability of this hybrid Gaussian conditional.

Parameters
valuesContinuous values and discrete assignment.
Returns
double

Reimplemented from gtsam::Conditional< HybridGaussianFactor, HybridGaussianConditional >.

◆ negLogConstant()

double gtsam::HybridGaussianConditional::negLogConstant ( ) const
inlineoverridevirtual

Return log normalization constant in negative log space.

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

Returns
double

Reimplemented from gtsam::Conditional< HybridGaussianFactor, HybridGaussianConditional >.

◆ print()

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

Print utility.

Reimplemented from gtsam::HybridFactor.

◆ prune()

HybridGaussianConditional::shared_ptr gtsam::HybridGaussianConditional::prune ( const DiscreteConditional & discreteProbs) const

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

Parameters
discreteProbsA pruned set of probabilities for the discrete keys.
Returns
Shared pointer to possibly a pruned HybridGaussianConditional

◆ restrict()

std::shared_ptr< Factor > gtsam::HybridGaussianConditional::restrict ( const DiscreteValues & discreteValues) const
overridevirtual

Restrict to the given discrete values.

Implements gtsam::HybridFactor.


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