53 lines
1.6 KiB
C++
53 lines
1.6 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 "FactorGraph.h"
|
|
#include "BayesNet.h"
|
|
|
|
namespace gtsam {
|
|
|
|
class Ordering;
|
|
|
|
// 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 std::string& 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);
|
|
|
|
} /// namespace gtsam
|