gtsam  4.1.0 gtsam
gtsam::GaussianBayesTree Class Reference

## Detailed Description

A Bayes tree representing a Gaussian density. Inheritance diagram for gtsam::GaussianBayesTree:

## Public Member Functions

GaussianBayesTree ()
Default constructor, creates an empty Bayes tree.

bool equals (const This &other, double tol=1e-9) const
Check equality.

VectorValues optimize () const
Recursively optimize the BayesTree to produce a vector solution.

Optimize along the gradient direction, with a closed-form computation to perform the line search. More...

VectorValues gradient (const VectorValues &x0) const
Compute the gradient of the energy function, $$\nabla_{x=x_0} \left\Vert \Sigma^{-1} R x - d \right\Vert^2$$, centered around $$x = x_0$$. More...

Compute the gradient of the energy function, $$\nabla_{x=0} \left\Vert \Sigma^{-1} R x - d \right\Vert^2$$, centered around zero. More...

double error (const VectorValues &x) const
0.5 * sum of squared Mahalanobis distances.

double determinant () const
Computes the determinant of a GassianBayesTree, as if the Bayes tree is reorganized into a matrix. More...

double logDeterminant () const
Computes the determinant of a GassianBayesTree, as if the Bayes tree is reorganized into a matrix. More...

Matrix marginalCovariance (Key key) const
Return the marginal on the requested variable as a covariance matrix. More... Public Member Functions inherited from gtsam::BayesTree< GaussianBayesTreeClique >
size_t size () const
number of cliques

bool empty () const
Check if there are any cliques in the tree.

const Nodesnodes () const
return nodes

const sharedNode operator[] (Key j) const
Access node by variable.

const Rootsroots () const
return root cliques

const sharedCliqueclique (Key j) const
alternate syntax for matlab: find the clique that contains the variable with Key j

BayesTreeCliqueData getCliqueData () const
Gather data on all cliques.

size_t numCachedSeparatorMarginals () const
Collect number of cliques with cached separator marginals.

sharedConditional marginalFactor (Key j, const Eliminate &function=EliminationTraitsType::DefaultEliminate) const
Return marginal on any variable. More...

sharedFactorGraph joint (Key j1, Key j2, const Eliminate &function=EliminationTraitsType::DefaultEliminate) const
return joint on two variables Limitation: can only calculate joint if cliques are disjoint or one of them is root

sharedBayesNet jointBayesNet (Key j1, Key j2, const Eliminate &function=EliminationTraitsType::DefaultEliminate) const
return joint on two variables as a BayesNet Limitation: can only calculate joint if cliques are disjoint or one of them is root

void saveGraph (const std::string &s, const KeyFormatter &keyFormatter=DefaultKeyFormatter) const
Read only with side effects. More...

Key findParentClique (const CONTAINER &parents) const
Find parent clique of a conditional. More...

void clear ()
Remove all nodes.

void deleteCachedShortcuts ()
Clear all shortcut caches - use before timing on marginal calculation to avoid residual cache data.

void removePath (sharedClique clique, BayesNetType *bn, Cliques *orphans)
Remove path from clique to root and return that path as factors plus a list of orphaned subtree roots. More...

void removeTop (const KeyVector &keys, BayesNetType *bn, Cliques *orphans)
Given a list of indices, turn "contaminated" part of the tree back into a factor graph. More...

Cliques removeSubtree (const sharedClique &subtree)
Remove the requested subtree.

void insertRoot (const sharedClique &subtree)
Insert a new subtree with known parent clique. More...

void addClique (const sharedClique &clique, const sharedClique &parent_clique=sharedClique())

void addFactorsToGraph (FactorGraph< FactorType > *graph) const
Add all cliques in this BayesTree to the specified factor graph.

void print (const std::string &s="", const KeyFormatter &keyFormatter=DefaultKeyFormatter) const
print

## Public Types

typedef GaussianBayesTree This

typedef boost::shared_ptr< Thisshared_ptr Public Types inherited from gtsam::BayesTree< GaussianBayesTreeClique >
typedef GaussianBayesTreeClique Clique
The clique type, normally BayesTreeClique.

typedef boost::shared_ptr< CliquesharedClique
Shared pointer to a clique.

typedef Clique Node
Synonym for Clique (TODO: remove)

typedef sharedClique sharedNode
Synonym for sharedClique (TODO: remove)

typedef CLIQUE::ConditionalType ConditionalType

typedef boost::shared_ptr< ConditionalType > sharedConditional

typedef CLIQUE::BayesNetType BayesNetType

typedef boost::shared_ptr< BayesNetType > sharedBayesNet

