gtsam/inference/inference.h

61 lines
1.9 KiB
C++

/**
* @file inference.h
* @brief Contains *generic* inference algorithms that convert between templated
* graphical models, i.e., factor graphs, Bayes nets, and Bayes trees
* @author Frank Dellaert
*/
#pragma once
#include <gtsam/inference/FactorGraph.h>
#include <gtsam/inference/BayesNet.h>
#include <gtsam/inference/Key.h>
namespace gtsam {
class Ordering;
class GaussianFactorGraph;
// ELIMINATE: FACTOR GRAPH -> BAYES NET
/**
* Eliminate a single node yielding a Conditional
* Eliminates the factors from the factor graph through findAndRemoveFactors
* and adds a new factor on the separator to the factor graph
*/
template<class Factor, class Conditional>
boost::shared_ptr<Conditional>
eliminateOne(FactorGraph<Factor>& factorGraph, const Symbol& key);
/**
* eliminate factor graph using the given (not necessarily complete)
* ordering, yielding a chordal Bayes net and (partially eliminated) FG
*/
template<class Factor, class Conditional>
BayesNet<Conditional> eliminate(FactorGraph<Factor>& factorGraph, const Ordering& ordering);
// FACTOR/MARGINALIZE: BAYES NET -> FACTOR GRAPH
/**
* Factor P(X) as P(not keys|keys) P(keys)
* @return P(not keys|keys) as an incomplete BayesNet, and P(keys) as a factor graph
*/
template<class Factor, class Conditional>
std::pair< BayesNet<Conditional>, FactorGraph<Factor> >
factor(const BayesNet<Conditional>& bn, const Ordering& keys);
/**
* integrate out all except ordering, might be inefficient as the ordering
* will simply be the current ordering with the keys put in the back
*/
template<class Factor, class Conditional>
FactorGraph<Factor> marginalize(const BayesNet<Conditional>& bn, const Ordering& keys);
/**
* Hacked-together function to compute a Gaussian marginal for the given variable.
* todo: This is inefficient!
*/
//std::pair<Vector,Matrix> marginalGaussian(const GaussianFactorGraph& fg, const Symbol& key);
} /// namespace gtsam