/** * @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 boost::shared_ptr eliminateOne(FactorGraph& 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 BayesNet eliminate(FactorGraph& 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 std::pair< BayesNet, FactorGraph > factor(const BayesNet& 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 FactorGraph marginalize(const BayesNet& bn, const Ordering& keys); } /// namespace gtsam