typedef CLIQUE::FactorType FactorType

typedef boost::shared_ptr< FactorType > sharedFactor

typedef CLIQUE::FactorGraphType FactorGraphType

typedef boost::shared_ptr< FactorGraphType > sharedFactorGraph

typedef FactorGraphType::Eliminate Eliminate

typedef CLIQUE::EliminationTraitsType EliminationTraitsType

typedef FastList< sharedCliqueCliques
A convenience class for a list of shared cliques.

typedef ConcurrentMap< Key, sharedCliqueNodes
Map from keys to Clique.

typedef FastVector< sharedCliqueRoots
Root cliques. Protected Types inherited from gtsam::BayesTree< GaussianBayesTreeClique >
typedef BayesTree< GaussianBayesTreeCliqueThis

typedef boost::shared_ptr< Thisshared_ptr Protected Member Functions inherited from gtsam::BayesTree< GaussianBayesTreeClique >
Thisoperator= (const This &other)
Assignment operator.

BayesTree ()
Create an empty Bayes Tree.

BayesTree (const This &other)
Copy constructor.

void getCliqueData (sharedClique clique, BayesTreeCliqueData *stats) const
Gather data on a single clique.

void saveGraph (std::ostream &s, sharedClique clique, const KeyFormatter &keyFormatter, int parentnum=0) const
private helper method for saving the Tree to a text file in GraphViz format

void removeClique (sharedClique clique)
remove a clique: warning, can result in a forest

void fillNodesIndex (const sharedClique &subtree)
Fill the nodes index for a subtree.

bool equals (const This &other, double tol=1e-9) const
check equality Protected Attributes inherited from gtsam::BayesTree< GaussianBayesTreeClique >
Nodes nodes_
Map from indices to Clique.

Roots roots_
Root cliques.

## ◆ determinant()

 double gtsam::GaussianBayesTree::determinant ( ) const

Computes the determinant of a GassianBayesTree, as if the Bayes tree is reorganized into a matrix.

A GassianBayesTree is equivalent to an upper triangular matrix, and for an upper triangular matrix determinant is the product of the diagonal elements. Instead of actually multiplying we add the logarithms of the diagonal elements and take the exponent at the end because this is more numerically stable.

 VectorValues gtsam::GaussianBayesTree::gradient ( const VectorValues & x0 ) const

Compute the gradient of the energy function, $$\nabla_{x=x_0} \left\Vert \Sigma^{-1} R x - d \right\Vert^2$$, centered around $$x = x_0$$.

The gradient is $$R^T(Rx-d)$$.

Parameters
Returns

Compute the gradient of the energy function, $$\nabla_{x=0} \left\Vert \Sigma^{-1} R x - d \right\Vert^2$$, centered around zero.

The gradient about zero is $$-R^T d$$. See also gradient(const GaussianBayesNet&, const VectorValues&).

Returns

## ◆ logDeterminant()

 double gtsam::GaussianBayesTree::logDeterminant ( ) const

Computes the determinant of a GassianBayesTree, as if the Bayes tree is reorganized into a matrix.

A GassianBayesTree is equivalent to an upper triangular matrix, and for an upper triangular matrix determinant is the product of the diagonal elements. Instead of actually multiplying we add the logarithms of the diagonal elements and take the exponent at the end because this is more numerically stable.

## ◆ marginalCovariance()

 Matrix gtsam::GaussianBayesTree::marginalCovariance ( Key key ) const

Return the marginal on the requested variable as a covariance matrix.

Optimize along the gradient direction, with a closed-form computation to perform the line search.

The gradient is computed about $$\delta x=0$$.

This function returns $$\delta x$$ that minimizes a reparametrized problem. The error function of a GaussianBayesNet is

$f(\delta x) = \frac{1}{2} |R \delta x - d|^2 = \frac{1}{2}d^T d - d^T R \delta x + \frac{1}{2} \delta x^T R^T R \delta x$

$g(\delta x) = R^T(R\delta x - d), \qquad G(\delta x) = R^T R.$
This function performs the line search in the direction of the gradient evaluated at $$g = g(\delta x = 0)$$ with step size $$\alpha$$ that minimizes $$f(\delta x = \alpha g)$$:
$f(\alpha) = \frac{1}{2} d^T d + g^T \delta x + \frac{1}{2} \alpha^2 g^T G g$
Optimizing by setting the derivative to zero yields $$\hat \alpha = (-g^T g) / (g^T G g)$$. For efficiency, this function evaluates the denominator without computing the Hessian $$G$$, returning
$\delta x = \hat\alpha g = \frac{-g^T g}{(R g)^T(R g)}$