gtsam/inference/JunctionTree.h

62 lines
1.8 KiB
C++

/*
* JunctionTree.h
* Created on: Feb 4, 2010
* @Author: Kai Ni
* @Author: Frank Dellaert
* @brief: The junction tree
*/
#pragma once
#include <set>
#include <boost/shared_ptr.hpp>
#include <gtsam/inference/BayesTree.h>
#include <gtsam/inference/ClusterTree.h>
#include <gtsam/inference/SymbolicConditional.h>
namespace gtsam {
/**
* A junction tree (or clique-tree) is a cluster-tree where each node k represents a
* clique (maximal fully connected subset) of an associated chordal graph, such as a
* chordal Bayes net resulting from elimination. In GTSAM the BayesTree is used to
* represent the clique tree associated with a Bayes net, and the JunctionTree is
* used to collect the factors associated with each clique during the elimination process.
*/
template<class FG>
class JunctionTree: public ClusterTree<FG> {
public:
// In a junction tree each cluster is associated with a clique
typedef typename ClusterTree<FG>::Cluster Clique;
typedef typename Clique::shared_ptr sharedClique;
// And we will frequently refer to a symbolic Bayes tree
typedef BayesTree<SymbolicConditional> SymbolicBayesTree;
private:
// distribute the factors along the cluster tree
sharedClique distributeFactors(FG& fg,
const SymbolicBayesTree::sharedClique clique);
// utility function called by eliminate
template<class Conditional>
std::pair<FG, typename BayesTree<Conditional>::sharedClique> eliminateOneClique(sharedClique fg_);
public:
// constructor
JunctionTree() {
}
// constructor given a factor graph and the elimination ordering
JunctionTree(FG& fg, const Ordering& ordering);
// eliminate the factors in the subgraphs
template<class Conditional>
typename BayesTree<Conditional>::sharedClique eliminate();
}; // JunctionTree
} // namespace gtsam