/* ---------------------------------------------------------------------------- * GTSAM Copyright 2010, Georgia Tech Research Corporation, * Atlanta, Georgia 30332-0415 * All Rights Reserved * Authors: Frank Dellaert, et al. (see THANKS for the full author list) * See LICENSE for the license information * -------------------------------------------------------------------------- */ /* * JunctionTree.h * Created on: Feb 4, 2010 * @Author: Kai Ni * @Author: Frank Dellaert * @brief: The junction tree */ #pragma once #include #include #include #include #include #include #include #include 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 JunctionTree: public ClusterTree { public: // In a junction tree each cluster is associated with a clique typedef typename ClusterTree::Cluster Clique; typedef typename Clique::shared_ptr sharedClique; typedef class BayesTree BayesTree; // And we will frequently refer to a symbolic Bayes tree typedef gtsam::BayesTree SymbolicBayesTree; private: // distribute the factors along the cluster tree sharedClique distributeFactors(const FG& fg, const SymbolicBayesTree::sharedClique& clique); // distribute the factors along the cluster tree sharedClique distributeFactors(const FG& fg, const std::vector > >& targets, const SymbolicBayesTree::sharedClique& clique); // recursive elimination function std::pair eliminateOneClique(const boost::shared_ptr& clique) const; public: // constructor JunctionTree() { } // constructor given a factor graph and the elimination ordering JunctionTree(const FG& fg); // eliminate the factors in the subgraphs typename BayesTree::sharedClique eliminate() const; }; // JunctionTree } // namespace gtsam